From ecd16edafe5afbf00c5775d9f41457d4b015dc2c Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 12 Feb 2014 15:59:04 -0500 Subject: [PATCH 001/184] Disallow "*/maskbits" as an address pattern. Fixes bug 7484. We've had this bug back in a8eaa79e031ee04d44 in 0.0.2pre14, when we first started allowing address masks. --- changes/bug7484 | 4 ++++ src/common/address.c | 5 +++++ src/test/test_addr.c | 2 -- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 changes/bug7484 diff --git a/changes/bug7484 b/changes/bug7484 new file mode 100644 index 0000000000..647992af05 --- /dev/null +++ b/changes/bug7484 @@ -0,0 +1,4 @@ + o Minor bugfixes: + - Stop allowing invalid address patterns containing both a wildcard + address and a bit prefix length. This affects all our + address-range parsing code. Fixes bug 7484; bugfix on 0.0.2pre14. diff --git a/src/common/address.c b/src/common/address.c index b9f2d93154..be41cc73ac 100644 --- a/src/common/address.c +++ b/src/common/address.c @@ -714,6 +714,11 @@ tor_addr_parse_mask_ports(const char *s, /* XXXX_IP6 is this really what we want? */ bits = 96 + bits%32; /* map v4-mapped masks onto 96-128 bits */ } + if (any_flag) { + log_warn(LD_GENERAL, + "Found bit prefix with wildcard address; rejecting"); + goto err; + } } else { /* pick an appropriate mask, as none was given */ if (any_flag) bits = 0; /* This is okay whether it's V6 or V4 (FIX V4-mapped V6!) */ diff --git a/src/test/test_addr.c b/src/test/test_addr.c index 79ddd95090..7c289c371a 100644 --- a/src/test/test_addr.c +++ b/src/test/test_addr.c @@ -646,7 +646,6 @@ test_addr_ip6_helpers(void) test_assert(r == -1); r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL); test_assert(r == -1); -#if 0 /* Try a mask with a wildcard. */ r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL); test_assert(r == -1); @@ -656,7 +655,6 @@ test_addr_ip6_helpers(void) r=tor_addr_parse_mask_ports("*6/30",TAPMP_EXTENDED_STAR, &t1, &mask, NULL, NULL); test_assert(r == -1); -#endif /* Basic mask tests*/ r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL); test_assert(r == AF_INET); From 18c97ad8bc85b9c0a0b3cac088f719f7e261c60b Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 25 Jul 2014 17:49:47 -0700 Subject: [PATCH 002/184] Expose parse_client_transport_line() and parse_server_transport_line() for the test suite --- src/or/config.c | 10 ++-------- src/or/config.h | 4 ++++ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 310cef8e2e..b50834b61b 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -536,12 +536,6 @@ static int options_transition_affects_workers( static int options_transition_affects_descriptor( const or_options_t *old_options, const or_options_t *new_options); static int check_nickname_list(char **lst, const char *name, char **msg); - -static int parse_client_transport_line(const or_options_t *options, - const char *line, int validate_only); - -static int parse_server_transport_line(const or_options_t *options, - const char *line, int validate_only); static char *get_bindaddr_from_transport_listen_line(const char *line, const char *transport); static int parse_dir_authority_line(const char *line, @@ -4763,7 +4757,7 @@ parse_bridge_line(const char *line) * - If it's an external proxy line, add the transport described in the line to * our internal transport list. * - If it's a managed proxy line, launch the managed proxy. */ -static int +STATIC int parse_client_transport_line(const or_options_t *options, const char *line, int validate_only) { @@ -5063,7 +5057,7 @@ get_options_for_server_transport(const char *transport) * isn't. * If validate_only is 0, the line is well-formed, and it's a * managed proxy line, launch the managed proxy. */ -static int +STATIC int parse_server_transport_line(const or_options_t *options, const char *line, int validate_only) { diff --git a/src/or/config.h b/src/or/config.h index bf386134b8..31496c2720 100644 --- a/src/or/config.h +++ b/src/or/config.h @@ -140,6 +140,10 @@ STATIC int options_validate(or_options_t *old_options, or_options_t *options, or_options_t *default_options, int from_setconf, char **msg); +STATIC int parse_client_transport_line(const or_options_t *options, + const char *line, int validate_only); +STATIC int parse_server_transport_line(const or_options_t *options, + const char *line, int validate_only); #endif #endif From b8b46e8ef847c0683fab00783fb64bef0c6f83c6 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 25 Jul 2014 21:41:03 -0700 Subject: [PATCH 003/184] Add some mocks needed to unit test ClientTransportPlugin/ServerTransportPlugin config line parsing --- src/or/entrynodes.c | 4 ++-- src/or/entrynodes.h | 2 +- src/or/transports.c | 12 ++++++------ src/or/transports.h | 10 ++++++---- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c index 4d09195796..8f105c7844 100644 --- a/src/or/entrynodes.c +++ b/src/or/entrynodes.c @@ -1884,8 +1884,8 @@ bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port, /** Return True if we have a bridge that uses a transport with name * transport_name. */ -int -transport_is_needed(const char *transport_name) +MOCK_IMPL(int, +transport_is_needed, (const char *transport_name)) { if (!bridge_list) return 0; diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h index 5d91756aa4..8b5ffba7b1 100644 --- a/src/or/entrynodes.h +++ b/src/or/entrynodes.h @@ -151,7 +151,7 @@ struct transport_t; int get_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port, const struct transport_t **transport); -int transport_is_needed(const char *transport_name); +MOCK_DECL(int, transport_is_needed, (const char *transport_name)); int validate_pluggable_transports_config(void); double pathbias_get_close_success_count(entry_guard_t *guard); diff --git a/src/or/transports.c b/src/or/transports.c index dc30754162..0fb5926681 100644 --- a/src/or/transports.c +++ b/src/or/transports.c @@ -324,9 +324,9 @@ transport_add(transport_t *t) /** Remember a new pluggable transport proxy at addr:port. * name is set to the name of the protocol this proxy uses. * socks_ver is set to the SOCKS version of the proxy. */ -int -transport_add_from_config(const tor_addr_t *addr, uint16_t port, - const char *name, int socks_ver) +MOCK_IMPL(int, +transport_add_from_config, (const tor_addr_t *addr, uint16_t port, + const char *name, int socks_ver)) { transport_t *t = transport_new(addr, port, name, socks_ver, NULL); @@ -1349,9 +1349,9 @@ managed_proxy_create(const smartlist_t *transport_list, * Requires that proxy_argv be a NULL-terminated array of command-line * elements, containing at least one element. **/ -void -pt_kickstart_proxy(const smartlist_t *transport_list, - char **proxy_argv, int is_server) +MOCK_IMPL(void, +pt_kickstart_proxy, (const smartlist_t *transport_list, + char **proxy_argv, int is_server)) { managed_proxy_t *mp=NULL; transport_t *old_transport = NULL; diff --git a/src/or/transports.h b/src/or/transports.h index 1365ead006..deacdcdd68 100644 --- a/src/or/transports.h +++ b/src/or/transports.h @@ -32,14 +32,16 @@ typedef struct transport_t { void mark_transport_list(void); void sweep_transport_list(void); -int transport_add_from_config(const tor_addr_t *addr, uint16_t port, - const char *name, int socks_ver); +MOCK_DECL(int, transport_add_from_config, + (const tor_addr_t *addr, uint16_t port, + const char *name, int socks_ver)); void transport_free(transport_t *transport); transport_t *transport_get_by_name(const char *name); -void pt_kickstart_proxy(const smartlist_t *transport_list, char **proxy_argv, - int is_server); +MOCK_DECL(void, pt_kickstart_proxy, + (const smartlist_t *transport_list, char **proxy_argv, + int is_server)); #define pt_kickstart_client_proxy(tl, pa) \ pt_kickstart_proxy(tl, pa, 0) From 5d81fd25a0558794902b93d0d73c0f0134ccfce6 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 25 Jul 2014 21:42:12 -0700 Subject: [PATCH 004/184] Add unit test for ClientTransportPlugin/ServerTransportPlugin config line parsing --- src/test/test_config.c | 248 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) diff --git a/src/test/test_config.c b/src/test/test_config.c index b35984f761..5975e1e038 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -14,6 +14,8 @@ #include "test.h" #include "util.h" #include "address.h" +#include "entrynodes.h" +#include "transports.h" static void test_config_addressmap(void *arg) @@ -552,6 +554,251 @@ test_config_parse_transport_options_line(void *arg) } } +/* Mocks needed for the transport plugin line test */ + +static void pt_kickstart_proxy_mock(const smartlist_t *transport_list, + char **proxy_argv, int is_server); +static int transport_add_from_config_mock(const tor_addr_t *addr, + uint16_t port, const char *name, + int socks_ver); +static int transport_is_needed_mock(const char *transport_name); + +static int pt_kickstart_proxy_mock_call_count = 0; +static int transport_add_from_config_mock_call_count = 0; +static int transport_is_needed_mock_call_count = 0; +static int transport_is_needed_mock_return = 0; + +static void +pt_kickstart_proxy_mock(const smartlist_t *transport_list, + char **proxy_argv, int is_server) +{ + ++pt_kickstart_proxy_mock_call_count; +} + +static int +transport_add_from_config_mock(const tor_addr_t *addr, + uint16_t port, const char *name, + int socks_ver) +{ + ++transport_add_from_config_mock_call_count; + + return 0; +} + +static int +transport_is_needed_mock(const char *transport_name) +{ + ++transport_is_needed_mock_call_count; + + return transport_is_needed_mock_return; +} + +/** + * Test parsing for the ClientTransportPlugin and ServerTransportPlugin config + * options. + */ + +static void +test_config_parse_transport_plugin_line(void *arg) +{ + or_options_t *options = get_options_mutable(); + int r, tmp; + int old_pt_kickstart_proxy_mock_call_count; + int old_transport_add_from_config_mock_call_count; + int old_transport_is_needed_mock_call_count; + + /* Bad transport lines - too short */ + r = parse_client_transport_line(options, "bad", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, "bad", 1); + test_assert(r < 0); + r = parse_client_transport_line(options, "bad bad", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, "bad bad", 1); + test_assert(r < 0); + + /* Test transport list parsing */ + r = parse_client_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1); + test_assert(r == 0); + r = parse_server_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1); + test_assert(r == 0); + r = parse_client_transport_line(options, + "transport_1,transport_2 exec /usr/bin/fake-transport", 1); + test_assert(r == 0); + r = parse_server_transport_line(options, + "transport_1,transport_2 exec /usr/bin/fake-transport", 1); + test_assert(r == 0); + /* Bad transport identifiers */ + r = parse_client_transport_line(options, + "transport_* exec /usr/bin/fake-transport", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, + "transport_* exec /usr/bin/fake-transport", 1); + test_assert(r < 0); + + /* Check SOCKS cases for client transport */ + r = parse_client_transport_line(options, + "transport_1 socks4 1.2.3.4:567", 1); + test_assert(r == 0); + r = parse_client_transport_line(options, + "transport_1 socks5 1.2.3.4:567", 1); + test_assert(r == 0); + /* Proxy case for server transport */ + r = parse_server_transport_line(options, + "transport_1 proxy 1.2.3.4:567", 1); + test_assert(r == 0); + /* Multiple-transport error exit */ + r = parse_client_transport_line(options, + "transport_1,transport_2 socks5 1.2.3.4:567", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, + "transport_1,transport_2 proxy 1.2.3.4:567", 1); + /* No port error exit */ + r = parse_client_transport_line(options, + "transport_1 socks5 1.2.3.4", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, + "transport_1 proxy 1.2.3.4", 1); + test_assert(r < 0); + /* Unparsable address error exit */ + r = parse_client_transport_line(options, + "transport_1 socks5 1.2.3:6x7", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, + "transport_1 proxy 1.2.3:6x7", 1); + test_assert(r < 0); + + /* "Strange {Client|Server}TransportPlugin field" error exit */ + r = parse_client_transport_line(options, + "transport_1 foo bar", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, + "transport_1 foo bar", 1); + test_assert(r < 0); + + /* No sandbox mode error exit */ + tmp = options->Sandbox; + options->Sandbox = 1; + r = parse_client_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1); + test_assert(r < 0); + r = parse_server_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1); + test_assert(r < 0); + options->Sandbox = tmp; + + /* + * These final test cases cover code paths that only activate without + * validate_only, so they need mocks in place. + */ + MOCK(pt_kickstart_proxy, pt_kickstart_proxy_mock); + old_pt_kickstart_proxy_mock_call_count = + pt_kickstart_proxy_mock_call_count; + r = parse_server_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 0); + test_assert(r == 0); + test_assert(pt_kickstart_proxy_mock_call_count == + old_pt_kickstart_proxy_mock_call_count + 1); + UNMOCK(pt_kickstart_proxy); + + /* This one hits a log line in the !validate_only case only */ + r = parse_server_transport_line(options, + "transport_1 proxy 1.2.3.4:567", 0); + test_assert(r == 0); + + /* Check mocked client transport cases */ + MOCK(pt_kickstart_proxy, pt_kickstart_proxy_mock); + MOCK(transport_add_from_config, transport_add_from_config_mock); + MOCK(transport_is_needed, transport_is_needed_mock); + + /* Unnecessary transport case */ + transport_is_needed_mock_return = 0; + old_pt_kickstart_proxy_mock_call_count = + pt_kickstart_proxy_mock_call_count; + old_transport_add_from_config_mock_call_count = + transport_add_from_config_mock_call_count; + old_transport_is_needed_mock_call_count = + transport_is_needed_mock_call_count; + r = parse_client_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 0); + /* Should have succeeded */ + test_assert(r == 0); + /* transport_is_needed() should have been called */ + test_assert(transport_is_needed_mock_call_count == + old_transport_is_needed_mock_call_count + 1); + /* + * pt_kickstart_proxy() and transport_add_from_config() should + * not have been called. + */ + test_assert(pt_kickstart_proxy_mock_call_count == + old_pt_kickstart_proxy_mock_call_count); + test_assert(transport_add_from_config_mock_call_count == + old_transport_add_from_config_mock_call_count); + + /* Necessary transport case */ + transport_is_needed_mock_return = 1; + old_pt_kickstart_proxy_mock_call_count = + pt_kickstart_proxy_mock_call_count; + old_transport_add_from_config_mock_call_count = + transport_add_from_config_mock_call_count; + old_transport_is_needed_mock_call_count = + transport_is_needed_mock_call_count; + r = parse_client_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 0); + /* Should have succeeded */ + test_assert(r == 0); + /* + * transport_is_needed() and pt_kickstart_proxy() should have been + * called. + */ + test_assert(pt_kickstart_proxy_mock_call_count == + old_pt_kickstart_proxy_mock_call_count + 1); + test_assert(transport_is_needed_mock_call_count == + old_transport_is_needed_mock_call_count + 1); + /* transport_add_from_config() should not have been called. */ + test_assert(transport_add_from_config_mock_call_count == + old_transport_add_from_config_mock_call_count); + + /* proxy case */ + transport_is_needed_mock_return = 1; + old_pt_kickstart_proxy_mock_call_count = + pt_kickstart_proxy_mock_call_count; + old_transport_add_from_config_mock_call_count = + transport_add_from_config_mock_call_count; + old_transport_is_needed_mock_call_count = + transport_is_needed_mock_call_count; + r = parse_client_transport_line(options, + "transport_1 socks5 1.2.3.4:567", 0); + /* Should have succeeded */ + test_assert(r == 0); + /* + * transport_is_needed() and transport_add_from_config() should have + * been called. + */ + test_assert(transport_add_from_config_mock_call_count == + old_transport_add_from_config_mock_call_count + 1); + test_assert(transport_is_needed_mock_call_count == + old_transport_is_needed_mock_call_count + 1); + /* pt_kickstart_proxy() should not have been called. */ + test_assert(pt_kickstart_proxy_mock_call_count == + old_pt_kickstart_proxy_mock_call_count); + + /* Done with mocked client transport cases */ + UNMOCK(transport_is_needed); + UNMOCK(transport_add_from_config); + UNMOCK(pt_kickstart_proxy); + + done: + /* Make sure we undo all mocks */ + UNMOCK(pt_kickstart_proxy); + UNMOCK(transport_add_from_config); + UNMOCK(transport_is_needed); + + return; +} + // Tests if an options with MyFamily fingerprints missing '$' normalises // them correctly and also ensure it also works with multiple fingerprints static void @@ -596,6 +843,7 @@ struct testcase_t config_tests[] = { CONFIG_TEST(addressmap, 0), CONFIG_TEST(parse_bridge_line, 0), CONFIG_TEST(parse_transport_options_line, 0), + CONFIG_TEST(parse_transport_plugin_line, TT_FORK), CONFIG_TEST(check_or_create_data_subdir, TT_FORK), CONFIG_TEST(write_to_data_subdir, TT_FORK), CONFIG_TEST(fix_my_family, 0), From 4a5164fd86465ab4546ce4aad0ed8ec1b9e26cd1 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 28 Jul 2014 19:32:23 -0700 Subject: [PATCH 005/184] Replace all calls to parse_client_transport_line() or parse_server_transport_line() with new parse_transport_line() stub --- src/or/config.c | 291 ++++++++++++++++++++++------------------- src/or/config.h | 7 +- src/test/test_config.c | 104 +++++++-------- 3 files changed, 214 insertions(+), 188 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index b50834b61b..7911b5c7c6 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -538,6 +538,10 @@ static int options_transition_affects_descriptor( static int check_nickname_list(char **lst, const char *name, char **msg); static char *get_bindaddr_from_transport_listen_line(const char *line, const char *transport); +static int parse_client_transport_line(const or_options_t *options, + const char *line, int validate_only); +static int parse_server_transport_line(const or_options_t *options, + const char *line, int validate_only); static int parse_dir_authority_line(const char *line, dirinfo_type_t required_type, int validate_only); @@ -1423,7 +1427,7 @@ options_act(const or_options_t *old_options) pt_prepare_proxy_list_for_config_read(); if (options->ClientTransportPlugin) { for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { - if (parse_client_transport_line(options, cl->value, 0)<0) { + if (parse_transport_line(options, cl->value, 0, 0) < 0) { log_warn(LD_BUG, "Previously validated ClientTransportPlugin line " "could not be added!"); @@ -1434,7 +1438,7 @@ options_act(const or_options_t *old_options) if (options->ServerTransportPlugin && server_mode(options)) { for (cl = options->ServerTransportPlugin; cl; cl = cl->next) { - if (parse_server_transport_line(options, cl->value, 0)<0) { + if (parse_transport_line(options, cl->value, 0, 1) < 0) { log_warn(LD_BUG, "Previously validated ServerTransportPlugin line " "could not be added!"); @@ -3287,12 +3291,12 @@ options_validate(or_options_t *old_options, or_options_t *options, } for (cl = options->ClientTransportPlugin; cl; cl = cl->next) { - if (parse_client_transport_line(options, cl->value, 1)<0) + if (parse_transport_line(options, cl->value, 1, 0) < 0) REJECT("Invalid client transport line. See logs for details."); } for (cl = options->ServerTransportPlugin; cl; cl = cl->next) { - if (parse_server_transport_line(options, cl->value, 1)<0) + if (parse_transport_line(options, cl->value, 1, 1) < 0) REJECT("Invalid server transport line. See logs for details."); } @@ -4748,6 +4752,29 @@ parse_bridge_line(const char *line) return bridge_line; } +/** Read the contents of a ClientTransportPlugin or ServerTransportPlugin + * line from line, depending on the value of server. Return 0 + * if the line is well-formed, and -1 if it isn't. + * + * If validate_only is 0, the line is well-formed, and the transport is + * needed by some bridge: + * - If it's an external proxy line, add the transport described in the line to + * our internal transport list. + * - If it's a managed proxy line, launch the managed proxy. + */ + +STATIC int +parse_transport_line(const or_options_t *options, + const char *line, int validate_only, + int server) +{ + if (server) { + return parse_server_transport_line(options, line, validate_only); + } else { + return parse_client_transport_line(options, line, validate_only); + } +} + /** Read the contents of a ClientTransportPlugin line from * line. Return 0 if the line is well-formed, and -1 if it * isn't. @@ -4757,7 +4784,7 @@ parse_bridge_line(const char *line) * - If it's an external proxy line, add the transport described in the line to * our internal transport list. * - If it's a managed proxy line, launch the managed proxy. */ -STATIC int +static int parse_client_transport_line(const or_options_t *options, const char *line, int validate_only) { @@ -4901,6 +4928,133 @@ parse_client_transport_line(const or_options_t *options, return r; } +/** Read the contents of a ServerTransportPlugin line from + * line. Return 0 if the line is well-formed, and -1 if it + * isn't. + * If validate_only is 0, the line is well-formed, and it's a + * managed proxy line, launch the managed proxy. */ +static int +parse_server_transport_line(const or_options_t *options, + const char *line, int validate_only) +{ + smartlist_t *items = NULL; + int r; + const char *transports=NULL; + smartlist_t *transport_list=NULL; + char *type=NULL; + char *addrport=NULL; + tor_addr_t addr; + uint16_t port = 0; + + /* managed proxy options */ + int is_managed=0; + char **proxy_argv=NULL; + char **tmp=NULL; + int proxy_argc,i; + + int line_length; + + items = smartlist_new(); + smartlist_split_string(items, line, NULL, + SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1); + + line_length = smartlist_len(items); + if (line_length < 3) { + log_warn(LD_CONFIG, "Too few arguments on ServerTransportPlugin line."); + goto err; + } + + /* Get the first line element, split it to commas into + transport_list (in case it's multiple transports) and validate + the transport names. */ + transports = smartlist_get(items, 0); + transport_list = smartlist_new(); + smartlist_split_string(transport_list, transports, ",", + SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); + SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) { + if (!string_is_C_identifier(transport_name)) { + log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).", + transport_name); + goto err; + } + } SMARTLIST_FOREACH_END(transport_name); + + type = smartlist_get(items, 1); + + if (!strcmp(type, "exec")) { + is_managed=1; + } else if (!strcmp(type, "proxy")) { + is_managed=0; + } else { + log_warn(LD_CONFIG, "Strange ServerTransportPlugin type '%s'", type); + goto err; + } + + if (is_managed && options->Sandbox) { + log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode." + "(ServerTransportPlugin line was %s)", escaped(line)); + goto err; + } + + if (is_managed) { /* managed */ + if (!validate_only) { + proxy_argc = line_length-2; + tor_assert(proxy_argc > 0); + proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1)); + tmp = proxy_argv; + + for (i=0;iline, return its * string. Return NULL if the line was not * well-formed. @@ -5052,133 +5206,6 @@ get_options_for_server_transport(const char *transport) return NULL; } -/** Read the contents of a ServerTransportPlugin line from - * line. Return 0 if the line is well-formed, and -1 if it - * isn't. - * If validate_only is 0, the line is well-formed, and it's a - * managed proxy line, launch the managed proxy. */ -STATIC int -parse_server_transport_line(const or_options_t *options, - const char *line, int validate_only) -{ - smartlist_t *items = NULL; - int r; - const char *transports=NULL; - smartlist_t *transport_list=NULL; - char *type=NULL; - char *addrport=NULL; - tor_addr_t addr; - uint16_t port = 0; - - /* managed proxy options */ - int is_managed=0; - char **proxy_argv=NULL; - char **tmp=NULL; - int proxy_argc,i; - - int line_length; - - items = smartlist_new(); - smartlist_split_string(items, line, NULL, - SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1); - - line_length = smartlist_len(items); - if (line_length < 3) { - log_warn(LD_CONFIG, "Too few arguments on ServerTransportPlugin line."); - goto err; - } - - /* Get the first line element, split it to commas into - transport_list (in case it's multiple transports) and validate - the transport names. */ - transports = smartlist_get(items, 0); - transport_list = smartlist_new(); - smartlist_split_string(transport_list, transports, ",", - SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) { - if (!string_is_C_identifier(transport_name)) { - log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).", - transport_name); - goto err; - } - } SMARTLIST_FOREACH_END(transport_name); - - type = smartlist_get(items, 1); - - if (!strcmp(type, "exec")) { - is_managed=1; - } else if (!strcmp(type, "proxy")) { - is_managed=0; - } else { - log_warn(LD_CONFIG, "Strange ServerTransportPlugin type '%s'", type); - goto err; - } - - if (is_managed && options->Sandbox) { - log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode." - "(ServerTransportPlugin line was %s)", escaped(line)); - goto err; - } - - if (is_managed) { /* managed */ - if (!validate_only) { - proxy_argc = line_length-2; - tor_assert(proxy_argc > 0); - proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1)); - tmp = proxy_argv; - - for (i=0;iline. If * validate_only is 0, and the line is well-formed, and it * shares any bits with required_type or required_type diff --git a/src/or/config.h b/src/or/config.h index 31496c2720..4097d37714 100644 --- a/src/or/config.h +++ b/src/or/config.h @@ -140,10 +140,9 @@ STATIC int options_validate(or_options_t *old_options, or_options_t *options, or_options_t *default_options, int from_setconf, char **msg); -STATIC int parse_client_transport_line(const or_options_t *options, - const char *line, int validate_only); -STATIC int parse_server_transport_line(const or_options_t *options, - const char *line, int validate_only); +STATIC int parse_transport_line(const or_options_t *options, + const char *line, int validate_only, + int server); #endif #endif diff --git a/src/test/test_config.c b/src/test/test_config.c index 5975e1e038..ae01facec7 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -608,84 +608,84 @@ test_config_parse_transport_plugin_line(void *arg) int old_transport_is_needed_mock_call_count; /* Bad transport lines - too short */ - r = parse_client_transport_line(options, "bad", 1); + r = parse_transport_line(options, "bad", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, "bad", 1); + r = parse_transport_line(options, "bad", 1, 1); test_assert(r < 0); - r = parse_client_transport_line(options, "bad bad", 1); + r = parse_transport_line(options, "bad bad", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, "bad bad", 1); + r = parse_transport_line(options, "bad bad", 1, 1); test_assert(r < 0); /* Test transport list parsing */ - r = parse_client_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1, 0); test_assert(r == 0); - r = parse_server_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1, 1); test_assert(r == 0); - r = parse_client_transport_line(options, - "transport_1,transport_2 exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_1,transport_2 exec /usr/bin/fake-transport", 1, 0); test_assert(r == 0); - r = parse_server_transport_line(options, - "transport_1,transport_2 exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_1,transport_2 exec /usr/bin/fake-transport", 1, 1); test_assert(r == 0); /* Bad transport identifiers */ - r = parse_client_transport_line(options, - "transport_* exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_* exec /usr/bin/fake-transport", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, - "transport_* exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_* exec /usr/bin/fake-transport", 1, 1); test_assert(r < 0); /* Check SOCKS cases for client transport */ - r = parse_client_transport_line(options, - "transport_1 socks4 1.2.3.4:567", 1); + r = parse_transport_line(options, + "transport_1 socks4 1.2.3.4:567", 1, 0); test_assert(r == 0); - r = parse_client_transport_line(options, - "transport_1 socks5 1.2.3.4:567", 1); + r = parse_transport_line(options, + "transport_1 socks5 1.2.3.4:567", 1, 0); test_assert(r == 0); /* Proxy case for server transport */ - r = parse_server_transport_line(options, - "transport_1 proxy 1.2.3.4:567", 1); + r = parse_transport_line(options, + "transport_1 proxy 1.2.3.4:567", 1, 1); test_assert(r == 0); /* Multiple-transport error exit */ - r = parse_client_transport_line(options, - "transport_1,transport_2 socks5 1.2.3.4:567", 1); + r = parse_transport_line(options, + "transport_1,transport_2 socks5 1.2.3.4:567", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, - "transport_1,transport_2 proxy 1.2.3.4:567", 1); + r = parse_transport_line(options, + "transport_1,transport_2 proxy 1.2.3.4:567", 1, 1); /* No port error exit */ - r = parse_client_transport_line(options, - "transport_1 socks5 1.2.3.4", 1); + r = parse_transport_line(options, + "transport_1 socks5 1.2.3.4", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, - "transport_1 proxy 1.2.3.4", 1); + r = parse_transport_line(options, + "transport_1 proxy 1.2.3.4", 1, 1); test_assert(r < 0); /* Unparsable address error exit */ - r = parse_client_transport_line(options, - "transport_1 socks5 1.2.3:6x7", 1); + r = parse_transport_line(options, + "transport_1 socks5 1.2.3:6x7", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, - "transport_1 proxy 1.2.3:6x7", 1); + r = parse_transport_line(options, + "transport_1 proxy 1.2.3:6x7", 1, 1); test_assert(r < 0); /* "Strange {Client|Server}TransportPlugin field" error exit */ - r = parse_client_transport_line(options, - "transport_1 foo bar", 1); + r = parse_transport_line(options, + "transport_1 foo bar", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, - "transport_1 foo bar", 1); + r = parse_transport_line(options, + "transport_1 foo bar", 1, 1); test_assert(r < 0); /* No sandbox mode error exit */ tmp = options->Sandbox; options->Sandbox = 1; - r = parse_client_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1, 0); test_assert(r < 0); - r = parse_server_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 1); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 1, 1); test_assert(r < 0); options->Sandbox = tmp; @@ -696,16 +696,16 @@ test_config_parse_transport_plugin_line(void *arg) MOCK(pt_kickstart_proxy, pt_kickstart_proxy_mock); old_pt_kickstart_proxy_mock_call_count = pt_kickstart_proxy_mock_call_count; - r = parse_server_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 0); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 0, 1); test_assert(r == 0); test_assert(pt_kickstart_proxy_mock_call_count == old_pt_kickstart_proxy_mock_call_count + 1); UNMOCK(pt_kickstart_proxy); /* This one hits a log line in the !validate_only case only */ - r = parse_server_transport_line(options, - "transport_1 proxy 1.2.3.4:567", 0); + r = parse_transport_line(options, + "transport_1 proxy 1.2.3.4:567", 0, 1); test_assert(r == 0); /* Check mocked client transport cases */ @@ -721,8 +721,8 @@ test_config_parse_transport_plugin_line(void *arg) transport_add_from_config_mock_call_count; old_transport_is_needed_mock_call_count = transport_is_needed_mock_call_count; - r = parse_client_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 0); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 0, 0); /* Should have succeeded */ test_assert(r == 0); /* transport_is_needed() should have been called */ @@ -745,8 +745,8 @@ test_config_parse_transport_plugin_line(void *arg) transport_add_from_config_mock_call_count; old_transport_is_needed_mock_call_count = transport_is_needed_mock_call_count; - r = parse_client_transport_line(options, - "transport_1 exec /usr/bin/fake-transport", 0); + r = parse_transport_line(options, + "transport_1 exec /usr/bin/fake-transport", 0, 0); /* Should have succeeded */ test_assert(r == 0); /* @@ -769,8 +769,8 @@ test_config_parse_transport_plugin_line(void *arg) transport_add_from_config_mock_call_count; old_transport_is_needed_mock_call_count = transport_is_needed_mock_call_count; - r = parse_client_transport_line(options, - "transport_1 socks5 1.2.3.4:567", 0); + r = parse_transport_line(options, + "transport_1 socks5 1.2.3.4:567", 0, 0); /* Should have succeeded */ test_assert(r == 0); /* From 2d4241d58482c919984f163323efb96c6f365a2d Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 31 Jul 2014 12:50:34 -0700 Subject: [PATCH 006/184] Merge and refactor redundant parse_client_transport_line() and parse_server_transport_line() functions --- src/or/config.c | 275 ++++++++++++++---------------------------------- 1 file changed, 78 insertions(+), 197 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 7911b5c7c6..10b118c9ab 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -538,10 +538,6 @@ static int options_transition_affects_descriptor( static int check_nickname_list(char **lst, const char *name, char **msg); static char *get_bindaddr_from_transport_listen_line(const char *line, const char *transport); -static int parse_client_transport_line(const or_options_t *options, - const char *line, int validate_only); -static int parse_server_transport_line(const or_options_t *options, - const char *line, int validate_only); static int parse_dir_authority_line(const char *line, dirinfo_type_t required_type, int validate_only); @@ -4768,53 +4764,36 @@ parse_transport_line(const or_options_t *options, const char *line, int validate_only, int server) { - if (server) { - return parse_server_transport_line(options, line, validate_only); - } else { - return parse_client_transport_line(options, line, validate_only); - } -} -/** Read the contents of a ClientTransportPlugin line from - * line. Return 0 if the line is well-formed, and -1 if it - * isn't. - * - * If validate_only is 0, the line is well-formed, and the - * transport is needed by some bridge: - * - If it's an external proxy line, add the transport described in the line to - * our internal transport list. - * - If it's a managed proxy line, launch the managed proxy. */ -static int -parse_client_transport_line(const or_options_t *options, - const char *line, int validate_only) -{ smartlist_t *items = NULL; int r; - char *field2=NULL; - - const char *transports=NULL; - smartlist_t *transport_list=NULL; - char *addrport=NULL; + const char *transports = NULL; + smartlist_t *transport_list = NULL; + char *type = NULL; + char *addrport = NULL; tor_addr_t addr; uint16_t port = 0; - int socks_ver=PROXY_NONE; + int socks_ver = PROXY_NONE; /* managed proxy options */ - int is_managed=0; - char **proxy_argv=NULL; - char **tmp=NULL; + int is_managed = 0; + char **proxy_argv = NULL; + char **tmp = NULL; int proxy_argc, i; - int is_useless_proxy=1; + int is_useless_proxy = 1; int line_length; + /* Split the line into space-separated tokens */ items = smartlist_new(); smartlist_split_string(items, line, NULL, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1); + line_length = smartlist_len(items); - line_length = smartlist_len(items); if (line_length < 3) { - log_warn(LD_CONFIG, "Too few arguments on ClientTransportPlugin line."); + log_warn(LD_CONFIG, + "Too few arguments on %sTransportPlugin line.", + server ? "Server" : "Client"); goto err; } @@ -4838,194 +4817,89 @@ parse_client_transport_line(const or_options_t *options, is_useless_proxy = 0; } SMARTLIST_FOREACH_END(transport_name); - /* field2 is either a SOCKS version or "exec" */ - field2 = smartlist_get(items, 1); - - if (!strcmp(field2,"socks4")) { - socks_ver = PROXY_SOCKS4; - } else if (!strcmp(field2,"socks5")) { - socks_ver = PROXY_SOCKS5; - } else if (!strcmp(field2,"exec")) { - is_managed=1; - } else { - log_warn(LD_CONFIG, "Strange ClientTransportPlugin field '%s'.", - field2); - goto err; - } - - if (is_managed && options->Sandbox) { - log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode." - "(ClientTransportPlugin line was %s)", escaped(line)); - goto err; - } - - if (is_managed) { /* managed */ - if (!validate_only && is_useless_proxy) { - log_notice(LD_GENERAL, "Pluggable transport proxy (%s) does not provide " - "any needed transports and will not be launched.", line); - } - - /* If we are not just validating, use the rest of the line as the - argv of the proxy to be launched. Also, make sure that we are - only launching proxies that contribute useful transports. */ - if (!validate_only && !is_useless_proxy) { - proxy_argc = line_length-2; - tor_assert(proxy_argc > 0); - proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1)); - tmp = proxy_argv; - for (i=0;iline. Return 0 if the line is well-formed, and -1 if it - * isn't. - * If validate_only is 0, the line is well-formed, and it's a - * managed proxy line, launch the managed proxy. */ -static int -parse_server_transport_line(const or_options_t *options, - const char *line, int validate_only) -{ - smartlist_t *items = NULL; - int r; - const char *transports=NULL; - smartlist_t *transport_list=NULL; - char *type=NULL; - char *addrport=NULL; - tor_addr_t addr; - uint16_t port = 0; - - /* managed proxy options */ - int is_managed=0; - char **proxy_argv=NULL; - char **tmp=NULL; - int proxy_argc,i; - - int line_length; - - items = smartlist_new(); - smartlist_split_string(items, line, NULL, - SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1); - - line_length = smartlist_len(items); - if (line_length < 3) { - log_warn(LD_CONFIG, "Too few arguments on ServerTransportPlugin line."); - goto err; - } - - /* Get the first line element, split it to commas into - transport_list (in case it's multiple transports) and validate - the transport names. */ - transports = smartlist_get(items, 0); - transport_list = smartlist_new(); - smartlist_split_string(transport_list, transports, ",", - SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) { - if (!string_is_C_identifier(transport_name)) { - log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).", - transport_name); - goto err; - } - } SMARTLIST_FOREACH_END(transport_name); - type = smartlist_get(items, 1); - if (!strcmp(type, "exec")) { - is_managed=1; - } else if (!strcmp(type, "proxy")) { - is_managed=0; + is_managed = 1; + } else if (server && !strcmp(type, "proxy")) { + /* 'proxy' syntax only with ServerTransportPlugin */ + is_managed = 0; + } else if (!server && !strcmp(type, "socks4")) { + /* 'socks4' syntax only with ClientTransportPlugin */ + is_managed = 0; + socks_ver = PROXY_SOCKS4; + } else if (!server && !strcmp(type, "socks5")) { + /* 'socks5' syntax only with ClientTransportPlugin */ + is_managed = 0; + socks_ver = PROXY_SOCKS5; } else { - log_warn(LD_CONFIG, "Strange ServerTransportPlugin type '%s'", type); + log_warn(LD_CONFIG, + "Strange %sTransportPlugin type '%s'", + server ? "Server" : "Client", type); goto err; } if (is_managed && options->Sandbox) { - log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode." - "(ServerTransportPlugin line was %s)", escaped(line)); + log_warn(LD_CONFIG, + "Managed proxies are not compatible with Sandbox mode." + "(%sTransportPlugin line was %s)", + server ? "Server" : "Client", escaped(line)); goto err; } - if (is_managed) { /* managed */ - if (!validate_only) { - proxy_argc = line_length-2; + if (is_managed) { + /* managed */ + + if (!server && !validate_only && is_useless_proxy) { + log_notice(LD_GENERAL, + "Pluggable transport proxy (%s) does not provide " + "any needed transports and will not be launched.", + line); + } + + /* + * If we are not just validating, use the rest of the line as the + * argv of the proxy to be launched. Also, make sure that we are + * only launching proxies that contribute useful transports. + */ + + if (!validate_only && (server || !is_useless_proxy)) { + proxy_argc = line_length - 2; tor_assert(proxy_argc > 0); - proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1)); + proxy_argv = tor_malloc_zero(sizeof(char *) * (proxy_argc + 1)); tmp = proxy_argv; - for (i=0;i Date: Thu, 28 Aug 2014 18:10:21 +0000 Subject: [PATCH 007/184] Ticket #11291: patch from "anon": test-11291-group-redable-hsdirs-wtests-may8.patch --- doc/tor.1.txt | 5 ++ src/common/util.c | 15 ++++- src/common/util.h | 27 +++++++- src/or/config.c | 1 + src/or/or.h | 4 ++ src/or/rendservice.c | 36 +++++++++-- src/test/Makefile.nmake | 4 +- src/test/include.am | 1 + src/test/test.c | 2 + src/test/test_checkdir.c | 130 +++++++++++++++++++++++++++++++++++++++ 10 files changed, 214 insertions(+), 11 deletions(-) create mode 100644 src/test/test_checkdir.c diff --git a/doc/tor.1.txt b/doc/tor.1.txt index ce42a9bed9..ec5cc14380 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -2078,6 +2078,11 @@ The following options are used to configure a hidden service. service descriptors to the directory servers. This information is also uploaded whenever it changes. (Default: 1 hour) +[[HiddenServiceGroupReadable]] **HiddenServiceGroupReadable** **0**|**1**:: + If this option is set to 1, allow the filesystem group to read the + hidden service directory and hostname file. If the option is set to 0, + only owner is able to read the hidden service directory. (Default: 0) + TESTING NETWORK OPTIONS ----------------------- diff --git a/src/common/util.c b/src/common/util.c index 16ff8e3a80..6971e4d627 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1872,6 +1872,9 @@ file_status(const char *fname) * check&CPD_CHECK, and we think we can create it, return 0. Else * return -1. If CPD_GROUP_OK is set, then it's okay if the directory * is group-readable, but in all cases we create the directory mode 0700. + * If CPD_GROUP_READ is set, existing directory behaves as CPD_GROUP_OK and + * if the directory is created it will use mode 0750 with group read permission. + * Group read privileges also assume execute permission as norm for directories. * If CPD_CHECK_MODE_ONLY is set, then we don't alter the directory permissions * if they are too permissive: we just return -1. * When effective_user is not NULL, check permissions against the given user @@ -1910,7 +1913,12 @@ check_private_dir(const char *dirname, cpd_check_t check, #if defined (_WIN32) r = mkdir(dirname); #else - r = mkdir(dirname, 0700); + if (check & CPD_GROUP_READ) { + r = mkdir(dirname, STAT_RWXU|STAT_RGRP|STAT_XGRP); + } + else { + r = mkdir(dirname, STAT_RWXU); + } #endif if (r) { log_warn(LD_FS, "Error creating directory %s: %s", dirname, @@ -1963,7 +1971,8 @@ check_private_dir(const char *dirname, cpd_check_t check, tor_free(process_ownername); return -1; } - if ((check & CPD_GROUP_OK) && st.st_gid != running_gid) { + if ( (check & (CPD_GROUP_OK|CPD_GROUP_READ)) + && (st.st_gid != running_gid) ) { struct group *gr; char *process_groupname = NULL; gr = getgrgid(running_gid); @@ -1978,7 +1987,7 @@ check_private_dir(const char *dirname, cpd_check_t check, tor_free(process_groupname); return -1; } - if (check & CPD_GROUP_OK) { + if (check & (CPD_GROUP_OK|CPD_GROUP_READ)) { mask = 0027; } else { mask = 0077; diff --git a/src/common/util.h b/src/common/util.h index 61bb05f016..c98a32c19c 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -344,9 +344,34 @@ typedef unsigned int cpd_check_t; #define CPD_CREATE 1 #define CPD_CHECK 2 #define CPD_GROUP_OK 4 -#define CPD_CHECK_MODE_ONLY 8 +#define CPD_GROUP_READ 8 +#define CPD_CHECK_MODE_ONLY 16 int check_private_dir(const char *dirname, cpd_check_t check, const char *effective_user); + +#if !defined(_WIN32) && !defined (WINCE) +/** Unix like (non win32) group and world permission constants. + * These constants are directly compatible with *nix ABI, e.g. S_IRWXU,* + * NOTE: these are distinct from the private directory flags CPD_* + * which are a portable way for storing private data cross platform. + */ +#define STAT_RWXU 00700 +#define STAT_RUSR 00400 +#define STAT_WUSR 00200 +#define STAT_XUSR 00100 + +#define STAT_RWXG 00070 +#define STAT_RGRP 00040 +#define STAT_WGRP 00020 +#define STAT_XGRP 00010 + +#define STAT_RWXO 00007 +#define STAT_ROTH 00004 +#define STAT_WOTH 00002 +#define STAT_XOTH 00001 +#endif + +/** File open and create options */ #define OPEN_FLAGS_REPLACE (O_WRONLY|O_CREAT|O_TRUNC) #define OPEN_FLAGS_APPEND (O_WRONLY|O_CREAT|O_APPEND) #define OPEN_FLAGS_DONT_REPLACE (O_CREAT|O_EXCL|O_APPEND|O_WRONLY) diff --git a/src/or/config.c b/src/or/config.c index 7800ec1908..1753722f95 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -271,6 +271,7 @@ static config_var_t option_vars_[] = { V(AccelDir, FILENAME, NULL), V(HashedControlPassword, LINELIST, NULL), V(HidServDirectoryV2, BOOL, "1"), + V(HiddenServiceGroupReadable, BOOL, "0"), VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL), OBSOLETE("HiddenServiceExcludeNodes"), OBSOLETE("HiddenServiceNodes"), diff --git a/src/or/or.h b/src/or/or.h index 3683607741..9207dbaa91 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4223,6 +4223,10 @@ typedef struct { /** Should we send the timestamps that pre-023 hidden services want? */ int Support022HiddenServices; + + /** Create the Hidden Service directories and hostname files group readable. */ + int HiddenServiceGroupReadable; + } or_options_t; /** Persistent state for an onion router, as saved to disk. */ diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 749d6fa880..83e6a3b82c 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -368,10 +368,12 @@ rend_config_services(const or_options_t *options, int validate_only) for (line = options->RendConfigLines; line; line = line->next) { if (!strcasecmp(line->key, "HiddenServiceDir")) { if (service) { /* register the one we just finished parsing */ - if (validate_only) + if (validate_only) { rend_service_free(service); - else + } + else { rend_add_service(service); + } } service = tor_malloc_zero(sizeof(rend_service_t)); service->directory = tor_strdup(line->value); @@ -513,10 +515,12 @@ rend_config_services(const or_options_t *options, int validate_only) } } if (service) { - if (validate_only) + if (validate_only) { rend_service_free(service); - else + } + else { rend_add_service(service); + } } /* If this is a reload and there were hidden services configured before, @@ -693,10 +697,23 @@ rend_service_load_keys(rend_service_t *s) { char fname[512]; char buf[128]; + cpd_check_t check_opts = CPD_CREATE; + if (get_options()->HiddenServiceGroupReadable) { + check_opts |= CPD_GROUP_READ; + } /* Check/create directory */ - if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0) + if (check_private_dir(s->directory, check_opts, get_options()->User) < 0) { return -1; + } +#ifndef _WIN32 + if (get_options()->HiddenServiceGroupReadable) { + /** Only new dirs created get new opts, also enforce group read. */ + if (chmod(s->directory, STAT_RWXU|STAT_RGRP|STAT_XGRP)) { + log_warn(LD_FS,"Unable to make %s group-readable.", s->directory); + } + } +#endif /* Load key */ if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) || @@ -733,6 +750,15 @@ rend_service_load_keys(rend_service_t *s) memwipe(buf, 0, sizeof(buf)); return -1; } +#ifndef _WIN32 + if (get_options()->HiddenServiceGroupReadable) { + /** Also verify hostname file created with group read. */ + if (chmod(fname, STAT_RUSR|STAT_WUSR|STAT_RGRP)) { + log_warn(LD_FS,"Unable to make hidden hostname file %s group-readable.", fname); + } + } +#endif + memwipe(buf, 0, sizeof(buf)); /* If client authorization is configured, load or generate keys. */ diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index 822431f3b8..f6ee7f3f53 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -12,8 +12,8 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \ crypt32.lib gdi32.lib user32.lib TEST_OBJECTS = test.obj test_addr.obj test_containers.obj \ - test_controller_events.ogj test_crypto.obj test_data.obj test_dir.obj \ - test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ + test_controller_events.obj test_crypto.obj test_data.obj test_dir.obj \ + test_checkdir.obj test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ test_cell_formats.obj test_replay.obj test_introduce.obj tinytest.obj \ test_hs.obj diff --git a/src/test/include.am b/src/test/include.am index 77c92f12f8..36d86c74ea 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -28,6 +28,7 @@ src_test_test_SOURCES = \ src/test/test_cell_queue.c \ src/test/test_data.c \ src/test/test_dir.c \ + src/test/test_checkdir.c \ src/test/test_entrynodes.c \ src/test/test_extorport.c \ src/test/test_introduce.c \ diff --git a/src/test/test.c b/src/test/test.c index e836160bf4..6d7c6fa64b 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1302,6 +1302,7 @@ extern struct testcase_t crypto_tests[]; extern struct testcase_t container_tests[]; extern struct testcase_t util_tests[]; extern struct testcase_t dir_tests[]; +extern struct testcase_t checkdir_tests[]; extern struct testcase_t microdesc_tests[]; extern struct testcase_t pt_tests[]; extern struct testcase_t config_tests[]; @@ -1338,6 +1339,7 @@ static struct testgroup_t testgroups[] = { { "cellfmt/", cell_format_tests }, { "cellqueue/", cell_queue_tests }, { "dir/", dir_tests }, + { "checkdir/", checkdir_tests }, { "dir/md/", microdesc_tests }, { "pt/", pt_tests }, { "config/", config_tests }, diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c new file mode 100644 index 0000000000..877c789bcc --- /dev/null +++ b/src/test/test_checkdir.c @@ -0,0 +1,130 @@ +/* Copyright (c) 2014, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "orconfig.h" +#include "or.h" +#include +#include "config.h" +#include "test.h" +#include "util.h" + +/** Run unit tests for private dir permission enforcement logic. */ +static void +test_checkdir_perms(void *testdata) +{ + or_options_t *options = get_options_mutable(); + const char *subdir = "test_checkdir"; + char *testdir; + cpd_check_t cpd_chkopts; + cpd_check_t unix_create_opts; + cpd_check_t unix_verify_optsmask; + struct stat st; + + /** setup data directory before tests. */ + tor_free(options->DataDirectory); + options->DataDirectory = tor_strdup(get_fname(subdir)); + tt_int_op(mkdir(options->DataDirectory, STAT_RWXU), ==, 0); + + /** test: create new dir, no flags. */ + testdir = get_datadir_fname("checkdir_new_none"); + cpd_chkopts = CPD_CREATE; + unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + /** test: create new dir, CPD_GROUP_OK option set. */ + testdir = get_datadir_fname("checkdir_new_groupok"); + cpd_chkopts = CPD_CREATE|CPD_GROUP_OK; + unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + + /** test: create new dir, CPD_GROUP_READ option set. */ + testdir = get_datadir_fname("checkdir_new_groupread"); + cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; + unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + + /** test: check existing dir created with defaults, + and verify with CPD_CREATE only. */ + testdir = get_datadir_fname("checkdir_exists_none"); + cpd_chkopts = CPD_CREATE; + unix_create_opts = STAT_RWXU; /* 0700 */ + unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + tt_int_op(0, ==, mkdir(testdir, unix_create_opts)); + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + + /** test: check existing dir created with defaults, + and verify with CPD_GROUP_OK option set. */ + testdir = get_datadir_fname("checkdir_exists_groupok"); + cpd_chkopts = CPD_CREATE; + unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + cpd_chkopts = CPD_GROUP_OK; + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + + /** test: check existing dir created with defaults, + and verify with CPD_GROUP_READ option set. */ + testdir = get_datadir_fname("checkdir_exists_groupread"); + cpd_chkopts = CPD_CREATE; + unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + cpd_chkopts = CPD_GROUP_READ; + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + + /** test: check existing dir created with CPD_GROUP_READ, + and verify with CPD_GROUP_OK option set. */ + testdir = get_datadir_fname("checkdir_existsread_groupok"); + cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; + unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + cpd_chkopts = CPD_GROUP_OK; + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + + /** test: check existing dir created with CPD_GROUP_READ, + and verify with CPD_GROUP_READ option set. */ + testdir = get_datadir_fname("checkdir_existsread_groupread"); + cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; + unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, ==, stat(testdir, &st)); + tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tor_free(testdir); + + done: + ; +} + +#define CHECKDIR(name,flags) \ + { #name, test_checkdir_##name, (flags), NULL, NULL } + +struct testcase_t checkdir_tests[] = { + CHECKDIR(perms, 0), + END_OF_TESTCASES +}; + From 227b65924b557b30855f659360a8547e352c1ec6 Mon Sep 17 00:00:00 2001 From: David Stainton Date: Fri, 29 Aug 2014 05:58:53 +0000 Subject: [PATCH 008/184] Clean up patch Here I clean up anon's patch with a few of nickm's suggestions from comment 12: https://trac.torproject.org/projects/tor/ticket/11291#comment:12 I did not yet completely implement all his suggestions. --- doc/tor.1.txt | 2 +- src/common/util.c | 7 +++---- src/common/util.h | 23 ----------------------- src/or/config.c | 2 +- src/or/or.h | 2 +- src/or/rendservice.c | 23 ++++++++++------------- src/test/test_checkdir.c | 36 ++++++++++++++++++------------------ 7 files changed, 34 insertions(+), 61 deletions(-) diff --git a/doc/tor.1.txt b/doc/tor.1.txt index ec5cc14380..272eba3ef6 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -2078,7 +2078,7 @@ The following options are used to configure a hidden service. service descriptors to the directory servers. This information is also uploaded whenever it changes. (Default: 1 hour) -[[HiddenServiceGroupReadable]] **HiddenServiceGroupReadable** **0**|**1**:: +[[HiddenServiceDirGroupReadable]] **HiddenServiceGroupReadable** **0**|**1**:: If this option is set to 1, allow the filesystem group to read the hidden service directory and hostname file. If the option is set to 0, only owner is able to read the hidden service directory. (Default: 0) diff --git a/src/common/util.c b/src/common/util.c index 6971e4d627..0865fe7c7f 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1914,10 +1914,9 @@ check_private_dir(const char *dirname, cpd_check_t check, r = mkdir(dirname); #else if (check & CPD_GROUP_READ) { - r = mkdir(dirname, STAT_RWXU|STAT_RGRP|STAT_XGRP); - } - else { - r = mkdir(dirname, STAT_RWXU); + r = mkdir(dirname, 0750); + } else { + r = mkdir(dirname, 0700); } #endif if (r) { diff --git a/src/common/util.h b/src/common/util.h index c98a32c19c..755ef4b82a 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -349,29 +349,6 @@ typedef unsigned int cpd_check_t; int check_private_dir(const char *dirname, cpd_check_t check, const char *effective_user); -#if !defined(_WIN32) && !defined (WINCE) -/** Unix like (non win32) group and world permission constants. - * These constants are directly compatible with *nix ABI, e.g. S_IRWXU,* - * NOTE: these are distinct from the private directory flags CPD_* - * which are a portable way for storing private data cross platform. - */ -#define STAT_RWXU 00700 -#define STAT_RUSR 00400 -#define STAT_WUSR 00200 -#define STAT_XUSR 00100 - -#define STAT_RWXG 00070 -#define STAT_RGRP 00040 -#define STAT_WGRP 00020 -#define STAT_XGRP 00010 - -#define STAT_RWXO 00007 -#define STAT_ROTH 00004 -#define STAT_WOTH 00002 -#define STAT_XOTH 00001 -#endif - -/** File open and create options */ #define OPEN_FLAGS_REPLACE (O_WRONLY|O_CREAT|O_TRUNC) #define OPEN_FLAGS_APPEND (O_WRONLY|O_CREAT|O_APPEND) #define OPEN_FLAGS_DONT_REPLACE (O_CREAT|O_EXCL|O_APPEND|O_WRONLY) diff --git a/src/or/config.c b/src/or/config.c index 1753722f95..97b3601706 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -271,7 +271,7 @@ static config_var_t option_vars_[] = { V(AccelDir, FILENAME, NULL), V(HashedControlPassword, LINELIST, NULL), V(HidServDirectoryV2, BOOL, "1"), - V(HiddenServiceGroupReadable, BOOL, "0"), + V(HiddenServiceDirGroupReadable, BOOL, "0"), VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL), OBSOLETE("HiddenServiceExcludeNodes"), OBSOLETE("HiddenServiceNodes"), diff --git a/src/or/or.h b/src/or/or.h index 9207dbaa91..1544b70996 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4225,7 +4225,7 @@ typedef struct { int Support022HiddenServices; /** Create the Hidden Service directories and hostname files group readable. */ - int HiddenServiceGroupReadable; + int HiddenServiceDirGroupReadable; } or_options_t; diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 83e6a3b82c..456b548715 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -368,12 +368,10 @@ rend_config_services(const or_options_t *options, int validate_only) for (line = options->RendConfigLines; line; line = line->next) { if (!strcasecmp(line->key, "HiddenServiceDir")) { if (service) { /* register the one we just finished parsing */ - if (validate_only) { + if (validate_only) rend_service_free(service); - } - else { + else rend_add_service(service); - } } service = tor_malloc_zero(sizeof(rend_service_t)); service->directory = tor_strdup(line->value); @@ -517,8 +515,7 @@ rend_config_services(const or_options_t *options, int validate_only) if (service) { if (validate_only) { rend_service_free(service); - } - else { + } else { rend_add_service(service); } } @@ -699,7 +696,7 @@ rend_service_load_keys(rend_service_t *s) char buf[128]; cpd_check_t check_opts = CPD_CREATE; - if (get_options()->HiddenServiceGroupReadable) { + if (get_options()->HiddenServiceDirGroupReadable) { check_opts |= CPD_GROUP_READ; } /* Check/create directory */ @@ -707,9 +704,9 @@ rend_service_load_keys(rend_service_t *s) return -1; } #ifndef _WIN32 - if (get_options()->HiddenServiceGroupReadable) { - /** Only new dirs created get new opts, also enforce group read. */ - if (chmod(s->directory, STAT_RWXU|STAT_RGRP|STAT_XGRP)) { + if (get_options()->HiddenServiceDirGroupReadable) { + /* Only new dirs created get new opts, also enforce group read. */ + if (chmod(s->directory, 0750)) { log_warn(LD_FS,"Unable to make %s group-readable.", s->directory); } } @@ -751,9 +748,9 @@ rend_service_load_keys(rend_service_t *s) return -1; } #ifndef _WIN32 - if (get_options()->HiddenServiceGroupReadable) { - /** Also verify hostname file created with group read. */ - if (chmod(fname, STAT_RUSR|STAT_WUSR|STAT_RGRP)) { + if (get_options()->HiddenServiceDirGroupReadable) { + /* Also verify hostname file created with group read. */ + if (chmod(fname, 0640)) { log_warn(LD_FS,"Unable to make hidden hostname file %s group-readable.", fname); } } diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 877c789bcc..76fe1315a7 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -20,46 +20,46 @@ test_checkdir_perms(void *testdata) cpd_check_t unix_verify_optsmask; struct stat st; - /** setup data directory before tests. */ + /* setup data directory before tests. */ tor_free(options->DataDirectory); options->DataDirectory = tor_strdup(get_fname(subdir)); tt_int_op(mkdir(options->DataDirectory, STAT_RWXU), ==, 0); - /** test: create new dir, no flags. */ + /* test: create new dir, no flags. */ testdir = get_datadir_fname("checkdir_new_none"); cpd_chkopts = CPD_CREATE; - unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + unix_verify_optsmask = 0077; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /** test: create new dir, CPD_GROUP_OK option set. */ + /* test: create new dir, CPD_GROUP_OK option set. */ testdir = get_datadir_fname("checkdir_new_groupok"); cpd_chkopts = CPD_CREATE|CPD_GROUP_OK; - unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + unix_verify_optsmask = 0077; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /** test: create new dir, CPD_GROUP_READ option set. */ + /* test: create new dir, CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_new_groupread"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; - unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + unix_verify_optsmask = 0027; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /** test: check existing dir created with defaults, + /* test: check existing dir created with defaults, and verify with CPD_CREATE only. */ testdir = get_datadir_fname("checkdir_exists_none"); cpd_chkopts = CPD_CREATE; - unix_create_opts = STAT_RWXU; /* 0700 */ - unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + unix_create_opts = 0700; + unix_verify_optsmask = 0077; tt_int_op(0, ==, mkdir(testdir, unix_create_opts)); tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); @@ -67,11 +67,11 @@ test_checkdir_perms(void *testdata) tor_free(testdir); - /** test: check existing dir created with defaults, + /* test: check existing dir created with defaults, and verify with CPD_GROUP_OK option set. */ testdir = get_datadir_fname("checkdir_exists_groupok"); cpd_chkopts = CPD_CREATE; - unix_verify_optsmask = STAT_RWXO|STAT_RWXG; /* 0077 */ + unix_verify_optsmask = 0077; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); cpd_chkopts = CPD_GROUP_OK; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); @@ -80,11 +80,11 @@ test_checkdir_perms(void *testdata) tor_free(testdir); - /** test: check existing dir created with defaults, + /* test: check existing dir created with defaults, and verify with CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_exists_groupread"); cpd_chkopts = CPD_CREATE; - unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + unix_verify_optsmask = 0027; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); cpd_chkopts = CPD_GROUP_READ; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); @@ -93,11 +93,11 @@ test_checkdir_perms(void *testdata) tor_free(testdir); - /** test: check existing dir created with CPD_GROUP_READ, + /* test: check existing dir created with CPD_GROUP_READ, and verify with CPD_GROUP_OK option set. */ testdir = get_datadir_fname("checkdir_existsread_groupok"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; - unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + unix_verify_optsmask = 0027; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); cpd_chkopts = CPD_GROUP_OK; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); @@ -106,11 +106,11 @@ test_checkdir_perms(void *testdata) tor_free(testdir); - /** test: check existing dir created with CPD_GROUP_READ, + /* test: check existing dir created with CPD_GROUP_READ, and verify with CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_existsread_groupread"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; - unix_verify_optsmask = STAT_RWXO|STAT_WGRP; /* 0027 */ + unix_verify_optsmask = 0027; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); From 6b9016fe3c4dd814bee07e4439efcb6aca4efc43 Mon Sep 17 00:00:00 2001 From: David Stainton Date: Fri, 29 Aug 2014 18:58:56 +0000 Subject: [PATCH 009/184] Correct check_private_dir's dir mode This commit attempts to satisfy nickm's comment on check_private_dir() permissions: https://trac.torproject.org/projects/tor/ticket/11291#comment:12 """check_private_dir() ensures that the directory has bits 0700 if CPD_CHECK_MODE_ONLY is not set. Shouldn't it also ensure that the directory has bits 0050 if CPD_CHECK_MODE_ONLY is not set, and CPD_GROUP_READ is set?""" --- src/common/util.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 0865fe7c7f..0323264494 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1888,7 +1888,6 @@ check_private_dir(const char *dirname, cpd_check_t check, struct stat st; char *f; #ifndef _WIN32 - int mask; const struct passwd *pw = NULL; uid_t running_uid; gid_t running_gid; @@ -1986,22 +1985,20 @@ check_private_dir(const char *dirname, cpd_check_t check, tor_free(process_groupname); return -1; } - if (check & (CPD_GROUP_OK|CPD_GROUP_READ)) { - mask = 0027; - } else { - mask = 0077; - } - if (st.st_mode & mask) { - unsigned new_mode; - if (check & CPD_CHECK_MODE_ONLY) { + if (check & CPD_CHECK_MODE_ONLY) { + if (st.st_mode & 0077) { log_warn(LD_FS, "Permissions on directory %s are too permissive.", dirname); return -1; } + } else { log_warn(LD_FS, "Fixing permissions on directory %s", dirname); - new_mode = st.st_mode; - new_mode |= 0700; /* Owner should have rwx */ - new_mode &= ~mask; /* Clear the other bits that we didn't want set...*/ + unsigned new_mode; + if (check & CPD_GROUP_READ) { + new_mode = 0750; + } else { + new_mode = 0700; + } if (chmod(dirname, new_mode)) { log_warn(LD_FS, "Could not chmod directory %s: %s", dirname, strerror(errno)); @@ -2010,6 +2007,7 @@ check_private_dir(const char *dirname, cpd_check_t check, return 0; } } + #endif return 0; } From ae18c0812e917ae4d3352ef7e537c7ab8a396f36 Mon Sep 17 00:00:00 2001 From: meejah Date: Sat, 30 Aug 2014 15:14:17 -0600 Subject: [PATCH 010/184] fix two typos --- doc/tor.1.txt | 2 +- src/test/test_checkdir.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/tor.1.txt b/doc/tor.1.txt index 272eba3ef6..bf0f5c95c7 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -2078,7 +2078,7 @@ The following options are used to configure a hidden service. service descriptors to the directory servers. This information is also uploaded whenever it changes. (Default: 1 hour) -[[HiddenServiceDirGroupReadable]] **HiddenServiceGroupReadable** **0**|**1**:: +[[HiddenServiceDirGroupReadable]] **HiddenServiceDirGroupReadable** **0**|**1**:: If this option is set to 1, allow the filesystem group to read the hidden service directory and hostname file. If the option is set to 0, only owner is able to read the hidden service directory. (Default: 0) diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 76fe1315a7..59c1783978 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -23,7 +23,7 @@ test_checkdir_perms(void *testdata) /* setup data directory before tests. */ tor_free(options->DataDirectory); options->DataDirectory = tor_strdup(get_fname(subdir)); - tt_int_op(mkdir(options->DataDirectory, STAT_RWXU), ==, 0); + tt_int_op(mkdir(options->DataDirectory, 0750), ==, 0); /* test: create new dir, no flags. */ testdir = get_datadir_fname("checkdir_new_none"); From 7caf7e9f2a26dfb425dab761b4b41a38d96db0af Mon Sep 17 00:00:00 2001 From: meejah Date: Sat, 30 Aug 2014 15:14:51 -0600 Subject: [PATCH 011/184] Make HiddenServiceDirGroupReadable per-hidden-service --- src/or/config.c | 2 +- src/or/rendservice.c | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 97b3601706..847ae162ed 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -271,8 +271,8 @@ static config_var_t option_vars_[] = { V(AccelDir, FILENAME, NULL), V(HashedControlPassword, LINELIST, NULL), V(HidServDirectoryV2, BOOL, "1"), - V(HiddenServiceDirGroupReadable, BOOL, "0"), VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL), + VAR("HiddenServiceDirGroupReadable", LINELIST_S, RendConfigLines, NULL), OBSOLETE("HiddenServiceExcludeNodes"), OBSOLETE("HiddenServiceNodes"), VAR("HiddenServiceOptions",LINELIST_V, RendConfigLines, NULL), diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 456b548715..a1d572e1ac 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -95,6 +95,7 @@ typedef struct rend_service_port_config_t { typedef struct rend_service_t { /* Fields specified in config file */ char *directory; /**< where in the filesystem it stores it */ + int dir_group_readable; /**< if 1, allow group read permissions on directory */ smartlist_t *ports; /**< List of rend_service_port_config_t */ rend_auth_type_t auth_type; /**< Client authorization type or 0 if no client * authorization is performed. */ @@ -359,6 +360,7 @@ rend_config_services(const or_options_t *options, int validate_only) rend_service_t *service = NULL; rend_service_port_config_t *portcfg; smartlist_t *old_service_list = NULL; + int ok = 0; if (!validate_only) { old_service_list = rend_service_list; @@ -393,6 +395,15 @@ rend_config_services(const or_options_t *options, int validate_only) return -1; } smartlist_add(service->ports, portcfg); + } else if (!strcasecmp(line->key, "HiddenServiceDirGroupReadable")) { + service->dir_group_readable = (int)tor_parse_long(line->value, 10, 0, 1, &ok, NULL); + if (!ok) { + log_warn(LD_CONFIG, "HiddenServiceDirGroupReadable should be 0 or 1, not %s", + line->value); + rend_service_free(service); + return -1; + } + log_info(LD_CONFIG, "HiddenServiceDirGroupReadable=%d for %s", service->dir_group_readable, service->directory); } else if (!strcasecmp(line->key, "HiddenServiceAuthorizeClient")) { /* Parse auth type and comma-separated list of client names and add a * rend_authorized_client_t for each client to the service's list @@ -696,7 +707,7 @@ rend_service_load_keys(rend_service_t *s) char buf[128]; cpd_check_t check_opts = CPD_CREATE; - if (get_options()->HiddenServiceDirGroupReadable) { + if (s->dir_group_readable) { check_opts |= CPD_GROUP_READ; } /* Check/create directory */ @@ -704,7 +715,7 @@ rend_service_load_keys(rend_service_t *s) return -1; } #ifndef _WIN32 - if (get_options()->HiddenServiceDirGroupReadable) { + if (s->dir_group_readable) { /* Only new dirs created get new opts, also enforce group read. */ if (chmod(s->directory, 0750)) { log_warn(LD_FS,"Unable to make %s group-readable.", s->directory); @@ -748,7 +759,7 @@ rend_service_load_keys(rend_service_t *s) return -1; } #ifndef _WIN32 - if (get_options()->HiddenServiceDirGroupReadable) { + if (s->dir_group_readable) { /* Also verify hostname file created with group read. */ if (chmod(fname, 0640)) { log_warn(LD_FS,"Unable to make hidden hostname file %s group-readable.", fname); From 6e4efb559d9921e44c40b99e69619d4fa8b36668 Mon Sep 17 00:00:00 2001 From: David Stainton Date: Tue, 2 Sep 2014 17:59:31 +0000 Subject: [PATCH 012/184] Fix white space --- src/common/util.c | 9 +++++---- src/common/util.h | 2 +- src/or/or.h | 3 ++- src/or/rendservice.c | 22 ++++++++++++++-------- src/test/test_checkdir.c | 6 ------ 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 0323264494..c5b47b13f8 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1873,10 +1873,11 @@ file_status(const char *fname) * return -1. If CPD_GROUP_OK is set, then it's okay if the directory * is group-readable, but in all cases we create the directory mode 0700. * If CPD_GROUP_READ is set, existing directory behaves as CPD_GROUP_OK and - * if the directory is created it will use mode 0750 with group read permission. - * Group read privileges also assume execute permission as norm for directories. - * If CPD_CHECK_MODE_ONLY is set, then we don't alter the directory permissions - * if they are too permissive: we just return -1. + * if the directory is created it will use mode 0750 with group read + * permission. Group read privileges also assume execute permission + * as norm for directories. If CPD_CHECK_MODE_ONLY is set, then we don't + * alter the directory permissions if they are too permissive: + * we just return -1. * When effective_user is not NULL, check permissions against the given user * and its primary group. */ diff --git a/src/common/util.h b/src/common/util.h index 755ef4b82a..30dc22852e 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -345,7 +345,7 @@ typedef unsigned int cpd_check_t; #define CPD_CHECK 2 #define CPD_GROUP_OK 4 #define CPD_GROUP_READ 8 -#define CPD_CHECK_MODE_ONLY 16 +#define CPD_CHECK_MODE_ONLY 16 int check_private_dir(const char *dirname, cpd_check_t check, const char *effective_user); diff --git a/src/or/or.h b/src/or/or.h index 1544b70996..33a582ba7e 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4224,7 +4224,8 @@ typedef struct { /** Should we send the timestamps that pre-023 hidden services want? */ int Support022HiddenServices; - /** Create the Hidden Service directories and hostname files group readable. */ + /** Create the Hidden Service directories + and hostname files group readable. */ int HiddenServiceDirGroupReadable; } or_options_t; diff --git a/src/or/rendservice.c b/src/or/rendservice.c index a1d572e1ac..75080cbe94 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -95,7 +95,8 @@ typedef struct rend_service_port_config_t { typedef struct rend_service_t { /* Fields specified in config file */ char *directory; /**< where in the filesystem it stores it */ - int dir_group_readable; /**< if 1, allow group read permissions on directory */ + int dir_group_readable; /**< if 1, allow group read + permissions on directory */ smartlist_t *ports; /**< List of rend_service_port_config_t */ rend_auth_type_t auth_type; /**< Client authorization type or 0 if no client * authorization is performed. */ @@ -395,15 +396,20 @@ rend_config_services(const or_options_t *options, int validate_only) return -1; } smartlist_add(service->ports, portcfg); - } else if (!strcasecmp(line->key, "HiddenServiceDirGroupReadable")) { - service->dir_group_readable = (int)tor_parse_long(line->value, 10, 0, 1, &ok, NULL); + } else if (!strcasecmp(line->key, + "HiddenServiceDirGroupReadable")) { + service->dir_group_readable = (int)tor_parse_long(line->value, + 10, 0, 1, &ok, NULL); if (!ok) { - log_warn(LD_CONFIG, "HiddenServiceDirGroupReadable should be 0 or 1, not %s", + log_warn(LD_CONFIG, + "HiddenServiceDirGroupReadable should be 0 or 1, not %s", line->value); rend_service_free(service); return -1; } - log_info(LD_CONFIG, "HiddenServiceDirGroupReadable=%d for %s", service->dir_group_readable, service->directory); + log_info(LD_CONFIG, + "HiddenServiceDirGroupReadable=%d for %s", + service->dir_group_readable, service->directory); } else if (!strcasecmp(line->key, "HiddenServiceAuthorizeClient")) { /* Parse auth type and comma-separated list of client names and add a * rend_authorized_client_t for each client to the service's list @@ -761,9 +767,9 @@ rend_service_load_keys(rend_service_t *s) #ifndef _WIN32 if (s->dir_group_readable) { /* Also verify hostname file created with group read. */ - if (chmod(fname, 0640)) { - log_warn(LD_FS,"Unable to make hidden hostname file %s group-readable.", fname); - } + if (chmod(fname, 0640)) + log_warn(LD_FS,"Unable to make hidden hostname file %s group-readable.", + fname); } #endif diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 59c1783978..1580e6271d 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -43,7 +43,6 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /* test: create new dir, CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_new_groupread"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; @@ -53,7 +52,6 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /* test: check existing dir created with defaults, and verify with CPD_CREATE only. */ testdir = get_datadir_fname("checkdir_exists_none"); @@ -66,7 +64,6 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /* test: check existing dir created with defaults, and verify with CPD_GROUP_OK option set. */ testdir = get_datadir_fname("checkdir_exists_groupok"); @@ -79,7 +76,6 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /* test: check existing dir created with defaults, and verify with CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_exists_groupread"); @@ -92,7 +88,6 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /* test: check existing dir created with CPD_GROUP_READ, and verify with CPD_GROUP_OK option set. */ testdir = get_datadir_fname("checkdir_existsread_groupok"); @@ -105,7 +100,6 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); - /* test: check existing dir created with CPD_GROUP_READ, and verify with CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_existsread_groupread"); From a6f2d2091b4abd7a699d75e6c89ebbbb2384cc8e Mon Sep 17 00:00:00 2001 From: David Stainton Date: Tue, 2 Sep 2014 18:09:58 +0000 Subject: [PATCH 013/184] Add Window compatibility note to docs HiddenServiceDirGroupReadable has no effect in Windows --- doc/tor.1.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/tor.1.txt b/doc/tor.1.txt index bf0f5c95c7..25a602ee16 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -2082,6 +2082,7 @@ The following options are used to configure a hidden service. If this option is set to 1, allow the filesystem group to read the hidden service directory and hostname file. If the option is set to 0, only owner is able to read the hidden service directory. (Default: 0) + Has no effect on Windows. TESTING NETWORK OPTIONS ----------------------- From 7203040835f6b9379ab6c8a730a18409f07bfc53 Mon Sep 17 00:00:00 2001 From: David Stainton Date: Tue, 2 Sep 2014 22:46:46 +0000 Subject: [PATCH 014/184] Fix regression nickm pointed out --- src/common/util.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index c5b47b13f8..791ca136c3 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1889,6 +1889,8 @@ check_private_dir(const char *dirname, cpd_check_t check, struct stat st; char *f; #ifndef _WIN32 + int mask = 0; + int perm = 0; const struct passwd *pw = NULL; uid_t running_uid; gid_t running_gid; @@ -1986,29 +1988,31 @@ check_private_dir(const char *dirname, cpd_check_t check, tor_free(process_groupname); return -1; } - if (check & CPD_CHECK_MODE_ONLY) { - if (st.st_mode & 0077) { - log_warn(LD_FS, "Permissions on directory %s are too permissive.", - dirname); - return -1; + if(check & CPD_CHECK_MODE_ONLY) { + if(check & CPD_GROUP_OK || check & CPD_GROUP_READ) { + if (!st.st_mode & 0027) { + log_warn(LD_FS, "Incorrect permissions on directory %s a.", dirname); + return -1; + } } } else { log_warn(LD_FS, "Fixing permissions on directory %s", dirname); unsigned new_mode; + new_mode = 0700; + if (check & CPD_GROUP_OK) { + new_mode = 0700; + } if (check & CPD_GROUP_READ) { new_mode = 0750; - } else { - new_mode = 0700; } if (chmod(dirname, new_mode)) { log_warn(LD_FS, "Could not chmod directory %s: %s", dirname, - strerror(errno)); + strerror(errno)); return -1; } else { return 0; } } - #endif return 0; } From 59e052b896dfdfd1c185d2f93b4a135de9bdb6ed Mon Sep 17 00:00:00 2001 From: David Stainton Date: Wed, 3 Sep 2014 17:22:15 +0000 Subject: [PATCH 015/184] Remove HiddenServiceDirGroupReadable from or_options_t ...and also fix whitespace. --- src/common/util.c | 4 ++-- src/or/or.h | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 791ca136c3..3f04932112 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1988,8 +1988,8 @@ check_private_dir(const char *dirname, cpd_check_t check, tor_free(process_groupname); return -1; } - if(check & CPD_CHECK_MODE_ONLY) { - if(check & CPD_GROUP_OK || check & CPD_GROUP_READ) { + if (check & CPD_CHECK_MODE_ONLY) { + if (check & CPD_GROUP_OK || check & CPD_GROUP_READ) { if (!st.st_mode & 0027) { log_warn(LD_FS, "Incorrect permissions on directory %s a.", dirname); return -1; diff --git a/src/or/or.h b/src/or/or.h index 33a582ba7e..cbdc95efe1 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4224,10 +4224,6 @@ typedef struct { /** Should we send the timestamps that pre-023 hidden services want? */ int Support022HiddenServices; - /** Create the Hidden Service directories - and hostname files group readable. */ - int HiddenServiceDirGroupReadable; - } or_options_t; /** Persistent state for an onion router, as saved to disk. */ From b59fd2efb61e0b6def3fdbf4b8e359acc852776c Mon Sep 17 00:00:00 2001 From: David Stainton Date: Thu, 4 Sep 2014 22:21:30 +0000 Subject: [PATCH 016/184] Fix permissions logic --- src/common/util.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 3f04932112..bf00270df3 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1988,23 +1988,25 @@ check_private_dir(const char *dirname, cpd_check_t check, tor_free(process_groupname); return -1; } - if (check & CPD_CHECK_MODE_ONLY) { - if (check & CPD_GROUP_OK || check & CPD_GROUP_READ) { - if (!st.st_mode & 0027) { - log_warn(LD_FS, "Incorrect permissions on directory %s a.", dirname); - return -1; - } - } + if (check & (CPD_GROUP_OK|CPD_GROUP_READ)) { + mask = 0027; } else { - log_warn(LD_FS, "Fixing permissions on directory %s", dirname); + mask = 0077; + } + if (st.st_mode & mask) { unsigned new_mode; - new_mode = 0700; - if (check & CPD_GROUP_OK) { - new_mode = 0700; + if (check & CPD_CHECK_MODE_ONLY) { + log_warn(LD_FS, "Permissions on directory %s are too permissive.", + dirname); + return -1; } + log_warn(LD_FS, "Fixing permissions on directory %s", dirname); + new_mode = st.st_mode; + new_mode |= 0700; /* Owner should have rwx */ if (check & CPD_GROUP_READ) { - new_mode = 0750; + new_mode |= 0050; /* Group should have rx */ } + new_mode &= ~mask; /* Clear the other bits that we didn't want set...*/ if (chmod(dirname, new_mode)) { log_warn(LD_FS, "Could not chmod directory %s: %s", dirname, strerror(errno)); From d438cf1ec9d5de08b8a8fffd7c38b66134fd337c Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Sun, 25 Aug 2013 08:45:07 -0700 Subject: [PATCH 017/184] Implement scheduler mechanism to track lists of channels wanting cells or writes; doesn't actually drive the cell flow from it yet --- src/common/torlog.h | 4 +- src/or/Makefile.nmake | 1 + src/or/channel.c | 19 ++ src/or/channeltls.c | 5 + src/or/connection_or.c | 37 ++++ src/or/connection_or.h | 1 + src/or/include.am | 2 + src/or/main.c | 10 + src/or/relay.c | 5 + src/or/scheduler.c | 411 +++++++++++++++++++++++++++++++++++++++++ src/or/scheduler.h | 31 ++++ 11 files changed, 525 insertions(+), 1 deletion(-) create mode 100644 src/or/scheduler.c create mode 100644 src/or/scheduler.h diff --git a/src/common/torlog.h b/src/common/torlog.h index 34e39b4b94..2ae8aa9075 100644 --- a/src/common/torlog.h +++ b/src/common/torlog.h @@ -97,8 +97,10 @@ #define LD_HEARTBEAT (1u<<20) /** Abstract channel_t code */ #define LD_CHANNEL (1u<<21) +/** Scheduler */ +#define LD_SCHED (1u<<22) /** Number of logging domains in the code. */ -#define N_LOGGING_DOMAINS 22 +#define N_LOGGING_DOMAINS 23 /** This log message is not safe to send to a callback-based logger * immediately. Used as a flag, not a log domain. */ diff --git a/src/or/Makefile.nmake b/src/or/Makefile.nmake index 523bf3306b..2ac98cd372 100644 --- a/src/or/Makefile.nmake +++ b/src/or/Makefile.nmake @@ -63,6 +63,7 @@ LIBTOR_OBJECTS = \ routerlist.obj \ routerparse.obj \ routerset.obj \ + scheduler.obj \ statefile.obj \ status.obj \ transports.obj diff --git a/src/or/channel.c b/src/or/channel.c index c8c92633b1..da2493a758 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -29,6 +29,7 @@ #include "rephist.h" #include "router.h" #include "routerlist.h" +#include "scheduler.h" /* Cell queue structure */ @@ -788,6 +789,9 @@ channel_free(channel_t *chan) "Freeing channel " U64_FORMAT " at %p", U64_PRINTF_ARG(chan->global_identifier), chan); + /* Get this one out of the scheduler */ + scheduler_release_channel(chan); + /* * Get rid of cmux policy before we do anything, so cmux policies don't * see channels in weird half-freed states. @@ -863,6 +867,9 @@ channel_force_free(channel_t *chan) "Force-freeing channel " U64_FORMAT " at %p", U64_PRINTF_ARG(chan->global_identifier), chan); + /* Get this one out of the scheduler */ + scheduler_release_channel(chan); + /* * Get rid of cmux policy before we do anything, so cmux policies don't * see channels in weird half-freed states. @@ -1941,6 +1948,18 @@ channel_change_state(channel_t *chan, channel_state_t to_state) } } + /* + * If we're going to a closed/closing state, we don't need scheduling any + * more; in CHANNEL_STATE_MAINT we can't accept writes. + */ + if (to_state == CHANNEL_STATE_CLOSING || + to_state == CHANNEL_STATE_CLOSED || + to_state == CHANNEL_STATE_ERROR) { + scheduler_release_channel(chan); + } else if (to_state == CHANNEL_STATE_MAINT) { + scheduler_channel_doesnt_want_writes(chan); + } + /* Tell circuits if we opened and stuff */ if (to_state == CHANNEL_STATE_OPEN) { channel_do_open_actions(chan); diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 245e33583b..af1aab36d3 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -25,6 +25,7 @@ #include "relay.h" #include "router.h" #include "routerlist.h" +#include "scheduler.h" /** How many CELL_PADDING cells have we received, ever? */ uint64_t stats_n_padding_cells_processed = 0; @@ -867,6 +868,10 @@ channel_tls_handle_state_change_on_orconn(channel_tls_t *chan, * CHANNEL_STATE_MAINT on this. */ channel_change_state(base_chan, CHANNEL_STATE_OPEN); + /* We might have just become writeable; check and tell the scheduler */ + if (connection_or_num_cells_writeable(conn) > 0) { + scheduler_channel_wants_writes(base_chan); + } } else { /* * Not open, so from CHANNEL_STATE_OPEN we go to CHANNEL_STATE_MAINT, diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 7fcc5b24d6..9074c0ac5f 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -38,6 +38,8 @@ #include "router.h" #include "routerlist.h" #include "ext_orport.h" +#include "scheduler.h" + #ifdef USE_BUFFEREVENTS #include #endif @@ -595,6 +597,17 @@ connection_or_flushed_some(or_connection_t *conn) * high water mark. */ datalen = connection_get_outbuf_len(TO_CONN(conn)); if (datalen < OR_CONN_LOWWATER) { + /* Let the scheduler know */ + scheduler_channel_wants_writes(TLS_CHAN_TO_BASE(conn->chan)); + + /* + * TODO this will be done from the scheduler, so it will + * need a generic way to ask how many cells a channel can + * accept and if it still wants writes or not to know how + * to account for it in the case that it runs out of cells + * to send first. + */ + while ((conn->chan) && channel_tls_more_to_flush(conn->chan)) { /* Compute how many more cells we want at most */ n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, cell_network_size); @@ -616,6 +629,30 @@ connection_or_flushed_some(or_connection_t *conn) return 0; } +/** This is for channeltls.c to ask how many cells we could accept if + * they were available. */ +ssize_t +connection_or_num_cells_writeable(or_connection_t *conn) +{ + size_t datalen, cell_network_size; + ssize_t n = 0; + + tor_assert(conn); + + /* + * If we're under the high water mark, we're potentially + * writeable; note this is different from the calculation above + * used to trigger when to start writing after we've stopped. + */ + datalen = connection_get_outbuf_len(TO_CONN(conn)); + if (datalen < OR_CONN_HIGHWATER) { + cell_network_size = get_cell_network_size(conn->wide_circ_ids); + n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, cell_network_size); + } + + return n; +} + /** Connection conn has finished writing and has no bytes left on * its outbuf. * diff --git a/src/or/connection_or.h b/src/or/connection_or.h index 143540edd9..7b46d7d111 100644 --- a/src/or/connection_or.h +++ b/src/or/connection_or.h @@ -24,6 +24,7 @@ void connection_or_set_bad_connections(const char *digest, int force); void connection_or_block_renegotiation(or_connection_t *conn); int connection_or_reached_eof(or_connection_t *conn); int connection_or_process_inbuf(or_connection_t *conn); +ssize_t connection_or_num_cells_writeable(or_connection_t *conn); int connection_or_flushed_some(or_connection_t *conn); int connection_or_finished_flushing(or_connection_t *conn); int connection_or_finished_connecting(or_connection_t *conn); diff --git a/src/or/include.am b/src/or/include.am index 47bdd09901..b2b940614f 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -80,6 +80,7 @@ LIBTOR_A_SOURCES = \ src/or/routerlist.c \ src/or/routerparse.c \ src/or/routerset.c \ + src/or/scheduler.c \ src/or/statefile.c \ src/or/status.c \ $(evdns_source) \ @@ -185,6 +186,7 @@ ORHEADERS = \ src/or/routerlist.h \ src/or/routerset.h \ src/or/routerparse.h \ + src/or/scheduler.h \ src/or/statefile.h \ src/or/status.h diff --git a/src/or/main.c b/src/or/main.c index 094120fecf..1a2cfad255 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -52,6 +52,7 @@ #include "router.h" #include "routerlist.h" #include "routerparse.h" +#include "scheduler.h" #include "statefile.h" #include "status.h" #include "util_process.h" @@ -2455,6 +2456,14 @@ tor_init(int argc, char *argv[]) log_warn(LD_NET, "Problem initializing libevent RNG."); } + /* + * Initialize the scheduler - this has to come after + * options_init_from_torrc() sets up libevent - why yes, that seems + * completely sensible to hide the libevent setup in the option parsing + * code! + */ + scheduler_init(); + return 0; } @@ -2552,6 +2561,7 @@ tor_free_all(int postfork) channel_tls_free_all(); channel_free_all(); connection_free_all(); + scheduler_free_all(); buf_shrink_freelists(1); memarea_clear_freelist(); nodelist_free_all(); diff --git a/src/or/relay.c b/src/or/relay.c index d97c84fb07..2c16e4acca 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -39,6 +39,7 @@ #include "router.h" #include "routerlist.h" #include "routerparse.h" +#include "scheduler.h" static edge_connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, @@ -2868,6 +2869,10 @@ append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan, log_debug(LD_GENERAL, "Made a circuit active."); } + /* New way: mark this as having waiting cells for the scheduler */ + scheduler_channel_has_waiting_cells(chan); + + /* TODO remove this once scheduler does it */ if (!channel_has_queued_writes(chan)) { /* There is no data at all waiting to be sent on the outbuf. Add a * cell, so that we can notice when it gets flushed, flushed_some can diff --git a/src/or/scheduler.c b/src/or/scheduler.c new file mode 100644 index 0000000000..451634a63f --- /dev/null +++ b/src/or/scheduler.c @@ -0,0 +1,411 @@ +/* * Copyright (c) 2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file scheduler.c + * \brief Relay scheduling system + **/ + +#include "or.h" +#include "channel.h" +#include "compat_libevent.h" +#include "scheduler.h" + +#ifdef HAVE_EVENT2_EVENT_H +#include +#else +#include +#endif + +/* + * Write scheduling works by keeping track of lists of channels that can + * accept cells, and have cells to write. From the scheduler's perspective, + * a channel can be in four possible states: + * + * 1.) Not open for writes, no cells to send + * - Not much to do here, and the channel will appear in neither list. + * - Transitions from: + * - Open for writes/has cells by simultaneously draining all circuit + * queues and filling the output buffer. + * - Transitions to: + * - Not open for writes/has cells by arrival of cells on an attached + * circuit (this would be driven from append_cell_to_circuit_queue()) + * - Open for writes/no cells by a channel type specific path; + * driven from connection_or_flushed_some() for channel_tls_t. + * + * 2.) Open for writes, no cells to send + * - Not much here either; this will be the state an idle but open channel + * can be expected to settle in. + * - Transitions from: + * - Not open for writes/no cells by flushing some of the output + * buffer. + * - Open for writes/has cells by the scheduler moving cells from + * circuit queues to channel output queue, but not having enough + * to fill the output queue. + * - Transitions to: + * - Open for writes/has cells by arrival of new cells on an attached + * circuit, in append_cell_to_circuit_queue() + * + * 3.) Not open for writes, cells to send + * - This is the state of a busy circuit limited by output bandwidth; + * cells have piled up in the circuit queues waiting to be relayed. + * - Transitions from: + * - Not open for writes/no cells by arrival of cells on an attached + * circuit + * - Open for writes/has cells by filling an output buffer without + * draining all cells from attached circuits + * - Transitions to: + * - Opens for writes/has cells by draining some of the output buffer + * via the connection_or_flushed_some() path (for channel_tls_t). + * + * 4.) Open for writes, cells to send + * - This connection is ready to relay some cells and waiting for + * the scheduler to choose it + * - Transitions from: + * - Not open for writes/has cells by the connection_or_flushed_some() + * path + * - Open for writes/no cells by the append_cell_to_circuit_queue() + * path + * - Transitions to: + * - Not open for writes/no cells by draining all circuit queues and + * simultaneously filling the output buffer. + * - Not open for writes/has cells by writing enough cells to fill the + * output buffer + * - Open for writes/no cells by draining all attached circuit queues + * without also filling the output buffer + * + * Other event-driven parts of the code move channels between these scheduling + * states by calling scheduler functions; the scheduler only runs on open-for- + * writes/has-cells channels and is the only path for those to transition to + * other states. The scheduler_run() function gives us the opportunity to do + * scheduling work, and is called from other scheduler functions whenever a + * state transition occurs, and periodically from the main event loop. + */ + +/* Scheduler global data structures */ + +/* + * We keep lists of channels that either have cells queued, can accept + * writes, or both (states 2, 3 and 4 above) - no explicit list of state + * 1 channels is kept, so we don't have to worry about registering new + * channels here or anything. The scheduler will learn about them when + * it needs to. We can check how many channels in state 4 in O(1), so + * the test whether we have anything to do in scheduler_run() is fast + * and there's no harm in calling it opportunistically whenever we get + * the chance. + * + * Note that it takes time O(n) to search for a channel in these smartlists + * or move one; I don't think the number of channels on a relay will be large + * enough for this to be a severe problem, but this would benefit from using + * a doubly-linked list rather than smartlist_t, together with a hash map from + * channel identifiers to pointers to list entries, so we can perform those + * operations in O(log(n)). + */ + +/* List of channels that can write but have no cells (state 2 above) */ +static smartlist_t *channels_waiting_for_cells = NULL; + +/* List of channels with cells waiting to write (state 3 above) */ +static smartlist_t *channels_waiting_to_write = NULL; + +/* List of channels that can write and have cells (pending work) */ +static smartlist_t *channels_pending = NULL; + +/* + * This event runs the scheduler from its callback, and is manually + * activated whenever a channel enters open for writes/cells to send. + */ + +static struct event *run_sched_ev = NULL; +static struct timeval run_sched_tv; + +/* Scheduler static function declarations */ + +static void scheduler_evt_callback(evutil_socket_t fd, + short events, void *arg); +static int scheduler_more_work(void); +static void scheduler_retrigger(void); +static void scheduler_trigger(void); + +/* Scheduler function implementations */ + +/** Free everything and shut down the scheduling system */ + +void +scheduler_free_all(void) +{ + log_debug(LD_SCHED, "Shutting down scheduler"); + + if (run_sched_ev) { + event_del(run_sched_ev); + tor_event_free(run_sched_ev); + run_sched_ev = NULL; + } + + if (channels_waiting_for_cells) { + smartlist_free(channels_waiting_for_cells); + channels_waiting_for_cells = NULL; + } + + if (channels_waiting_to_write) { + smartlist_free(channels_waiting_to_write); + channels_waiting_to_write = NULL; + } + + if (channels_pending) { + smartlist_free(channels_pending); + channels_pending = NULL; + } +} + +/* + * Scheduler event callback; this should get triggered once per event loop + * if any scheduling work was created during the event loop. + */ + +static void +scheduler_evt_callback(evutil_socket_t fd, short events, void *arg) +{ + log_debug(LD_SCHED, "Scheduler event callback called"); + + tor_assert(run_sched_ev); + + /* Run the scheduler */ + scheduler_run(); + + /* Do we have more work to do? */ + if (scheduler_more_work()) scheduler_retrigger(); +} + +/** Mark a channel as no longer ready to accept writes */ + +void +scheduler_channel_doesnt_want_writes(channel_t *chan) +{ + tor_assert(chan); + tor_assert(channels_waiting_for_cells); + tor_assert(channels_waiting_to_write); + tor_assert(channels_pending); + + /* If it's already in pending, we can put it in waiting_to_write */ + if (smartlist_contains(channels_pending, chan)) { + /* + * It's in channels_pending, so it shouldn't be in any of + * the other lists. It can't write any more, so it goes to + * channels_waiting_to_write. + */ + smartlist_remove(channels_pending, chan); + smartlist_add(channels_waiting_to_write, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p went from pending " + "to waiting_to_write", + U64_PRINTF_ARG(chan->global_identifier), chan); + } else { + /* + * It's not in pending, so it can't become waiting_to_write; it's + * either not in any of the lists (nothing to do) or it's already in + * waiting_for_cells (remove it, can't write any more). + */ + if (smartlist_contains(channels_waiting_for_cells, chan)) { + smartlist_remove(channels_waiting_for_cells, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p left waiting_for_cells", + U64_PRINTF_ARG(chan->global_identifier), chan); + } + } +} + +/** Mark a channel as having waiting cells */ + +void +scheduler_channel_has_waiting_cells(channel_t *chan) +{ + int became_pending = 0; + + tor_assert(chan); + tor_assert(channels_waiting_for_cells); + tor_assert(channels_waiting_to_write); + tor_assert(channels_pending); + + /* First, check if this one also writeable */ + if (smartlist_contains(channels_waiting_for_cells, chan)) { + /* + * It's in channels_waiting_for_cells, so it shouldn't be in any of + * the other lists. It has waiting cells now, so it goes to + * channels_pending. + */ + smartlist_remove(channels_waiting_for_cells, chan); + smartlist_add(channels_pending, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p went from waiting_for_cells " + "to pending", + U64_PRINTF_ARG(chan->global_identifier), chan); + became_pending = 1; + } else { + /* + * It's not in waiting_for_cells, so it can't become pending; it's + * either not in any of the lists (we add it to waiting_to_write) + * or it's already in waiting_to_write or pending (we do nothing) + */ + if (!(smartlist_contains(channels_waiting_to_write, chan) || + smartlist_contains(channels_pending, chan))) { + smartlist_add(channels_waiting_to_write, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p entered waiting_to_write", + U64_PRINTF_ARG(chan->global_identifier), chan); + } + } + + /* + * If we made a channel pending, we potentially have scheduling work + * to do. + */ + if (became_pending) scheduler_retrigger(); +} + +/** Set up the scheduling system */ + +void +scheduler_init(void) +{ + log_debug(LD_SCHED, "Initting scheduler"); + + tor_assert(!run_sched_ev); + run_sched_ev = tor_event_new(tor_libevent_get_base(), -1, + 0, scheduler_evt_callback, NULL); + + channels_waiting_for_cells = smartlist_new(); + channels_waiting_to_write = smartlist_new(); + channels_pending = smartlist_new(); +} + +/** Check if there's more scheduling work */ + +static int +scheduler_more_work(void) +{ + tor_assert(channels_pending); + + return (smartlist_len(channels_pending) > 0) ? 1 : 0; +} + +/** Retrigger the scheduler in a way safe to use from the callback */ + +static void +scheduler_retrigger(void) +{ + tor_assert(run_sched_ev); + + if (!evtimer_pending(run_sched_ev, NULL)) { + log_debug(LD_SCHED, "Retriggering scheduler event"); + + event_del(run_sched_ev); + evtimer_add(run_sched_ev, &run_sched_tv); + } +} + +/** Notify the scheduler of a channel being closed */ + +void +scheduler_release_channel(channel_t *chan) +{ + tor_assert(chan); + + tor_assert(channels_waiting_for_cells); + tor_assert(channels_waiting_to_write); + tor_assert(channels_pending); + + smartlist_remove(channels_waiting_for_cells, chan); + smartlist_remove(channels_waiting_to_write, chan); + smartlist_remove(channels_pending, chan); +} + +/** Run the scheduling algorithm if necessary */ + +void +scheduler_run(void) +{ + smartlist_t *tmp = NULL; + + log_debug(LD_SCHED, "We have a chance to run the scheduler"); + + /* + * TODO make this work properly + * + * For now, just empty the pending list and log that we saw stuff in it + */ + + tmp = channels_pending; + channels_pending = smartlist_new(); + + SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { + log_debug(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p", + U64_PRINTF_ARG(chan->global_identifier), chan); + } SMARTLIST_FOREACH_END(chan); + + smartlist_free(tmp); +} + +/** Trigger the scheduling event so we run the scheduler later */ + +static void +scheduler_trigger(void) +{ + log_debug(LD_SCHED, "Triggering scheduler event"); + + tor_assert(run_sched_ev); + + run_sched_tv.tv_sec = 0; + run_sched_tv.tv_usec = 0; + + evtimer_add(run_sched_ev, &run_sched_tv); +} + +/** Mark a channel as ready to accept writes */ + +void +scheduler_channel_wants_writes(channel_t *chan) +{ + int became_pending = 0; + + tor_assert(chan); + tor_assert(channels_waiting_for_cells); + tor_assert(channels_waiting_to_write); + tor_assert(channels_pending); + + /* If it's already in waiting_to_write, we can put it in pending */ + if (smartlist_contains(channels_waiting_to_write, chan)) { + /* + * It's in channels_waiting_to_write, so it shouldn't be in any of + * the other lists. It can write now, so it goes to channels_pending. + */ + smartlist_remove(channels_waiting_to_write, chan); + smartlist_add(channels_pending, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p went from waiting_to_write " + "to pending", + U64_PRINTF_ARG(chan->global_identifier), chan); + became_pending = 1; + } else { + /* + * It's not in waiting_to_write, so it can't become pending; it's + * either not in any of the lists (we add it to waiting_for_cells) + * or it's already in waiting_for_cells or pending (we do nothing) + */ + if (!(smartlist_contains(channels_waiting_for_cells, chan) || + smartlist_contains(channels_pending, chan))) { + smartlist_add(channels_waiting_for_cells, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p entered waiting_for_cells", + U64_PRINTF_ARG(chan->global_identifier), chan); + } + } + + /* + * If we made a channel pending, we potentially have scheduling work + * to do. + */ + if (became_pending) scheduler_retrigger(); +} + diff --git a/src/or/scheduler.h b/src/or/scheduler.h new file mode 100644 index 0000000000..b25e36e902 --- /dev/null +++ b/src/or/scheduler.h @@ -0,0 +1,31 @@ +/* * Copyright (c) 2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file scheduler.h + * \brief Header file for scheduler.c + **/ + +#ifndef TOR_SCHEDULER_H +#define TOR_SCHEDULER_H + +#include "or.h" +#include "channel.h" + +/* Global-visibility scheduler functions */ + +/* Set up and shut down the scheduler from main.c */ +void scheduler_free_all(void); +void scheduler_init(void); +void scheduler_run(void); + +/* Mark channels as having cells or wanting/not wanting writes */ +void scheduler_channel_doesnt_want_writes(channel_t *chan); +void scheduler_channel_has_waiting_cells(channel_t *chan); +void scheduler_channel_wants_writes(channel_t *chan); + +/* Notify the scheduler of a channel being closed */ +void scheduler_release_channel(channel_t *chan); + +#endif /* !defined(TOR_SCHEDULER_H) */ + From 08bea13c35275ae9f1cc49b6ff095a2b33686741 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 14 Oct 2013 13:14:49 -0400 Subject: [PATCH 018/184] Temporarily disable scheduler_trigger as unused --- src/or/scheduler.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 451634a63f..7d852606e6 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -125,7 +125,9 @@ static void scheduler_evt_callback(evutil_socket_t fd, short events, void *arg); static int scheduler_more_work(void); static void scheduler_retrigger(void); +#if 0 static void scheduler_trigger(void); +#endif /* Scheduler function implementations */ @@ -349,6 +351,7 @@ scheduler_run(void) /** Trigger the scheduling event so we run the scheduler later */ +#if 0 static void scheduler_trigger(void) { @@ -361,6 +364,7 @@ scheduler_trigger(void) evtimer_add(run_sched_ev, &run_sched_tv); } +#endif /** Mark a channel as ready to accept writes */ From fc13184e44e4dd99d065ceff3068b09d713e3758 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 14 Oct 2013 13:15:21 -0400 Subject: [PATCH 019/184] Fix unused-arguments warnings --- src/or/scheduler.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 7d852606e6..d965f3b845 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -168,6 +168,9 @@ scheduler_free_all(void) static void scheduler_evt_callback(evutil_socket_t fd, short events, void *arg) { + (void)fd; + (void)events; + (void)arg; log_debug(LD_SCHED, "Scheduler event callback called"); tor_assert(run_sched_ev); From 85ee5b3095f60052412a0bbb1ef0a4ccd5b7c97e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 14 Oct 2013 13:17:11 -0400 Subject: [PATCH 020/184] Use event_active, not 0-length timeouts. It's idempotent, too. --- src/or/scheduler.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index d965f3b845..e2dcdb5d32 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -117,7 +117,6 @@ static smartlist_t *channels_pending = NULL; */ static struct event *run_sched_ev = NULL; -static struct timeval run_sched_tv; /* Scheduler static function declarations */ @@ -300,13 +299,7 @@ static void scheduler_retrigger(void) { tor_assert(run_sched_ev); - - if (!evtimer_pending(run_sched_ev, NULL)) { - log_debug(LD_SCHED, "Retriggering scheduler event"); - - event_del(run_sched_ev); - evtimer_add(run_sched_ev, &run_sched_tv); - } + event_active(run_sched_ev, EV_TIMEOUT, 1); } /** Notify the scheduler of a channel being closed */ @@ -362,10 +355,7 @@ scheduler_trigger(void) tor_assert(run_sched_ev); - run_sched_tv.tv_sec = 0; - run_sched_tv.tv_usec = 0; - - evtimer_add(run_sched_ev, &run_sched_tv); + event_add(run_sched_ev, EV_TIMEOUT, 1); } #endif From 472b62bfe4edb2f5e332c997be2ec69bdf590660 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 14 Oct 2013 13:33:36 -0400 Subject: [PATCH 021/184] Uglify scheduler init logic to avoid crash on startup. Otherwise, when we authority try to do a self-test because of init-keys, if that self-test can't be launched for whatever reason and so we close the channel immediately, we crash. Yes, this a silly way for initialization to work. --- src/or/config.c | 9 +++++++++ src/or/main.c | 8 -------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 16acec791c..4ae9fadfeb 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -43,6 +43,7 @@ #include "util.h" #include "routerlist.h" #include "routerset.h" +#include "scheduler.h" #include "statefile.h" #include "transports.h" #include "ext_orport.h" @@ -1040,6 +1041,14 @@ options_act_reversible(const or_options_t *old_options, char **msg) if (running_tor && !libevent_initialized) { init_libevent(options); libevent_initialized = 1; + + /* + * Initialize the scheduler - this has to come after + * options_init_from_torrc() sets up libevent - why yes, that seems + * completely sensible to hide the libevent setup in the option parsing + * code! It also needs to happen before init_keys(), so it needs to + * happen here too. How yucky. */ + scheduler_init(); } /* Adjust the port configuration so we can launch listeners. */ diff --git a/src/or/main.c b/src/or/main.c index 1a2cfad255..7b38f45b22 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -2456,14 +2456,6 @@ tor_init(int argc, char *argv[]) log_warn(LD_NET, "Problem initializing libevent RNG."); } - /* - * Initialize the scheduler - this has to come after - * options_init_from_torrc() sets up libevent - why yes, that seems - * completely sensible to hide the libevent setup in the option parsing - * code! - */ - scheduler_init(); - return 0; } From 2efbab2aaf98d8f8f0df504efd4fdd0fac77d354 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 29 Oct 2013 02:13:53 -0700 Subject: [PATCH 022/184] Provide generic mechanism for scheduler to query writeable cells on a channel --- src/or/channel.c | 34 ++++++++++++++++++++++++++++++++++ src/or/channel.h | 7 ++++++- src/or/channeltls.c | 30 ++++++++++++++++++++++++++++++ src/or/connection_or.c | 8 -------- src/or/or.h | 12 ++++++++++++ src/or/scheduler.c | 16 +++++++++++++--- 6 files changed, 95 insertions(+), 12 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index da2493a758..e9451f1e9b 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -3826,6 +3826,40 @@ channel_mark_outgoing(channel_t *chan) chan->is_incoming = 0; } +/************************ + * Flow control queries * + ***********************/ + +/* + * Estimate the number of writeable cells + * + * Ask the lower layer for an estimate of how many cells it can accept, and + * then subtract the length of our outgoing_queue, if any, to produce an + * estimate of the number of cells this channel can accept for writes. + */ + +int +channel_num_cells_writeable(channel_t *chan) +{ + int result; + + tor_assert(chan); + tor_assert(chan->num_cells_writeable); + + if (chan->state == CHANNEL_STATE_OPEN) { + /* Query lower layer */ + result = chan->num_cells_writeable(chan); + /* Subtract cell queue length, if any */ + result -= chan_cell_queue_len(&chan->outgoing_queue); + if (result < 0) result = 0; + } else { + /* No cells are writeable in any other state */ + result = 0; + } + + return result; +} + /********************* * Timestamp updates * ********************/ diff --git a/src/or/channel.h b/src/or/channel.h index 148199235a..28b5ab0ccf 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -110,7 +110,9 @@ struct channel_s { int (*matches_extend_info)(channel_t *, extend_info_t *); /** Check if this channel matches a target address when extending */ int (*matches_target)(channel_t *, const tor_addr_t *); - /** Write a cell to an open channel */ + /* Ask the lower layer how many cells can be written */ + int (*num_cells_writeable)(channel_t *); + /* Write a cell to an open channel */ int (*write_cell)(channel_t *, cell_t *); /** Write a packed cell to an open channel */ int (*write_packed_cell)(channel_t *, packed_cell_t *); @@ -465,6 +467,9 @@ void channel_listener_dump_statistics(channel_listener_t *chan_l, void channel_listener_dump_transport_statistics(channel_listener_t *chan_l, int severity); +/* Flow control queries */ +int channel_num_cells_writeable(channel_t *chan); + /* Timestamp queries */ time_t channel_when_created(channel_t *chan); time_t channel_when_last_active(channel_t *chan); diff --git a/src/or/channeltls.c b/src/or/channeltls.c index af1aab36d3..b828b152b5 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -68,6 +68,7 @@ channel_tls_matches_extend_info_method(channel_t *chan, extend_info_t *extend_info); static int channel_tls_matches_target_method(channel_t *chan, const tor_addr_t *target); +static int channel_tls_num_cells_writeable_method(channel_t *chan); static int channel_tls_write_cell_method(channel_t *chan, cell_t *cell); static int channel_tls_write_packed_cell_method(channel_t *chan, @@ -124,6 +125,7 @@ channel_tls_common_init(channel_tls_t *tlschan) chan->is_canonical = channel_tls_is_canonical_method; chan->matches_extend_info = channel_tls_matches_extend_info_method; chan->matches_target = channel_tls_matches_target_method; + chan->num_cells_writeable = channel_tls_num_cells_writeable_method; chan->write_cell = channel_tls_write_cell_method; chan->write_packed_cell = channel_tls_write_packed_cell_method; chan->write_var_cell = channel_tls_write_var_cell_method; @@ -673,6 +675,34 @@ channel_tls_matches_target_method(channel_t *chan, return tor_addr_eq(&(tlschan->conn->real_addr), target); } +/** + * Tell the upper layer how many cells we can accept to write + * + * This implements the num_cells_writeable method for channel_tls_t; it + * returns an estimate of the number of cells we can accept with + * channel_tls_write_*_cell(). + */ + +static int +channel_tls_num_cells_writeable_method(channel_t *chan) +{ + size_t outbuf_len; + int n; + channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan); + size_t cell_network_size; + + tor_assert(tlschan); + tor_assert(tlschan->conn); + + cell_network_size = get_cell_network_size(tlschan->conn->wide_circ_ids); + outbuf_len = connection_get_outbuf_len(TO_CONN(tlschan->conn)); + /* Get the number of cells */ + n = CEIL_DIV(OR_CONN_HIGHWATER - outbuf_len, cell_network_size); + if (n < 0) n = 0; + + return n; +} + /** * Write a cell to a channel_tls_t * diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 9074c0ac5f..a8f9d41923 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -576,14 +576,6 @@ connection_or_process_inbuf(or_connection_t *conn) return ret; } -/** When adding cells to an OR connection's outbuf, keep adding until the - * outbuf is at least this long, or we run out of cells. */ -#define OR_CONN_HIGHWATER (32*1024) - -/** Add cells to an OR connection's outbuf whenever the outbuf's data length - * drops below this size. */ -#define OR_CONN_LOWWATER (16*1024) - /** Called whenever we have flushed some data on an or_conn: add more data * from active circuits. */ int diff --git a/src/or/or.h b/src/or/or.h index b2b0d5f7ab..bdcb29ea11 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1426,6 +1426,18 @@ typedef struct or_handshake_state_t { /** Length of Extended ORPort connection identifier. */ #define EXT_OR_CONN_ID_LEN DIGEST_LEN /* 20 */ +/* + * OR_CONN_HIGHWATER and OR_CONN_LOWWATER moved from connection_or.c so + * channeltls.c can see them too. + */ + +/** When adding cells to an OR connection's outbuf, keep adding until the + * outbuf is at least this long, or we run out of cells. */ +#define OR_CONN_HIGHWATER (32*1024) + +/** Add cells to an OR connection's outbuf whenever the outbuf's data length + * drops below this size. */ +#define OR_CONN_LOWWATER (16*1024) /** Subtype of connection_t for an "OR connection" -- that is, one that speaks * cells over TLS. */ diff --git a/src/or/scheduler.c b/src/or/scheduler.c index e2dcdb5d32..7023eaae0a 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -324,6 +324,7 @@ void scheduler_run(void) { smartlist_t *tmp = NULL; + int n_cells; log_debug(LD_SCHED, "We have a chance to run the scheduler"); @@ -337,9 +338,18 @@ scheduler_run(void) channels_pending = smartlist_new(); SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { - log_debug(LD_SCHED, - "Scheduler saw pending channel " U64_FORMAT " at %p", - U64_PRINTF_ARG(chan->global_identifier), chan); + n_cells = channel_num_cells_writeable(chan); + if (n_cells > 0) { + log_debug(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p with " + "%d cells writeable", + U64_PRINTF_ARG(chan->global_identifier), chan, n_cells); + } else { + log_info(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p with " + "no cells writeable", + U64_PRINTF_ARG(chan->global_identifier), chan); + } } SMARTLIST_FOREACH_END(chan); smartlist_free(tmp); From b09f41424c7e0da63733c2fdda5332d63a7f4e0f Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 31 Oct 2013 19:37:57 -0700 Subject: [PATCH 023/184] Actually call channel_flush_some_cells() from the scheduler --- src/or/connection_or.c | 29 +---------------------------- src/or/scheduler.c | 16 ++++++++++------ 2 files changed, 11 insertions(+), 34 deletions(-) diff --git a/src/or/connection_or.c b/src/or/connection_or.c index a8f9d41923..6b276cc3a1 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -581,9 +581,7 @@ connection_or_process_inbuf(or_connection_t *conn) int connection_or_flushed_some(or_connection_t *conn) { - size_t datalen, temp; - ssize_t n, flushed; - size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids); + size_t datalen; /* If we're under the low water mark, add cells until we're just over the * high water mark. */ @@ -591,31 +589,6 @@ connection_or_flushed_some(or_connection_t *conn) if (datalen < OR_CONN_LOWWATER) { /* Let the scheduler know */ scheduler_channel_wants_writes(TLS_CHAN_TO_BASE(conn->chan)); - - /* - * TODO this will be done from the scheduler, so it will - * need a generic way to ask how many cells a channel can - * accept and if it still wants writes or not to know how - * to account for it in the case that it runs out of cells - * to send first. - */ - - while ((conn->chan) && channel_tls_more_to_flush(conn->chan)) { - /* Compute how many more cells we want at most */ - n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, cell_network_size); - /* Bail out if we don't want any more */ - if (n <= 0) break; - /* We're still here; try to flush some more cells */ - flushed = channel_tls_flush_some_cells(conn->chan, n); - /* Bail out if it says it didn't flush anything */ - if (flushed <= 0) break; - /* How much in the outbuf now? */ - temp = connection_get_outbuf_len(TO_CONN(conn)); - /* Bail out if we didn't actually increase the outbuf size */ - if (temp <= datalen) break; - /* Update datalen for the next iteration */ - datalen = temp; - } } return 0; diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 7023eaae0a..1c6a2fdecb 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -325,18 +325,15 @@ scheduler_run(void) { smartlist_t *tmp = NULL; int n_cells; + ssize_t flushed, flushed_this_time; log_debug(LD_SCHED, "We have a chance to run the scheduler"); - /* - * TODO make this work properly - * - * For now, just empty the pending list and log that we saw stuff in it - */ - tmp = channels_pending; channels_pending = smartlist_new(); + /* For now, just run the old scheduler on all the chans in the list */ + SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { n_cells = channel_num_cells_writeable(chan); if (n_cells > 0) { @@ -344,6 +341,13 @@ scheduler_run(void) "Scheduler saw pending channel " U64_FORMAT " at %p with " "%d cells writeable", U64_PRINTF_ARG(chan->global_identifier), chan, n_cells); + + flushed = 0; + while (flushed < n_cells) { + flushed_this_time = channel_flush_some_cells(chan, n_cells - flushed); + if (flushed_this_time <= 0) break; + flushed += flushed_this_time; + } } else { log_info(LD_SCHED, "Scheduler saw pending channel " U64_FORMAT " at %p with " From f0533d8d223c40e487bbddc46256856f80e96389 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 31 Oct 2013 20:59:06 -0700 Subject: [PATCH 024/184] Remove no-longer-used channel_tls_t functions --- src/or/channeltls.c | 52 --------------------------------------------- src/or/channeltls.h | 2 -- 2 files changed, 54 deletions(-) diff --git a/src/or/channeltls.c b/src/or/channeltls.c index b828b152b5..7df2d35d93 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -913,58 +913,6 @@ channel_tls_handle_state_change_on_orconn(channel_tls_t *chan, } } -/** - * Flush cells from a channel_tls_t - * - * Try to flush up to about num_cells cells, and return how many we flushed. - */ - -ssize_t -channel_tls_flush_some_cells(channel_tls_t *chan, ssize_t num_cells) -{ - ssize_t flushed = 0; - - tor_assert(chan); - - if (flushed >= num_cells) goto done; - - /* - * If channel_tls_t ever buffers anything below the channel_t layer, flush - * that first here. - */ - - flushed += channel_flush_some_cells(TLS_CHAN_TO_BASE(chan), - num_cells - flushed); - - /* - * If channel_tls_t ever buffers anything below the channel_t layer, check - * how much we actually got and push it on down here. - */ - - done: - return flushed; -} - -/** - * Check if a channel_tls_t has anything to flush - * - * Return true if there is any more to flush on this channel (cells in queue - * or active circuits). - */ - -int -channel_tls_more_to_flush(channel_tls_t *chan) -{ - tor_assert(chan); - - /* - * If channel_tls_t ever buffers anything below channel_t, the - * check for that should go here first. - */ - - return channel_more_to_flush(TLS_CHAN_TO_BASE(chan)); -} - #ifdef KEEP_TIMING_STATS /** diff --git a/src/or/channeltls.h b/src/or/channeltls.h index c872a09d79..5eb6e126bc 100644 --- a/src/or/channeltls.h +++ b/src/or/channeltls.h @@ -40,8 +40,6 @@ channel_t * channel_tls_to_base(channel_tls_t *tlschan); channel_tls_t * channel_tls_from_base(channel_t *chan); /* Things for connection_or.c to call back into */ -ssize_t channel_tls_flush_some_cells(channel_tls_t *chan, ssize_t num_cells); -int channel_tls_more_to_flush(channel_tls_t *chan); void channel_tls_handle_cell(cell_t *cell, or_connection_t *conn); void channel_tls_handle_state_change_on_orconn(channel_tls_t *chan, or_connection_t *conn, From 5e0a6d54d0f1341eddc26a6fa6d349e22966c255 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 4 Nov 2013 19:17:05 -0800 Subject: [PATCH 025/184] Add global cell/byte counters and per channel byte counters to channel.c --- src/or/channel.c | 165 ++++++++++++++++++++++++++++++++++++++++++++++- src/or/channel.h | 4 +- 2 files changed, 164 insertions(+), 5 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index e9451f1e9b..0caebfb55c 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -77,6 +77,53 @@ static smartlist_t *finished_listeners = NULL; /* Counter for ID numbers */ static uint64_t n_channels_allocated = 0; +/* + * Channel global byte/cell counters, for statistics and for scheduler high + * /low-water marks. + */ + +/* + * Total number of cells ever given to any channel with the + * channel_write_*_cell() functions. + */ + +static uint64_t n_channel_cells_queued = 0; + +/* + * Total number of cells ever passed to a channel lower layer with the + * write_*_cell() methods. + */ + +static uint64_t n_channel_cells_passed_to_lower_layer = 0; + +/* + * Current number of cells in all channel queues; should be + * n_channel_cells_queued - n_channel_cells_passed_to_lower_layer. + */ + +static uint64_t n_channel_cells_in_queues = 0; + +/* + * Total number of bytes for all cells ever queued to a channel and + * counted in n_channel_cells_queued. + */ + +static uint64_t n_channel_bytes_queued = 0; + +/* + * Total number of bytes for all cells ever passed to a channel lower layer + * and counted in n_channel_cells_passed_to_lower_layer. + */ + +static uint64_t n_channel_bytes_passed_to_lower_layer = 0; + +/* + * Current number of bytes in all channel queues; should be + * n_channel_bytes_queued - n_channel_bytes_passed_to_lower_layer. + */ + +static uint64_t n_channel_bytes_in_queues = 0; + /* Digest->channel map * * Similar to the one used in connection_or.c, this maps from the identity @@ -124,6 +171,8 @@ cell_queue_entry_new_var(var_cell_t *var_cell); static int is_destroy_cell(channel_t *chan, const cell_queue_entry_t *q, circid_t *circid_out); +static void channel_assert_counter_consistency(void); + /* Functions to maintain the digest map */ static void channel_add_to_digest_map(channel_t *chan); static void channel_remove_from_digest_map(channel_t *chan); @@ -141,6 +190,8 @@ channel_free_list(smartlist_t *channels, int mark_for_close); static void channel_listener_free_list(smartlist_t *channels, int mark_for_close); static void channel_listener_force_free(channel_listener_t *chan_l); +static size_t channel_get_cell_queue_entry_size(channel_t *chan, + cell_queue_entry_t *q); static void channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q); @@ -1672,6 +1723,34 @@ cell_queue_entry_new_var(var_cell_t *var_cell) return q; } +/** + * Ask how big the cell contained in a cell_queue_entry_t is + */ + +static size_t +channel_get_cell_queue_entry_size(channel_t *chan, cell_queue_entry_t *q) +{ + tor_assert(chan); + tor_assert(q); + + switch (q->type) { + case CELL_QUEUE_FIXED: + return get_cell_network_size(chan->wide_circ_ids); + break; + case CELL_QUEUE_VAR: + tor_assert(q->u.var.var_cell); + return get_var_cell_header_size(chan->wide_circ_ids) + + q->u.var.var_cell->payload_len; + break; + case CELL_QUEUE_PACKED: + return get_cell_network_size(chan->wide_circ_ids); + break; + default: + tor_assert(1); + return 0; + } +} + /** * Write to a channel based on a cell_queue_entry_t * @@ -1684,6 +1763,7 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) { int result = 0, sent = 0; cell_queue_entry_t *tmp = NULL; + size_t cell_bytes; tor_assert(chan); tor_assert(q); @@ -1700,6 +1780,9 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) } } + /* For statistical purposes, figure out how big this cell is */ + cell_bytes = channel_get_cell_queue_entry_size(chan, q); + /* Can we send it right out? If so, try */ if (TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue) && chan->state == CHANNEL_STATE_OPEN) { @@ -1733,6 +1816,13 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) channel_timestamp_drained(chan); /* Update the counter */ ++(chan->n_cells_xmitted); + chan->n_bytes_xmitted += cell_bytes; + /* Update global counters */ + ++n_channel_cells_queued; + ++n_channel_cells_passed_to_lower_layer; + n_channel_bytes_queued += cell_bytes; + n_channel_bytes_passed_to_lower_layer += cell_bytes; + channel_assert_counter_consistency(); } } @@ -1744,6 +1834,12 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) */ tmp = cell_queue_entry_dup(q); TOR_SIMPLEQ_INSERT_TAIL(&chan->outgoing_queue, tmp, next); + /* Update global counters */ + ++n_channel_cells_queued; + ++n_channel_cells_in_queues; + n_channel_bytes_queued += cell_bytes; + n_channel_bytes_in_queues += cell_bytes; + channel_assert_counter_consistency(); /* Try to process the queue? */ if (chan->state == CHANNEL_STATE_OPEN) channel_flush_cells(chan); } @@ -2136,6 +2232,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, unsigned int unlimited = 0; ssize_t flushed = 0; cell_queue_entry_t *q = NULL; + size_t cell_size; tor_assert(chan); tor_assert(chan->write_cell); @@ -2151,6 +2248,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, NULL != (q = TOR_SIMPLEQ_FIRST(&chan->outgoing_queue))) { if (1) { + /* Figure out how big it is for statistical purposes */ + cell_size = channel_get_cell_queue_entry_size(chan, q); /* * Okay, we have a good queue entry, try to give it to the lower * layer. @@ -2163,6 +2262,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, ++flushed; channel_timestamp_xmit(chan); ++(chan->n_cells_xmitted); + chan->n_bytes_xmitted += cell_size; cell_queue_entry_free(q, 1); q = NULL; } @@ -2186,6 +2286,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, ++flushed; channel_timestamp_xmit(chan); ++(chan->n_cells_xmitted); + chan->n_bytes_xmitted += cell_size; cell_queue_entry_free(q, 1); q = NULL; } @@ -2209,6 +2310,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, ++flushed; channel_timestamp_xmit(chan); ++(chan->n_cells_xmitted); + chan->n_bytes_xmitted += cell_size; cell_queue_entry_free(q, 1); q = NULL; } @@ -2237,7 +2339,18 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, } /* if q got NULLed out, we used it and should remove the queue entry */ - if (!q) TOR_SIMPLEQ_REMOVE_HEAD(&chan->outgoing_queue, next); + if (!q) { + TOR_SIMPLEQ_REMOVE_HEAD(&chan->outgoing_queue, next); + /* + * ...and we handed a cell off to the lower layer, so we should + * update the counters. + */ + ++n_channel_cells_passed_to_lower_layer; + --n_channel_cells_in_queues; + n_channel_bytes_passed_to_lower_layer += cell_size; + n_channel_bytes_in_queues -= cell_size; + channel_assert_counter_consistency(); + } /* No cell removed from list, so we can't go on any further */ else break; } @@ -2560,8 +2673,9 @@ channel_queue_cell(channel_t *chan, cell_t *cell) /* Timestamp for receiving */ channel_timestamp_recv(chan); - /* Update the counter */ + /* Update the counters */ ++(chan->n_cells_recved); + chan->n_bytes_recved += get_cell_network_size(chan->wide_circ_ids); /* If we don't need to queue we can just call cell_handler */ if (!need_to_queue) { @@ -2615,6 +2729,8 @@ channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell) /* Update the counter */ ++(chan->n_cells_recved); + chan->n_bytes_recved += get_var_cell_header_size(chan->wide_circ_ids) + + var_cell->payload_len; /* If we don't need to queue we can just call cell_handler */ if (!need_to_queue) { @@ -2664,6 +2780,19 @@ packed_cell_is_destroy(channel_t *chan, return 0; } +/** + * Assert that the global channel stats counters are internally consistent + */ + +static void +channel_assert_counter_consistency(void) +{ + tor_assert(n_channel_cells_queued == + (n_channel_cells_in_queues + n_channel_cells_passed_to_lower_layer)); + tor_assert(n_channel_bytes_queued == + (n_channel_bytes_in_queues + n_channel_bytes_passed_to_lower_layer)); +} + /** DOCDOC */ static int is_destroy_cell(channel_t *chan, @@ -2745,6 +2874,19 @@ void channel_dumpstats(int severity) { if (all_channels && smartlist_len(all_channels) > 0) { + tor_log(severity, LD_GENERAL, + "Channels have queued " U64_FORMAT " bytes in " U64_FORMAT " cells, " + "and handed " U64_FORMAT " bytes in " U64_FORMAT " cells to the lower" + " layer.", + U64_PRINTF_ARG(n_channel_bytes_queued), + U64_PRINTF_ARG(n_channel_cells_queued), + U64_PRINTF_ARG(n_channel_bytes_passed_to_lower_layer), + U64_PRINTF_ARG(n_channel_cells_passed_to_lower_layer)); + tor_log(severity, LD_GENERAL, + "There are currently " U64_FORMAT " bytes in " U64_FORMAT " cells " + "in channel queues.", + U64_PRINTF_ARG(n_channel_bytes_in_queues), + U64_PRINTF_ARG(n_channel_cells_in_queues)); tor_log(severity, LD_GENERAL, "Dumping statistics about %d channels:", smartlist_len(all_channels)); @@ -3388,12 +3530,22 @@ channel_dump_statistics(channel_t *chan, int severity) /* Describe counters and rates */ tor_log(severity, LD_GENERAL, " * Channel " U64_FORMAT " has received " - U64_FORMAT " cells and transmitted " U64_FORMAT, + U64_FORMAT " bytes in " U64_FORMAT " cells and transmitted " + U64_FORMAT " bytes in " U64_FORMAT " cells", U64_PRINTF_ARG(chan->global_identifier), + U64_PRINTF_ARG(chan->n_bytes_recved), U64_PRINTF_ARG(chan->n_cells_recved), + U64_PRINTF_ARG(chan->n_bytes_xmitted), U64_PRINTF_ARG(chan->n_cells_xmitted)); if (now > chan->timestamp_created && chan->timestamp_created > 0) { + if (chan->n_bytes_recved > 0) { + avg = (double)(chan->n_bytes_recved) / age; + tor_log(severity, LD_GENERAL, + " * Channel " U64_FORMAT " has averaged %f " + "bytes received per second", + U64_PRINTF_ARG(chan->global_identifier), avg); + } if (chan->n_cells_recved > 0) { avg = (double)(chan->n_cells_recved) / age; if (avg >= 1.0) { @@ -3409,6 +3561,13 @@ channel_dump_statistics(channel_t *chan, int severity) U64_PRINTF_ARG(chan->global_identifier), interval); } } + if (chan->n_bytes_xmitted > 0) { + avg = (double)(chan->n_bytes_xmitted) / age; + tor_log(severity, LD_GENERAL, + " * Channel " U64_FORMAT " has averaged %f " + "bytes transmitted per second", + U64_PRINTF_ARG(chan->global_identifier), avg); + } if (chan->n_cells_xmitted > 0) { avg = (double)(chan->n_cells_xmitted) / age; if (avg >= 1.0) { diff --git a/src/or/channel.h b/src/or/channel.h index 28b5ab0ccf..f35cb27aa6 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -200,8 +200,8 @@ struct channel_s { uint64_t dirreq_id; /** Channel counters for cell channels */ - uint64_t n_cells_recved; - uint64_t n_cells_xmitted; + uint64_t n_cells_recved, n_bytes_recved; + uint64_t n_cells_xmitted, n_bytes_xmitted; }; struct channel_listener_s { From 7674308f622904bc5a4cff5e7cb4d0f22fbf84d7 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 4 Nov 2013 22:40:24 -0800 Subject: [PATCH 026/184] Make 'make check-spaces' not complain about function pointers returning size_t or double --- scripts/maint/checkSpace.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/maint/checkSpace.pl b/scripts/maint/checkSpace.pl index b529103367..c785d89567 100755 --- a/scripts/maint/checkSpace.pl +++ b/scripts/maint/checkSpace.pl @@ -128,7 +128,8 @@ for $fn (@ARGV) { if ($1 ne "if" and $1 ne "while" and $1 ne "for" and $1 ne "switch" and $1 ne "return" and $1 ne "int" and $1 ne "elsif" and $1 ne "WINAPI" and $2 ne "WINAPI" and - $1 ne "void" and $1 ne "__attribute__" and $1 ne "op") { + $1 ne "void" and $1 ne "__attribute__" and $1 ne "op" and + $1 ne "size_t" and $1 ne "double") { print " fn ():$fn:$.\n"; } } From 8852a1794cfa9eb5dae494f5d85242d8fd6955fc Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 5 Nov 2013 00:30:02 -0800 Subject: [PATCH 027/184] Track total queue size per channel, with overhead estimates, and global queue total --- src/or/channel.c | 126 +++++++++++++++++++++++++++++++++++++++++ src/or/channel.h | 16 ++++++ src/or/channeltls.c | 54 ++++++++++++++++++ src/or/connection.c | 2 + src/or/connection_or.c | 3 + src/or/or.h | 6 ++ 6 files changed, 207 insertions(+) diff --git a/src/or/channel.c b/src/or/channel.c index 0caebfb55c..f729a17be9 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -124,6 +124,13 @@ static uint64_t n_channel_bytes_passed_to_lower_layer = 0; static uint64_t n_channel_bytes_in_queues = 0; +/* + * Current total estimated queue size *including lower layer queues and + * transmit overhead* + */ + +static uint64_t estimated_total_queue_size = 0; + /* Digest->channel map * * Similar to the one used in connection_or.c, this maps from the identity @@ -1840,6 +1847,8 @@ channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q) n_channel_bytes_queued += cell_bytes; n_channel_bytes_in_queues += cell_bytes; channel_assert_counter_consistency(); + /* Update channel queue size */ + chan->bytes_in_queue += cell_bytes; /* Try to process the queue? */ if (chan->state == CHANNEL_STATE_OPEN) channel_flush_cells(chan); } @@ -1878,6 +1887,9 @@ channel_write_cell(channel_t *chan, cell_t *cell) q.type = CELL_QUEUE_FIXED; q.u.fixed.cell = cell; channel_write_cell_queue_entry(chan, &q); + + /* Update the queue size estimate */ + channel_update_xmit_queue_size(chan); } /** @@ -1913,6 +1925,9 @@ channel_write_packed_cell(channel_t *chan, packed_cell_t *packed_cell) q.type = CELL_QUEUE_PACKED; q.u.packed.packed_cell = packed_cell; channel_write_cell_queue_entry(chan, &q); + + /* Update the queue size estimate */ + channel_update_xmit_queue_size(chan); } /** @@ -1949,6 +1964,9 @@ channel_write_var_cell(channel_t *chan, var_cell_t *var_cell) q.type = CELL_QUEUE_VAR; q.u.var.var_cell = var_cell; channel_write_cell_queue_entry(chan, &q); + + /* Update the queue size estimate */ + channel_update_xmit_queue_size(chan); } /** @@ -2056,6 +2074,29 @@ channel_change_state(channel_t *chan, channel_state_t to_state) scheduler_channel_doesnt_want_writes(chan); } + /* + * If we're closing, this channel no longer counts toward the global + * estimated queue size; if we're open, it now does. + */ + if ((to_state == CHANNEL_STATE_CLOSING || + to_state == CHANNEL_STATE_CLOSED || + to_state == CHANNEL_STATE_ERROR) && + (from_state == CHANNEL_STATE_OPEN || + from_state == CHANNEL_STATE_MAINT)) { + estimated_total_queue_size -= chan->bytes_in_queue; + } + + /* + * If we're opening, this channel now does count toward the global + * estimated queue size. + */ + if ((to_state == CHANNEL_STATE_OPEN || + to_state == CHANNEL_STATE_MAINT) && + !(from_state == CHANNEL_STATE_OPEN || + from_state == CHANNEL_STATE_MAINT)) { + estimated_total_queue_size += chan->bytes_in_queue; + } + /* Tell circuits if we opened and stuff */ if (to_state == CHANNEL_STATE_OPEN) { channel_do_open_actions(chan); @@ -2350,6 +2391,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, n_channel_bytes_passed_to_lower_layer += cell_size; n_channel_bytes_in_queues -= cell_size; channel_assert_counter_consistency(); + /* Update the channel's queue size too */ + chan->bytes_in_queue -= cell_size; } /* No cell removed from list, so we can't go on any further */ else break; @@ -2362,6 +2405,9 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, channel_timestamp_drained(chan); } + /* Update the estimate queue size */ + channel_update_xmit_queue_size(chan); + return flushed; } @@ -4421,3 +4467,83 @@ channel_set_circid_type(channel_t *chan, } } +/** + * Update the estimated number of bytes queued to transmit for this channel, + * and notify the scheduler. The estimate includes both the channel queue and + * the queue size reported by the lower layer, and an overhead estimate + * optionally provided by the lower layer. + */ + +void +channel_update_xmit_queue_size(channel_t *chan) +{ + uint64_t queued, adj; + double overhead; + + tor_assert(chan); + tor_assert(chan->num_bytes_queued); + + /* + * First, get the number of bytes we have queued without factoring in + * lower-layer overhead. + */ + queued = chan->num_bytes_queued(chan) + chan->bytes_in_queue; + /* Next, adjust by the overhead factor, if any is available */ + if (chan->get_overhead_estimate) { + overhead = chan->get_overhead_estimate(chan); + if (overhead >= 1.0f) { + queued *= overhead; + } else { + /* Ignore silly overhead factors */ + log_notice(LD_CHANNEL, "Ignoring silly overhead factor %f", overhead); + } + } + + /* Now, compare to the previous estimate */ + if (queued > chan->bytes_queued_for_xmit) { + adj = queued - chan->bytes_queued_for_xmit; + log_debug(LD_CHANNEL, + "Increasing queue size for channel " U64_FORMAT " by " U64_FORMAT + " from " U64_FORMAT " to " U64_FORMAT, + U64_PRINTF_ARG(chan->global_identifier), + U64_PRINTF_ARG(adj), + U64_PRINTF_ARG(chan->bytes_queued_for_xmit), + U64_PRINTF_ARG(queued)); + /* Update the channel's estimate */ + chan->bytes_queued_for_xmit = queued; + + /* Update the global queue size estimate if appropriate */ + if (chan->state == CHANNEL_STATE_OPEN || + chan->state == CHANNEL_STATE_MAINT) { + estimated_total_queue_size += adj; + log_debug(LD_CHANNEL, + "Increasing global queue size by " U64_FORMAT " for channel " + U64_FORMAT ", new size is " U64_FORMAT, + U64_PRINTF_ARG(adj), U64_PRINTF_ARG(chan->global_identifier), + U64_PRINTF_ARG(estimated_total_queue_size)); + } + } else if (queued < chan->bytes_queued_for_xmit) { + adj = chan->bytes_queued_for_xmit - queued; + log_debug(LD_CHANNEL, + "Decreasing queue size for channel " U64_FORMAT " by " U64_FORMAT + " from " U64_FORMAT " to " U64_FORMAT, + U64_PRINTF_ARG(chan->global_identifier), + U64_PRINTF_ARG(adj), + U64_PRINTF_ARG(chan->bytes_queued_for_xmit), + U64_PRINTF_ARG(queued)); + /* Update the channel's estimate */ + chan->bytes_queued_for_xmit = queued; + + /* Update the global queue size estimate if appropriate */ + if (chan->state == CHANNEL_STATE_OPEN || + chan->state == CHANNEL_STATE_MAINT) { + estimated_total_queue_size -= adj; + log_debug(LD_CHANNEL, + "Decreasing global queue size by " U64_FORMAT " for channel " + U64_FORMAT ", new size is " U64_FORMAT, + U64_PRINTF_ARG(adj), U64_PRINTF_ARG(chan->global_identifier), + U64_PRINTF_ARG(estimated_total_queue_size)); + } + } +} + diff --git a/src/or/channel.h b/src/or/channel.h index f35cb27aa6..388c729953 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -79,6 +79,11 @@ struct channel_s { /* Methods implemented by the lower layer */ /** + * Ask the lower layer for an estimate of the average overhead for + * transmissions on this channel. + */ + double (*get_overhead_estimate)(channel_t *); + /* * Ask the underlying transport what the remote endpoint address is, in * a tor_addr_t. This is optional and subclasses may leave this NULL. * If they implement it, they should write the address out to the @@ -110,6 +115,8 @@ struct channel_s { int (*matches_extend_info)(channel_t *, extend_info_t *); /** Check if this channel matches a target address when extending */ int (*matches_target)(channel_t *, const tor_addr_t *); + /* Ask the lower layer how many bytes it has queued but not yet sent */ + size_t (*num_bytes_queued)(channel_t *); /* Ask the lower layer how many cells can be written */ int (*num_cells_writeable)(channel_t *); /* Write a cell to an open channel */ @@ -202,6 +209,14 @@ struct channel_s { /** Channel counters for cell channels */ uint64_t n_cells_recved, n_bytes_recved; uint64_t n_cells_xmitted, n_bytes_xmitted; + + /** Our current contribution to the scheduler's total xmit queue */ + uint64_t bytes_queued_for_xmit; + + /** Number of bytes in this channel's cell queue; does not include + * lower-layer queueing. + */ + uint64_t bytes_in_queue; }; struct channel_listener_s { @@ -460,6 +475,7 @@ unsigned int channel_num_circuits(channel_t *chan); void channel_set_circid_type(channel_t *chan, crypto_pk_t *identity_rcvd, int consider_identity); void channel_timestamp_client(channel_t *chan); +void channel_update_xmit_queue_size(channel_t *chan); const char * channel_listener_describe_transport(channel_listener_t *chan_l); void channel_listener_dump_statistics(channel_listener_t *chan_l, diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 7df2d35d93..a8222dea35 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -55,6 +55,7 @@ static void channel_tls_common_init(channel_tls_t *tlschan); static void channel_tls_close_method(channel_t *chan); static const char * channel_tls_describe_transport_method(channel_t *chan); static void channel_tls_free_method(channel_t *chan); +static double channel_tls_get_overhead_estimate_method(channel_t *chan); static int channel_tls_get_remote_addr_method(channel_t *chan, tor_addr_t *addr_out); static int @@ -69,6 +70,7 @@ channel_tls_matches_extend_info_method(channel_t *chan, static int channel_tls_matches_target_method(channel_t *chan, const tor_addr_t *target); static int channel_tls_num_cells_writeable_method(channel_t *chan); +static size_t channel_tls_num_bytes_queued_method(channel_t *chan); static int channel_tls_write_cell_method(channel_t *chan, cell_t *cell); static int channel_tls_write_packed_cell_method(channel_t *chan, @@ -118,6 +120,7 @@ channel_tls_common_init(channel_tls_t *tlschan) chan->close = channel_tls_close_method; chan->describe_transport = channel_tls_describe_transport_method; chan->free = channel_tls_free_method; + chan->get_overhead_estimate = channel_tls_get_overhead_estimate_method; chan->get_remote_addr = channel_tls_get_remote_addr_method; chan->get_remote_descr = channel_tls_get_remote_descr_method; chan->get_transport_name = channel_tls_get_transport_name_method; @@ -125,6 +128,7 @@ channel_tls_common_init(channel_tls_t *tlschan) chan->is_canonical = channel_tls_is_canonical_method; chan->matches_extend_info = channel_tls_matches_extend_info_method; chan->matches_target = channel_tls_matches_target_method; + chan->num_bytes_queued = channel_tls_num_bytes_queued_method; chan->num_cells_writeable = channel_tls_num_cells_writeable_method; chan->write_cell = channel_tls_write_cell_method; chan->write_packed_cell = channel_tls_write_packed_cell_method; @@ -437,6 +441,40 @@ channel_tls_free_method(channel_t *chan) } } +/** + * Get an estimate of the average TLS overhead for the upper layer + */ + +static double +channel_tls_get_overhead_estimate_method(channel_t *chan) +{ + double overhead = 1.0f; + channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan); + + tor_assert(tlschan); + tor_assert(tlschan->conn); + + /* Just return 1.0f if we don't have sensible data */ + if (tlschan->conn->bytes_xmitted > 0 && + tlschan->conn->bytes_xmitted_by_tls >= + tlschan->conn->bytes_xmitted) { + overhead = ((double)(tlschan->conn->bytes_xmitted_by_tls)) / + ((double)(tlschan->conn->bytes_xmitted)); + + /* + * Never estimate more than 2.0; otherwise we get silly large estimates + * at the very start of a new TLS connection. + */ + if (overhead > 2.0f) overhead = 2.0f; + } + + log_debug(LD_CHANNEL, + "Estimated overhead ratio for TLS chan " U64_FORMAT " is %f", + U64_PRINTF_ARG(chan->global_identifier), overhead); + + return overhead; +} + /** * Get the remote address of a channel_tls_t * @@ -675,6 +713,22 @@ channel_tls_matches_target_method(channel_t *chan, return tor_addr_eq(&(tlschan->conn->real_addr), target); } +/** + * Tell the upper layer how many bytes we have queued and not yet + * sent. + */ + +static size_t +channel_tls_num_bytes_queued_method(channel_t *chan) +{ + channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan); + + tor_assert(tlschan); + tor_assert(tlschan->conn); + + return connection_get_outbuf_len(TO_CONN(tlschan->conn)); +} + /** * Tell the upper layer how many cells we can accept to write * diff --git a/src/or/connection.c b/src/or/connection.c index 4a3bd2cf03..525f4b5e85 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -3839,6 +3839,8 @@ connection_handle_write_impl(connection_t *conn, int force) tor_tls_get_n_raw_bytes(or_conn->tls, &n_read, &n_written); log_debug(LD_GENERAL, "After TLS write of %d: %ld read, %ld written", result, (long)n_read, (long)n_written); + or_conn->bytes_xmitted += result; + or_conn->bytes_xmitted_by_tls += n_written; /* So we notice bytes were written even on error */ /* XXXX024 This cast is safe since we can never write INT_MAX bytes in a * single set of TLS operations. But it looks kinda ugly. If we refactor diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 6b276cc3a1..445335b43a 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -583,6 +583,9 @@ connection_or_flushed_some(or_connection_t *conn) { size_t datalen; + /* The channel will want to update its estimated queue size */ + channel_update_xmit_queue_size(TLS_CHAN_TO_BASE(conn->chan)); + /* If we're under the low water mark, add cells until we're just over the * high water mark. */ datalen = connection_get_outbuf_len(TO_CONN(conn)); diff --git a/src/or/or.h b/src/or/or.h index bdcb29ea11..320931d471 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1529,6 +1529,12 @@ typedef struct or_connection_t { /** Last emptied write token bucket in msec since midnight; only used if * TB_EMPTY events are enabled. */ uint32_t write_emptied_time; + + /* + * Count the number of bytes flushed out on this orconn, and the number of + * bytes TLS actually sent - used for overhead estimation for scheduling. + */ + uint64_t bytes_xmitted, bytes_xmitted_by_tls; } or_connection_t; /** Subtype of connection_t for an "edge connection" -- that is, an entry (ap) From 2fc3da3ff51f3fe7fa5338c2d6b52a06ed9c4f19 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 11 Nov 2013 21:50:16 -0800 Subject: [PATCH 028/184] Implement global queue size query in channel.c --- src/or/channel.c | 10 ++++++++++ src/or/channel.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/or/channel.c b/src/or/channel.c index f729a17be9..e2d102d2ac 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -4035,6 +4035,16 @@ channel_mark_outgoing(channel_t *chan) * Flow control queries * ***********************/ +/* + * Get the latest estimate for the total queue size of all open channels + */ + +uint64_t +channel_get_global_queue_estimate(void) +{ + return estimated_total_queue_size; +} + /* * Estimate the number of writeable cells * diff --git a/src/or/channel.h b/src/or/channel.h index 388c729953..18f7cfc01e 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -484,6 +484,7 @@ void channel_listener_dump_transport_statistics(channel_listener_t *chan_l, int severity); /* Flow control queries */ +uint64_t channel_get_global_queue_estimate(void); int channel_num_cells_writeable(channel_t *chan); /* Timestamp queries */ From f314d9509cae7acb9a692895c709e7771c6321f0 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 13 Nov 2013 16:50:26 -0800 Subject: [PATCH 029/184] Fix return values from channel_flush_some_cells() to correctly count cells directly written by channel_flush_from_first_active_circuit() --- src/or/channel.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index e2d102d2ac..dddd7ab1f1 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -175,6 +175,7 @@ static cell_queue_entry_t * cell_queue_entry_new_fixed(cell_t *cell); static cell_queue_entry_t * cell_queue_entry_new_var(var_cell_t *var_cell); +static int chan_cell_queue_len(const chan_cell_queue_t *queue); static int is_destroy_cell(channel_t *chan, const cell_queue_entry_t *q, circid_t *circid_out); @@ -2218,6 +2219,7 @@ channel_flush_some_cells(channel_t *chan, ssize_t num_cells) unsigned int unlimited = 0; ssize_t flushed = 0; int num_cells_from_circs, clamped_num_cells; + int q_len_before, q_len_after; tor_assert(chan); @@ -2243,14 +2245,44 @@ channel_flush_some_cells(channel_t *chan, ssize_t num_cells) clamped_num_cells = (int)(num_cells - flushed); } } + + /* + * Keep track of the change in queue size; we have to count cells + * channel_flush_from_first_active_circuit() writes out directly, + * but not double-count ones we might get later in + * channel_flush_some_cells_from_outgoing_queue() + */ + q_len_before = chan_cell_queue_len(&(chan->outgoing_queue)); + /* Try to get more cells from any active circuits */ num_cells_from_circs = channel_flush_from_first_active_circuit( chan, clamped_num_cells); - /* If it claims we got some, process the queue again */ + q_len_after = chan_cell_queue_len(&(chan->outgoing_queue)); + + /* + * If it claims we got some, adjust the flushed counter and consider + * processing the queue again + */ if (num_cells_from_circs > 0) { - flushed += channel_flush_some_cells_from_outgoing_queue(chan, - (unlimited ? -1 : num_cells - flushed)); + /* + * Adjust flushed by the number of cells counted in + * num_cells_from_circs that didn't go to the cell queue. + */ + + if (q_len_after > q_len_before) { + num_cells_from_circs -= (q_len_after - q_len_before); + if (num_cells_from_circs < 0) num_cells_from_circs = 0; + } + + flushed += num_cells_from_circs; + + /* Now process the queue if necessary */ + + if (q_len_after > q_len_before && num_cells < flushed) { + flushed += channel_flush_some_cells_from_outgoing_queue(chan, + (unlimited ? -1 : num_cells - flushed)); + } } } } From 4f567c8cc8cd68a8ca9bb93fc57d518d7eb55cf0 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 14 Nov 2013 04:45:16 -0800 Subject: [PATCH 030/184] Let the new scheduler handle writes --- src/or/relay.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/or/relay.c b/src/or/relay.c index 2c16e4acca..b653616c2c 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -2871,16 +2871,6 @@ append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan, /* New way: mark this as having waiting cells for the scheduler */ scheduler_channel_has_waiting_cells(chan); - - /* TODO remove this once scheduler does it */ - if (!channel_has_queued_writes(chan)) { - /* There is no data at all waiting to be sent on the outbuf. Add a - * cell, so that we can notice when it gets flushed, flushed_some can - * get called, and we can start putting more data onto the buffer then. - */ - log_debug(LD_GENERAL, "Primed a buffer."); - channel_flush_from_first_active_circuit(chan, 1); - } } /** Append an encoded value of addr to payload_out, which must From 1275002a46dfb131f6db5c0fe28bc1828db327e2 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 14 Nov 2013 04:45:47 -0800 Subject: [PATCH 031/184] Schedule according to a queue size heuristic --- src/or/channel.c | 4 + src/or/scheduler.c | 190 +++++++++++++++++++++++++++++++++++++++------ src/or/scheduler.h | 3 + 3 files changed, 172 insertions(+), 25 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index dddd7ab1f1..7ed38945ba 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -4563,6 +4563,8 @@ channel_update_xmit_queue_size(channel_t *chan) U64_FORMAT ", new size is " U64_FORMAT, U64_PRINTF_ARG(adj), U64_PRINTF_ARG(chan->global_identifier), U64_PRINTF_ARG(estimated_total_queue_size)); + /* Tell the scheduler we're increasing the queue size */ + scheduler_adjust_queue_size(chan, 1, adj); } } else if (queued < chan->bytes_queued_for_xmit) { adj = chan->bytes_queued_for_xmit - queued; @@ -4585,6 +4587,8 @@ channel_update_xmit_queue_size(channel_t *chan) U64_FORMAT ", new size is " U64_FORMAT, U64_PRINTF_ARG(adj), U64_PRINTF_ARG(chan->global_identifier), U64_PRINTF_ARG(estimated_total_queue_size)); + /* Tell the scheduler we're decreasing the queue size */ + scheduler_adjust_queue_size(chan, -1, adj); } } } diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 1c6a2fdecb..1baf3750d6 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -7,7 +7,10 @@ **/ #include "or.h" + +#define TOR_CHANNEL_INTERNAL_ /* For channel_flush_some_cells() */ #include "channel.h" + #include "compat_libevent.h" #include "scheduler.h" @@ -17,6 +20,9 @@ #include #endif +#define SCHED_Q_LOW_WATER 16384 +#define SCHED_Q_HIGH_WATER (2 * SCHED_Q_LOW_WATER) + /* * Write scheduling works by keeping track of lists of channels that can * accept cells, and have cells to write. From the scheduler's perspective, @@ -118,6 +124,19 @@ static smartlist_t *channels_pending = NULL; static struct event *run_sched_ev = NULL; +/* + * Queue heuristic; this is not the queue size, but an 'effective queuesize' + * that ages out contributions from stalled channels. + */ + +static uint64_t queue_heuristic = 0; + +/* + * Timestamp for last queue heuristic update + */ + +static time_t queue_heuristic_timestamp = 0; + /* Scheduler static function declarations */ static void scheduler_evt_callback(evutil_socket_t fd, @@ -127,6 +146,8 @@ static void scheduler_retrigger(void); #if 0 static void scheduler_trigger(void); #endif +static uint64_t scheduler_get_queue_heuristic(void); +static void scheduler_update_queue_heuristic(time_t now); /* Scheduler function implementations */ @@ -281,6 +302,8 @@ scheduler_init(void) channels_waiting_for_cells = smartlist_new(); channels_waiting_to_write = smartlist_new(); channels_pending = smartlist_new(); + queue_heuristic = 0; + queue_heuristic_timestamp = approx_time(); } /** Check if there's more scheduling work */ @@ -290,7 +313,8 @@ scheduler_more_work(void) { tor_assert(channels_pending); - return (smartlist_len(channels_pending) > 0) ? 1 : 0; + return ((scheduler_get_queue_heuristic() < SCHED_Q_LOW_WATER) && + ((smartlist_len(channels_pending) > 0))) ? 1 : 0; } /** Retrigger the scheduler in a way safe to use from the callback */ @@ -324,39 +348,70 @@ void scheduler_run(void) { smartlist_t *tmp = NULL; - int n_cells; + int n_cells, n_chans_before, n_chans_after; + uint64_t q_len_before, q_heur_before, q_len_after, q_heur_after; ssize_t flushed, flushed_this_time; log_debug(LD_SCHED, "We have a chance to run the scheduler"); - tmp = channels_pending; - channels_pending = smartlist_new(); + if (scheduler_get_queue_heuristic() < SCHED_Q_LOW_WATER) { + n_chans_before = smartlist_len(channels_pending); + q_len_before = channel_get_global_queue_estimate(); + q_heur_before = scheduler_get_queue_heuristic(); + tmp = channels_pending; + channels_pending = smartlist_new(); - /* For now, just run the old scheduler on all the chans in the list */ + /* + * For now, just run the old scheduler on all the chans in the list, until + * we hit the high-water mark. TODO real channel priority API + */ - SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { - n_cells = channel_num_cells_writeable(chan); - if (n_cells > 0) { - log_debug(LD_SCHED, - "Scheduler saw pending channel " U64_FORMAT " at %p with " - "%d cells writeable", - U64_PRINTF_ARG(chan->global_identifier), chan, n_cells); + SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { + if (scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER) { + n_cells = channel_num_cells_writeable(chan); + if (n_cells > 0) { + log_debug(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p with " + "%d cells writeable", + U64_PRINTF_ARG(chan->global_identifier), chan, n_cells); - flushed = 0; - while (flushed < n_cells) { - flushed_this_time = channel_flush_some_cells(chan, n_cells - flushed); - if (flushed_this_time <= 0) break; - flushed += flushed_this_time; + flushed = 0; + while (flushed < n_cells) { + flushed_this_time = + channel_flush_some_cells(chan, n_cells - flushed); + if (flushed_this_time <= 0) break; + flushed += flushed_this_time; + } + + log_debug(LD_SCHED, + "Scheduler flushed %d cells onto pending channel " + U64_FORMAT " at %p", + flushed, U64_PRINTF_ARG(chan->global_identifier), chan); + } else { + log_info(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p with " + "no cells writeable", + U64_PRINTF_ARG(chan->global_identifier), chan); + } + } else { + /* Not getting it this round; put it back on the list */ + smartlist_add(channels_pending, chan); } - } else { - log_info(LD_SCHED, - "Scheduler saw pending channel " U64_FORMAT " at %p with " - "no cells writeable", - U64_PRINTF_ARG(chan->global_identifier), chan); - } - } SMARTLIST_FOREACH_END(chan); + } SMARTLIST_FOREACH_END(chan); - smartlist_free(tmp); + smartlist_free(tmp); + + n_chans_after = smartlist_len(channels_pending); + q_len_after = channel_get_global_queue_estimate(); + q_heur_after = scheduler_get_queue_heuristic(); + log_debug(LD_SCHED, + "Scheduler handled %d of %d pending channels, queue size from " + U64_FORMAT " to " U64_FORMAT ", queue heuristic from " + U64_FORMAT " to " U64_FORMAT, + n_chans_before - n_chans_after, n_chans_before, + U64_PRINTF_ARG(q_len_before), U64_PRINTF_ARG(q_len_after), + U64_PRINTF_ARG(q_heur_before), U64_PRINTF_ARG(q_heur_after)); + } } /** Trigger the scheduling event so we run the scheduler later */ @@ -420,3 +475,88 @@ scheduler_channel_wants_writes(channel_t *chan) if (became_pending) scheduler_retrigger(); } +/** + * Notify the scheduler of a queue size adjustment, to recalculate the + * queue heuristic. + */ + +void +scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj) +{ + time_t now = approx_time(); + + log_debug(LD_SCHED, + "Queue size adjustment by %s" U64_FORMAT " for channel " + U64_FORMAT, + (dir >= 0) ? "+" : "-", + U64_PRINTF_ARG(adj), + U64_PRINTF_ARG(chan->global_identifier)); + + /* Get the queue heuristic up to date */ + scheduler_update_queue_heuristic(now); + + /* Adjust as appropriate */ + if (dir >= 0) { + /* Increasing it */ + queue_heuristic += adj; + } else { + /* Decreasing it */ + if (queue_heuristic > adj) queue_heuristic -= adj; + else queue_heuristic = 0; + } + + log_debug(LD_SCHED, + "Queue heuristic is now " U64_FORMAT, + U64_PRINTF_ARG(queue_heuristic)); +} + +/** + * Query the current value of the queue heuristic + */ + +static uint64_t +scheduler_get_queue_heuristic(void) +{ + time_t now = approx_time(); + + scheduler_update_queue_heuristic(now); + + return queue_heuristic; +} + +/** + * Adjust the queue heuristic value to the present time + */ + +static void +scheduler_update_queue_heuristic(time_t now) +{ + time_t diff; + + if (queue_heuristic_timestamp == 0) { + /* + * Nothing we can sensibly do; must not have been initted properly. + * Oh well. + */ + queue_heuristic_timestamp = now; + } else if (queue_heuristic_timestamp < now) { + diff = now - queue_heuristic_timestamp; + /* + * This is a simple exponential age-out; the other proposed alternative + * was a linear age-out using the bandwidth history in rephist.c; I'm + * going with this out of concern that if an adversary can jam the + * scheduler long enough, it would cause the bandwidth to drop to + * zero and render the aging mechanism ineffective thereafter. + */ + if (0 <= diff && diff < 64) queue_heuristic >>= diff; + else queue_heuristic = 0; + + queue_heuristic_timestamp = now; + + log_debug(LD_SCHED, + "Queue heuristic is now " U64_FORMAT, + U64_PRINTF_ARG(queue_heuristic)); + } + /* else no update needed, or time went backward */ +} + diff --git a/src/or/scheduler.h b/src/or/scheduler.h index b25e36e902..8fe59cb0b3 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -27,5 +27,8 @@ void scheduler_channel_wants_writes(channel_t *chan); /* Notify the scheduler of a channel being closed */ void scheduler_release_channel(channel_t *chan); +/* Notify scheduler of queue size adjustments */ +void scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj); + #endif /* !defined(TOR_SCHEDULER_H) */ From 9db596d2ef441d9293f5341be28150739baac98d Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Sat, 30 Nov 2013 01:25:20 -0800 Subject: [PATCH 032/184] Add cmux support for inter-cmux comparisons --- src/or/circuitmux.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ src/or/circuitmux.h | 6 ++++++ 2 files changed, 54 insertions(+) diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c index 3ca33b03ce..29c3be17d5 100644 --- a/src/or/circuitmux.c +++ b/src/or/circuitmux.c @@ -1951,3 +1951,51 @@ circuitmux_count_queued_destroy_cells(const channel_t *chan, return n_destroy_cells; } +/** + * Compare cmuxes to see which is more preferred; return < 0 if + * cmux_1 has higher priority (i.e., cmux_1 < cmux_2 in the scheduler's + * sort order), > 0 if cmux_2 has higher priority, or 0 if they are + * equally preferred. + * + * If the cmuxes have different cmux policies or the policy does not + * support the cmp_cmux method, return 0. + */ + +int +circuitmux_compare_muxes(circuitmux_t *cmux_1, circuitmux_t *cmux_2) +{ + const circuitmux_policy_t *policy; + + tor_assert(cmux_1); + tor_assert(cmux_2); + + if (cmux_1 == cmux_2) { + /* Equivalent because they're the same cmux */ + return 0; + } + + if (cmux_1->policy && cmux_2->policy) { + if (cmux_1->policy == cmux_2->policy) { + policy = cmux_1->policy; + + if (policy->cmp_cmux) { + /* Okay, we can compare! */ + return policy->cmp_cmux(cmux_1, cmux_1->policy_data, + cmux_2, cmux_2->policy_data); + } else { + /* + * Equivalent because the policy doesn't know how to compare between + * muxes. + */ + return 0; + } + } else { + /* Equivalent because they have different policies */ + return 0; + } + } else { + /* Equivalent because one or both are missing a policy */ + return 0; + } +} + diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h index 2b5fb7e51e..5833ee5eee 100644 --- a/src/or/circuitmux.h +++ b/src/or/circuitmux.h @@ -57,6 +57,9 @@ struct circuitmux_policy_s { /* Choose a circuit */ circuit_t * (*pick_active_circuit)(circuitmux_t *cmux, circuitmux_policy_data_t *pol_data); + /* Optional: channel comparator for use by the scheduler */ + int (*cmp_cmux)(circuitmux_t *cmux_1, circuitmux_policy_data_t *pol_data_1, + circuitmux_t *cmux_2, circuitmux_policy_data_t *pol_data_2); }; /* @@ -148,5 +151,8 @@ void circuitmux_append_destroy_cell(channel_t *chan, void circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux, channel_t *chan); +/* Optional interchannel comparisons for scheduling */ +int circuitmux_compare_muxes(circuitmux_t *cmux_1, circuitmux_t *cmux_2); + #endif /* TOR_CIRCUITMUX_H */ From 700d6e75258fb94819df3da686482dd8565e3691 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Sat, 30 Nov 2013 03:04:36 -0800 Subject: [PATCH 033/184] Add inter-cmux comparison support to circuitmux_ewma.c --- src/or/circuitmux_ewma.c | 58 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/or/circuitmux_ewma.c b/src/or/circuitmux_ewma.c index 3f37d7b9a0..3a2df26771 100644 --- a/src/or/circuitmux_ewma.c +++ b/src/or/circuitmux_ewma.c @@ -187,6 +187,9 @@ ewma_notify_xmit_cells(circuitmux_t *cmux, static circuit_t * ewma_pick_active_circuit(circuitmux_t *cmux, circuitmux_policy_data_t *pol_data); +static int +ewma_cmp_cmux(circuitmux_t *cmux_1, circuitmux_policy_data_t *pol_data_1, + circuitmux_t *cmux_2, circuitmux_policy_data_t *pol_data_2); /*** EWMA global variables ***/ @@ -209,7 +212,8 @@ circuitmux_policy_t ewma_policy = { /*.notify_circ_inactive =*/ ewma_notify_circ_inactive, /*.notify_set_n_cells =*/ NULL, /* EWMA doesn't need this */ /*.notify_xmit_cells =*/ ewma_notify_xmit_cells, - /*.pick_active_circuit =*/ ewma_pick_active_circuit + /*.pick_active_circuit =*/ ewma_pick_active_circuit, + /*.cmp_cmux =*/ ewma_cmp_cmux }; /*** EWMA method implementations using the below EWMA helper functions ***/ @@ -453,6 +457,58 @@ ewma_pick_active_circuit(circuitmux_t *cmux, return circ; } +/** + * Compare two EWMA cmuxes, and return -1, 0 or 1 to indicate which should + * be more preferred - see circuitmux_compare_muxes() of circuitmux.c. + */ + +static int +ewma_cmp_cmux(circuitmux_t *cmux_1, circuitmux_policy_data_t *pol_data_1, + circuitmux_t *cmux_2, circuitmux_policy_data_t *pol_data_2) +{ + ewma_policy_data_t *p1 = NULL, *p2 = NULL; + cell_ewma_t *ce1 = NULL, *ce2 = NULL; + + tor_assert(cmux_1); + tor_assert(pol_data_1); + tor_assert(cmux_2); + tor_assert(pol_data_2); + + p1 = TO_EWMA_POL_DATA(pol_data_1); + p2 = TO_EWMA_POL_DATA(pol_data_1); + + if (p1 != p2) { + /* Get the head cell_ewma_t from each queue */ + if (smartlist_len(p1->active_circuit_pqueue) > 0) { + ce1 = smartlist_get(p1->active_circuit_pqueue, 0); + } + + if (smartlist_len(p2->active_circuit_pqueue) > 0) { + ce2 = smartlist_get(p2->active_circuit_pqueue, 0); + } + + /* Got both of them? */ + if (ce1 != NULL && ce2 != NULL) { + /* Pick whichever one has the better best circuit */ + return compare_cell_ewma_counts(ce1, ce2); + } else { + if (ce1 != NULL ) { + /* We only have a circuit on cmux_1, so prefer it */ + return -1; + } else if (ce2 != NULL) { + /* We only have a circuit on cmux_2, so prefer it */ + return 1; + } else { + /* No circuits at all; no preference */ + return 0; + } + } + } else { + /* We got identical params */ + return 0; + } +} + /** Helper for sorting cell_ewma_t values in their priority queue. */ static int compare_cell_ewma_counts(const void *p1, const void *p2) From 55907da28dd933a7724935a8a4676aec1b54059d Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 2 Dec 2013 01:05:28 -0800 Subject: [PATCH 034/184] Sort the scheduler's channel list by cmux comparisons --- src/or/scheduler.c | 53 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 1baf3750d6..b45df3ebfc 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -139,6 +139,7 @@ static time_t queue_heuristic_timestamp = 0; /* Scheduler static function declarations */ +static int scheduler_compare_channels(const void **c1_v, const void **c2_v); static void scheduler_evt_callback(evutil_socket_t fd, short events, void *arg); static int scheduler_more_work(void); @@ -180,6 +181,52 @@ scheduler_free_all(void) } } +/** + * Comparison function to use when sorting pending channels + */ + +static int +scheduler_compare_channels(const void **c1_v, const void **c2_v) +{ + channel_t *c1 = NULL, *c2 = NULL; + /* These are a workaround for -Wbad-function-cast throwing a fit */ + const circuitmux_policy_t *p1, *p2; + uintptr_t p1_i, p2_i; + + tor_assert(c1_v); + tor_assert(c2_v); + + c1 = (channel_t *)(*c1_v); + c2 = (channel_t *)(*c2_v); + + tor_assert(c1); + tor_assert(c2); + + if (c1 != c2) { + if (circuitmux_get_policy(c1->cmux) == + circuitmux_get_policy(c2->cmux)) { + /* Same cmux policy, so use the mux comparison */ + return circuitmux_compare_muxes(c1->cmux, c2->cmux); + } else { + /* + * Different policies; not important to get this edge case perfect + * because the current code never actually gives different channels + * different cmux policies anyway. Just use this arbitrary but + * definite choice. + */ + p1 = circuitmux_get_policy(c1->cmux); + p2 = circuitmux_get_policy(c2->cmux); + p1_i = (uintptr_t)p1; + p2_i = (uintptr_t)p2; + + return (p1_i < p2_i) ? -1 : 1; + } + } else { + /* c1 == c2, so always equal */ + return 0; + } +} + /* * Scheduler event callback; this should get triggered once per event loop * if any scheduling work was created during the event loop. @@ -362,9 +409,11 @@ scheduler_run(void) channels_pending = smartlist_new(); /* - * For now, just run the old scheduler on all the chans in the list, until - * we hit the high-water mark. TODO real channel priority API + * UGLY HACK: sort the list on each invocation + * + * TODO smarter data structures */ + smartlist_sort(tmp, scheduler_compare_channels); SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { if (scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER) { From 63bb9a795e3a05620831512fe7d70690e5f5fb5a Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 2 Dec 2013 01:05:53 -0800 Subject: [PATCH 035/184] Fix compiler warning --- src/or/scheduler.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index b45df3ebfc..c4c26329ba 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -435,7 +435,8 @@ scheduler_run(void) log_debug(LD_SCHED, "Scheduler flushed %d cells onto pending channel " U64_FORMAT " at %p", - flushed, U64_PRINTF_ARG(chan->global_identifier), chan); + (int)flushed, U64_PRINTF_ARG(chan->global_identifier), + chan); } else { log_info(LD_SCHED, "Scheduler saw pending channel " U64_FORMAT " at %p with " From 283646fd9089a337003dcd7c020e0820c7270662 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 4 Dec 2013 21:43:13 -0800 Subject: [PATCH 036/184] Fix scheduler assertion in circuitmux/destroy_cell_queue unit test --- src/test/test_circuitmux.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c index a3cacc4cc7..c1c8f77641 100644 --- a/src/test/test_circuitmux.c +++ b/src/test/test_circuitmux.c @@ -8,6 +8,7 @@ #include "channel.h" #include "circuitmux.h" #include "relay.h" +#include "scheduler.h" #include "test.h" /* XXXX duplicated function from test_circuitlist.c */ @@ -36,6 +37,8 @@ test_cmux_destroy_cell_queue(void *arg) cell_queue_t *cq = NULL; packed_cell_t *pc = NULL; + scheduler_init(); + #ifdef ENABLE_MEMPOOLS init_cell_pool(); #endif /* ENABLE_MEMPOOLS */ From 3530825c53b7a28cf894b64e6d97aa90d0acccae Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 6 Dec 2013 00:04:12 -0800 Subject: [PATCH 037/184] Eliminate some unnecessary smartlists in scheduler.c --- src/or/channel.c | 3 ++ src/or/channel.h | 23 ++++++++++ src/or/scheduler.c | 112 ++++++++++++++++++--------------------------- 3 files changed, 70 insertions(+), 68 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index 7ed38945ba..60e59c7937 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -806,6 +806,9 @@ channel_init(channel_t *chan) /* It hasn't been open yet. */ chan->has_been_open = 0; + + /* Scheduler state is idle */ + chan->scheduler_state = SCHED_CHAN_IDLE; } /** diff --git a/src/or/channel.h b/src/or/channel.h index 18f7cfc01e..ced717a531 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -57,6 +57,29 @@ struct channel_s { CHANNEL_CLOSE_FOR_ERROR } reason_for_closing; + /** State variable for use by the scheduler */ + enum { + /* + * The channel is not open, or it has a full output buffer but no queued + * cells. + */ + SCHED_CHAN_IDLE = 0, + /* + * The channel has space on its output buffer to write, but no queued + * cells. + */ + SCHED_CHAN_WAITING_FOR_CELLS, + /* + * The scheduler has queued cells but no output buffer space to write. + */ + SCHED_CHAN_WAITING_TO_WRITE, + /* + * The scheduler has both queued cells and output buffer space, and is + * eligible for the scheduler loop. + */ + SCHED_CHAN_PENDING + } scheduler_state; + /** Timestamps for both cell channels and listeners */ time_t timestamp_created; /* Channel created */ time_t timestamp_active; /* Any activity */ diff --git a/src/or/scheduler.c b/src/or/scheduler.c index c4c26329ba..c1b64dfbb6 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -24,12 +24,13 @@ #define SCHED_Q_HIGH_WATER (2 * SCHED_Q_LOW_WATER) /* - * Write scheduling works by keeping track of lists of channels that can + * Write scheduling works by keeping track of which channels can * accept cells, and have cells to write. From the scheduler's perspective, * a channel can be in four possible states: * * 1.) Not open for writes, no cells to send - * - Not much to do here, and the channel will appear in neither list. + * - Not much to do here, and the channel will have scheduler_state == + * SCHED_CHAN_IDLE * - Transitions from: * - Open for writes/has cells by simultaneously draining all circuit * queues and filling the output buffer. @@ -41,7 +42,8 @@ * * 2.) Open for writes, no cells to send * - Not much here either; this will be the state an idle but open channel - * can be expected to settle in. + * can be expected to settle in. It will have scheduler_state == + * SCHED_CHAN_WAITING_FOR_CELLS * - Transitions from: * - Not open for writes/no cells by flushing some of the output * buffer. @@ -55,6 +57,7 @@ * 3.) Not open for writes, cells to send * - This is the state of a busy circuit limited by output bandwidth; * cells have piled up in the circuit queues waiting to be relayed. + * The channel will have scheduler_state == SCHED_CHAN_WAITING_TO_WRITE. * - Transitions from: * - Not open for writes/no cells by arrival of cells on an attached * circuit @@ -66,7 +69,8 @@ * * 4.) Open for writes, cells to send * - This connection is ready to relay some cells and waiting for - * the scheduler to choose it + * the scheduler to choose it. The channel will have scheduler_state == + * SCHED_CHAN_PENDING. * - Transitions from: * - Not open for writes/has cells by the connection_or_flushed_some() * path @@ -91,29 +95,11 @@ /* Scheduler global data structures */ /* - * We keep lists of channels that either have cells queued, can accept - * writes, or both (states 2, 3 and 4 above) - no explicit list of state - * 1 channels is kept, so we don't have to worry about registering new - * channels here or anything. The scheduler will learn about them when - * it needs to. We can check how many channels in state 4 in O(1), so - * the test whether we have anything to do in scheduler_run() is fast - * and there's no harm in calling it opportunistically whenever we get - * the chance. - * - * Note that it takes time O(n) to search for a channel in these smartlists - * or move one; I don't think the number of channels on a relay will be large - * enough for this to be a severe problem, but this would benefit from using - * a doubly-linked list rather than smartlist_t, together with a hash map from - * channel identifiers to pointers to list entries, so we can perform those - * operations in O(log(n)). + * We keep a list of channels that are pending - i.e, have cells to write + * and can accept them to send. The enum scheduler_state in channel_t + * is reserved for our use. */ -/* List of channels that can write but have no cells (state 2 above) */ -static smartlist_t *channels_waiting_for_cells = NULL; - -/* List of channels with cells waiting to write (state 3 above) */ -static smartlist_t *channels_waiting_to_write = NULL; - /* List of channels that can write and have cells (pending work) */ static smartlist_t *channels_pending = NULL; @@ -165,16 +151,6 @@ scheduler_free_all(void) run_sched_ev = NULL; } - if (channels_waiting_for_cells) { - smartlist_free(channels_waiting_for_cells); - channels_waiting_for_cells = NULL; - } - - if (channels_waiting_to_write) { - smartlist_free(channels_waiting_to_write); - channels_waiting_to_write = NULL; - } - if (channels_pending) { smartlist_free(channels_pending); channels_pending = NULL; @@ -255,19 +231,18 @@ void scheduler_channel_doesnt_want_writes(channel_t *chan) { tor_assert(chan); - tor_assert(channels_waiting_for_cells); - tor_assert(channels_waiting_to_write); + tor_assert(channels_pending); /* If it's already in pending, we can put it in waiting_to_write */ - if (smartlist_contains(channels_pending, chan)) { + if (chan->scheduler_state == SCHED_CHAN_PENDING) { /* * It's in channels_pending, so it shouldn't be in any of * the other lists. It can't write any more, so it goes to * channels_waiting_to_write. */ smartlist_remove(channels_pending, chan); - smartlist_add(channels_waiting_to_write, chan); + chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p went from pending " "to waiting_to_write", @@ -278,8 +253,8 @@ scheduler_channel_doesnt_want_writes(channel_t *chan) * either not in any of the lists (nothing to do) or it's already in * waiting_for_cells (remove it, can't write any more). */ - if (smartlist_contains(channels_waiting_for_cells, chan)) { - smartlist_remove(channels_waiting_for_cells, chan); + if (chan->scheduler_state == SCHED_CHAN_WAITING_FOR_CELLS) { + chan->scheduler_state = SCHED_CHAN_IDLE; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p left waiting_for_cells", U64_PRINTF_ARG(chan->global_identifier), chan); @@ -295,18 +270,16 @@ scheduler_channel_has_waiting_cells(channel_t *chan) int became_pending = 0; tor_assert(chan); - tor_assert(channels_waiting_for_cells); - tor_assert(channels_waiting_to_write); tor_assert(channels_pending); /* First, check if this one also writeable */ - if (smartlist_contains(channels_waiting_for_cells, chan)) { + if (chan->scheduler_state == SCHED_CHAN_WAITING_FOR_CELLS) { /* * It's in channels_waiting_for_cells, so it shouldn't be in any of * the other lists. It has waiting cells now, so it goes to * channels_pending. */ - smartlist_remove(channels_waiting_for_cells, chan); + chan->scheduler_state = SCHED_CHAN_PENDING; smartlist_add(channels_pending, chan); log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p went from waiting_for_cells " @@ -319,9 +292,9 @@ scheduler_channel_has_waiting_cells(channel_t *chan) * either not in any of the lists (we add it to waiting_to_write) * or it's already in waiting_to_write or pending (we do nothing) */ - if (!(smartlist_contains(channels_waiting_to_write, chan) || - smartlist_contains(channels_pending, chan))) { - smartlist_add(channels_waiting_to_write, chan); + if (!(chan->scheduler_state == SCHED_CHAN_WAITING_TO_WRITE || + chan->scheduler_state == SCHED_CHAN_PENDING)) { + chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p entered waiting_to_write", U64_PRINTF_ARG(chan->global_identifier), chan); @@ -346,8 +319,6 @@ scheduler_init(void) run_sched_ev = tor_event_new(tor_libevent_get_base(), -1, 0, scheduler_evt_callback, NULL); - channels_waiting_for_cells = smartlist_new(); - channels_waiting_to_write = smartlist_new(); channels_pending = smartlist_new(); queue_heuristic = 0; queue_heuristic_timestamp = approx_time(); @@ -379,14 +350,13 @@ void scheduler_release_channel(channel_t *chan) { tor_assert(chan); - - tor_assert(channels_waiting_for_cells); - tor_assert(channels_waiting_to_write); tor_assert(channels_pending); - smartlist_remove(channels_waiting_for_cells, chan); - smartlist_remove(channels_waiting_to_write, chan); - smartlist_remove(channels_pending, chan); + if (chan->scheduler_state == SCHED_CHAN_PENDING) { + smartlist_remove(channels_pending, chan); + } + + chan->scheduler_state = SCHED_CHAN_IDLE; } /** Run the scheduling algorithm if necessary */ @@ -432,6 +402,13 @@ scheduler_run(void) flushed += flushed_this_time; } + if (flushed < n_cells) { + /* We ran out of cells to flush */ + chan->scheduler_state = SCHED_CHAN_WAITING_FOR_CELLS; + } else { + /* TODO get this right */ + } + log_debug(LD_SCHED, "Scheduler flushed %d cells onto pending channel " U64_FORMAT " at %p", @@ -442,10 +419,13 @@ scheduler_run(void) "Scheduler saw pending channel " U64_FORMAT " at %p with " "no cells writeable", U64_PRINTF_ARG(chan->global_identifier), chan); + /* Put it back to WAITING_TO_WRITE */ + chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; } } else { /* Not getting it this round; put it back on the list */ smartlist_add(channels_pending, chan); + /* It states in SCHED_CHAN_PENDING */ } } SMARTLIST_FOREACH_END(chan); @@ -486,18 +466,15 @@ scheduler_channel_wants_writes(channel_t *chan) int became_pending = 0; tor_assert(chan); - tor_assert(channels_waiting_for_cells); - tor_assert(channels_waiting_to_write); tor_assert(channels_pending); /* If it's already in waiting_to_write, we can put it in pending */ - if (smartlist_contains(channels_waiting_to_write, chan)) { + if (chan->scheduler_state == SCHED_CHAN_WAITING_TO_WRITE) { /* - * It's in channels_waiting_to_write, so it shouldn't be in any of - * the other lists. It can write now, so it goes to channels_pending. + * It can write now, so it goes to channels_pending. */ - smartlist_remove(channels_waiting_to_write, chan); smartlist_add(channels_pending, chan); + chan->scheduler_state = SCHED_CHAN_PENDING; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p went from waiting_to_write " "to pending", @@ -505,13 +482,12 @@ scheduler_channel_wants_writes(channel_t *chan) became_pending = 1; } else { /* - * It's not in waiting_to_write, so it can't become pending; it's - * either not in any of the lists (we add it to waiting_for_cells) - * or it's already in waiting_for_cells or pending (we do nothing) + * It's not in SCHED_CHAN_WAITING_TO_WRITE, so it can't become pending; + * it's either idle and goes to WAITING_FOR_CELLS, or it's a no-op. */ - if (!(smartlist_contains(channels_waiting_for_cells, chan) || - smartlist_contains(channels_pending, chan))) { - smartlist_add(channels_waiting_for_cells, chan); + if (!(chan->scheduler_state == SCHED_CHAN_WAITING_FOR_CELLS || + chan->scheduler_state == SCHED_CHAN_PENDING)) { + chan->scheduler_state = SCHED_CHAN_WAITING_FOR_CELLS; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p entered waiting_for_cells", U64_PRINTF_ARG(chan->global_identifier), chan); From ed1927d6bf8b9d60d40f6fbc20f9e1575a35e59d Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 12 Dec 2013 04:22:53 -0800 Subject: [PATCH 038/184] Use a non-stupid data structure in the scheduler --- src/or/channel.h | 3 + src/or/scheduler.c | 194 +++++++++++++++++++++++++++++++-------------- 2 files changed, 139 insertions(+), 58 deletions(-) diff --git a/src/or/channel.h b/src/or/channel.h index ced717a531..023c39d0dd 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -80,6 +80,9 @@ struct channel_s { SCHED_CHAN_PENDING } scheduler_state; + /** Heap index for use by the scheduler */ + int sched_heap_idx; + /** Timestamps for both cell channels and listeners */ time_t timestamp_created; /* Channel created */ time_t timestamp_active; /* Any activity */ diff --git a/src/or/scheduler.c b/src/or/scheduler.c index c1b64dfbb6..4f12696c68 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -23,6 +23,14 @@ #define SCHED_Q_LOW_WATER 16384 #define SCHED_Q_HIGH_WATER (2 * SCHED_Q_LOW_WATER) +/* + * Maximum cells to flush in a single call to channel_flush_some_cells(); + * setting this low means more calls, but too high and we could overshoot + * SCHED_Q_HIGH_WATER. + */ + +#define SCHED_MAX_FLUSH_CELLS 16 + /* * Write scheduling works by keeping track of which channels can * accept cells, and have cells to write. From the scheduler's perspective, @@ -100,7 +108,7 @@ * is reserved for our use. */ -/* List of channels that can write and have cells (pending work) */ +/* Pqueue of channels that can write and have cells (pending work) */ static smartlist_t *channels_pending = NULL; /* @@ -125,7 +133,7 @@ static time_t queue_heuristic_timestamp = 0; /* Scheduler static function declarations */ -static int scheduler_compare_channels(const void **c1_v, const void **c2_v); +static int scheduler_compare_channels(const void *c1_v, const void *c2_v); static void scheduler_evt_callback(evutil_socket_t fd, short events, void *arg); static int scheduler_more_work(void); @@ -162,7 +170,7 @@ scheduler_free_all(void) */ static int -scheduler_compare_channels(const void **c1_v, const void **c2_v) +scheduler_compare_channels(const void *c1_v, const void *c2_v) { channel_t *c1 = NULL, *c2 = NULL; /* These are a workaround for -Wbad-function-cast throwing a fit */ @@ -172,8 +180,8 @@ scheduler_compare_channels(const void **c1_v, const void **c2_v) tor_assert(c1_v); tor_assert(c2_v); - c1 = (channel_t *)(*c1_v); - c2 = (channel_t *)(*c2_v); + c1 = (channel_t *)(c1_v); + c2 = (channel_t *)(c2_v); tor_assert(c1); tor_assert(c2); @@ -241,7 +249,10 @@ scheduler_channel_doesnt_want_writes(channel_t *chan) * the other lists. It can't write any more, so it goes to * channels_waiting_to_write. */ - smartlist_remove(channels_pending, chan); + smartlist_pqueue_remove(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p went from pending " @@ -280,7 +291,10 @@ scheduler_channel_has_waiting_cells(channel_t *chan) * channels_pending. */ chan->scheduler_state = SCHED_CHAN_PENDING; - smartlist_add(channels_pending, chan); + smartlist_pqueue_add(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p went from waiting_for_cells " "to pending", @@ -353,7 +367,10 @@ scheduler_release_channel(channel_t *chan) tor_assert(channels_pending); if (chan->scheduler_state == SCHED_CHAN_PENDING) { - smartlist_remove(channels_pending, chan); + smartlist_pqueue_remove(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); } chan->scheduler_state = SCHED_CHAN_IDLE; @@ -364,10 +381,11 @@ scheduler_release_channel(channel_t *chan) void scheduler_run(void) { - smartlist_t *tmp = NULL; int n_cells, n_chans_before, n_chans_after; uint64_t q_len_before, q_heur_before, q_len_after, q_heur_after; ssize_t flushed, flushed_this_time; + smartlist_t *to_readd = NULL; + channel_t *chan = NULL; log_debug(LD_SCHED, "We have a chance to run the scheduler"); @@ -375,61 +393,118 @@ scheduler_run(void) n_chans_before = smartlist_len(channels_pending); q_len_before = channel_get_global_queue_estimate(); q_heur_before = scheduler_get_queue_heuristic(); - tmp = channels_pending; - channels_pending = smartlist_new(); - /* - * UGLY HACK: sort the list on each invocation - * - * TODO smarter data structures - */ - smartlist_sort(tmp, scheduler_compare_channels); + while (scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER && + smartlist_len(channels_pending) > 0) { + /* Pop off a channel */ + chan = smartlist_pqueue_pop(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx)); + tor_assert(chan); - SMARTLIST_FOREACH_BEGIN(tmp, channel_t *, chan) { - if (scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER) { - n_cells = channel_num_cells_writeable(chan); - if (n_cells > 0) { + /* Figure out how many cells we can write */ + n_cells = channel_num_cells_writeable(chan); + if (n_cells > 0) { + log_debug(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p with " + "%d cells writeable", + U64_PRINTF_ARG(chan->global_identifier), chan, n_cells); + + flushed = 0; + while (flushed < n_cells && + scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER) { + flushed_this_time = + channel_flush_some_cells(chan, + MIN(SCHED_MAX_FLUSH_CELLS, + n_cells - flushed)); + if (flushed_this_time <= 0) break; + flushed += flushed_this_time; + } + + if (flushed < n_cells) { + /* We ran out of cells to flush */ + chan->scheduler_state = SCHED_CHAN_WAITING_FOR_CELLS; log_debug(LD_SCHED, - "Scheduler saw pending channel " U64_FORMAT " at %p with " - "%d cells writeable", - U64_PRINTF_ARG(chan->global_identifier), chan, n_cells); - - flushed = 0; - while (flushed < n_cells) { - flushed_this_time = - channel_flush_some_cells(chan, n_cells - flushed); - if (flushed_this_time <= 0) break; - flushed += flushed_this_time; - } - - if (flushed < n_cells) { - /* We ran out of cells to flush */ - chan->scheduler_state = SCHED_CHAN_WAITING_FOR_CELLS; - } else { - /* TODO get this right */ - } - - log_debug(LD_SCHED, - "Scheduler flushed %d cells onto pending channel " - U64_FORMAT " at %p", - (int)flushed, U64_PRINTF_ARG(chan->global_identifier), + "Channel " U64_FORMAT " at %p " + "entered waiting_for_cells from pending", + U64_PRINTF_ARG(chan->global_identifier), chan); } else { - log_info(LD_SCHED, - "Scheduler saw pending channel " U64_FORMAT " at %p with " - "no cells writeable", - U64_PRINTF_ARG(chan->global_identifier), chan); - /* Put it back to WAITING_TO_WRITE */ - chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; + /* The channel may still have some cells */ + if (channel_more_to_flush(chan)) { + /* The channel goes to either pending or waiting_to_write */ + if (channel_num_cells_writeable(chan) > 0) { + /* Add it back to pending later */ + if (!to_readd) to_readd = smartlist_new(); + smartlist_add(to_readd, chan); + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p " + "is still pending", + U64_PRINTF_ARG(chan->global_identifier), + chan); + } else { + /* It's waiting to be able to write more */ + chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p " + "entered waiting_to_write from pending", + U64_PRINTF_ARG(chan->global_identifier), + chan); + } + } else { + /* No cells left; it can go to idle or waiting_for_cells */ + if (channel_num_cells_writeable(chan) > 0) { + /* + * It can still accept writes, so it goes to + * waiting_for_cells + */ + chan->scheduler_state = SCHED_CHAN_WAITING_FOR_CELLS; + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p " + "entered waiting_for_cells from pending", + U64_PRINTF_ARG(chan->global_identifier), + chan); + } else { + /* + * We exactly filled up the output queue with all available + * cells; go to idle. + */ + chan->scheduler_state = SCHED_CHAN_IDLE; + log_debug(LD_SCHED, + "Channel " U64_FORMAT " at %p " + "become idle from pending", + U64_PRINTF_ARG(chan->global_identifier), + chan); + } + } } - } else { - /* Not getting it this round; put it back on the list */ - smartlist_add(channels_pending, chan); - /* It states in SCHED_CHAN_PENDING */ - } - } SMARTLIST_FOREACH_END(chan); - smartlist_free(tmp); + log_debug(LD_SCHED, + "Scheduler flushed %d cells onto pending channel " + U64_FORMAT " at %p", + (int)flushed, U64_PRINTF_ARG(chan->global_identifier), + chan); + } else { + log_info(LD_SCHED, + "Scheduler saw pending channel " U64_FORMAT " at %p with " + "no cells writeable", + U64_PRINTF_ARG(chan->global_identifier), chan); + /* Put it back to WAITING_TO_WRITE */ + chan->scheduler_state = SCHED_CHAN_WAITING_TO_WRITE; + } + } + + /* Readd any channels we need to */ + if (to_readd) { + SMARTLIST_FOREACH_BEGIN(to_readd, channel_t *, chan) { + chan->scheduler_state = SCHED_CHAN_PENDING; + smartlist_pqueue_add(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); + } SMARTLIST_FOREACH_END(chan); + smartlist_free(to_readd); + } n_chans_after = smartlist_len(channels_pending); q_len_after = channel_get_global_queue_estimate(); @@ -473,7 +548,10 @@ scheduler_channel_wants_writes(channel_t *chan) /* * It can write now, so it goes to channels_pending. */ - smartlist_add(channels_pending, chan); + smartlist_pqueue_add(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); chan->scheduler_state = SCHED_CHAN_PENDING; log_debug(LD_SCHED, "Channel " U64_FORMAT " at %p went from waiting_to_write " From ac1b627e85a41bb734ab22bef268a5145cf83f15 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 12 Dec 2013 04:29:45 -0800 Subject: [PATCH 039/184] Implement scheduler_touch_channel() --- src/or/scheduler.c | 24 ++++++++++++++++++++++++ src/or/scheduler.h | 3 +++ 2 files changed, 27 insertions(+) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 4f12696c68..140ff2fef1 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -579,6 +579,30 @@ scheduler_channel_wants_writes(channel_t *chan) if (became_pending) scheduler_retrigger(); } +/** + * Notify the scheduler that a channel's position in the pqueue may have + * changed + */ + +void +scheduler_touch_channel(channel_t *chan) +{ + tor_assert(chan); + + if (chan->scheduler_state == SCHED_CHAN_PENDING) { + /* Remove and re-add it */ + smartlist_pqueue_remove(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); + smartlist_pqueue_add(channels_pending, + scheduler_compare_channels, + STRUCT_OFFSET(channel_t, sched_heap_idx), + chan); + } + /* else no-op, since it isn't in the queue */ +} + /** * Notify the scheduler of a queue size adjustment, to recalculate the * queue heuristic. diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 8fe59cb0b3..e2d2eb5192 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -30,5 +30,8 @@ void scheduler_release_channel(channel_t *chan); /* Notify scheduler of queue size adjustments */ void scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj); +/* Notify scheduler that a channel's queue position may have changed */ +void scheduler_touch_channel(channel_t *chan); + #endif /* !defined(TOR_SCHEDULER_H) */ From 52cfaa84b7b2f1098a15c431433f486a150cc854 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 12 Dec 2013 04:36:15 -0800 Subject: [PATCH 040/184] Add changes file for global scheduler/cmux refactor --- changes/global_scheduler | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changes/global_scheduler diff --git a/changes/global_scheduler b/changes/global_scheduler new file mode 100644 index 0000000000..d0b8305ceb --- /dev/null +++ b/changes/global_scheduler @@ -0,0 +1,4 @@ + o Major changes: + - Implement a new inter-cmux comparison API, a global high/low watermark + mechanism and a global scheduler loop for transmission prioritization + across all channels as well as among circuits on one channel. From dabf4c33e2c42024aebb305c17e9caf1d6b6c84b Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 13 Dec 2013 05:55:12 -0800 Subject: [PATCH 041/184] Refactor channel_get_cell_queue_entry_size() to avoid an unreachable line for test coverage, and fix a nasty lurking memory bug in channel_flush_some_cells_from_outgoing_queue() --- src/or/channel.c | 55 ++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index 60e59c7937..9e3e452d0b 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -1741,25 +1741,28 @@ cell_queue_entry_new_var(var_cell_t *var_cell) static size_t channel_get_cell_queue_entry_size(channel_t *chan, cell_queue_entry_t *q) { + size_t rv = 0; + tor_assert(chan); tor_assert(q); switch (q->type) { case CELL_QUEUE_FIXED: - return get_cell_network_size(chan->wide_circ_ids); + rv = get_cell_network_size(chan->wide_circ_ids); break; case CELL_QUEUE_VAR: tor_assert(q->u.var.var_cell); - return get_var_cell_header_size(chan->wide_circ_ids) + - q->u.var.var_cell->payload_len; + rv = get_var_cell_header_size(chan->wide_circ_ids) + + q->u.var.var_cell->payload_len; break; case CELL_QUEUE_PACKED: - return get_cell_network_size(chan->wide_circ_ids); + rv = get_cell_network_size(chan->wide_circ_ids); break; default: tor_assert(1); - return 0; } + + return rv; } /** @@ -2309,6 +2312,7 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, ssize_t flushed = 0; cell_queue_entry_t *q = NULL; size_t cell_size; + int free_q = 0, handed_off = 0; tor_assert(chan); tor_assert(chan->write_cell); @@ -2322,6 +2326,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, if (chan->state == CHANNEL_STATE_OPEN) { while ((unlimited || num_cells > flushed) && NULL != (q = TOR_SIMPLEQ_FIRST(&chan->outgoing_queue))) { + free_q = 0; + handed_off = 0; if (1) { /* Figure out how big it is for statistical purposes */ @@ -2339,8 +2345,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, channel_timestamp_xmit(chan); ++(chan->n_cells_xmitted); chan->n_bytes_xmitted += cell_size; - cell_queue_entry_free(q, 1); - q = NULL; + free_q = 1; + handed_off = 1; } /* Else couldn't write it; leave it on the queue */ } else { @@ -2351,8 +2357,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, "(global ID " U64_FORMAT ").", chan, U64_PRINTF_ARG(chan->global_identifier)); /* Throw it away */ - cell_queue_entry_free(q, 0); - q = NULL; + free_q = 1; + handed_off = 0; } break; case CELL_QUEUE_PACKED: @@ -2363,8 +2369,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, channel_timestamp_xmit(chan); ++(chan->n_cells_xmitted); chan->n_bytes_xmitted += cell_size; - cell_queue_entry_free(q, 1); - q = NULL; + free_q = 1; + handed_off = 1; } /* Else couldn't write it; leave it on the queue */ } else { @@ -2375,8 +2381,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, "(global ID " U64_FORMAT ").", chan, U64_PRINTF_ARG(chan->global_identifier)); /* Throw it away */ - cell_queue_entry_free(q, 0); - q = NULL; + free_q = 1; + handed_off = 0; } break; case CELL_QUEUE_VAR: @@ -2387,8 +2393,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, channel_timestamp_xmit(chan); ++(chan->n_cells_xmitted); chan->n_bytes_xmitted += cell_size; - cell_queue_entry_free(q, 1); - q = NULL; + free_q = 1; + handed_off = 1; } /* Else couldn't write it; leave it on the queue */ } else { @@ -2399,8 +2405,8 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, "(global ID " U64_FORMAT ").", chan, U64_PRINTF_ARG(chan->global_identifier)); /* Throw it away */ - cell_queue_entry_free(q, 0); - q = NULL; + free_q = 1; + handed_off = 0; } break; default: @@ -2410,12 +2416,16 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, "(global ID " U64_FORMAT "; ignoring it." " Someone should fix this.", q->type, chan, U64_PRINTF_ARG(chan->global_identifier)); - cell_queue_entry_free(q, 0); - q = NULL; + free_q = 1; + handed_off = 0; } - /* if q got NULLed out, we used it and should remove the queue entry */ - if (!q) { + /* + * if free_q is set, we used it and should remove the queue entry; + * we have to do the free down here so TOR_SIMPLEQ_REMOVE_HEAD isn't + * accessing freed memory + */ + if (free_q) { TOR_SIMPLEQ_REMOVE_HEAD(&chan->outgoing_queue, next); /* * ...and we handed a cell off to the lower layer, so we should @@ -2428,6 +2438,9 @@ channel_flush_some_cells_from_outgoing_queue(channel_t *chan, channel_assert_counter_consistency(); /* Update the channel's queue size too */ chan->bytes_in_queue -= cell_size; + /* Finally, free q */ + cell_queue_entry_free(q, handed_off); + q = NULL; } /* No cell removed from list, so we can't go on any further */ else break; From 8907554cf3e4e87515fecde40ae2088fdded523f Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 13 Dec 2013 06:13:05 -0800 Subject: [PATCH 042/184] Make channel_note_destroy_not_pending() mockable --- src/or/circuitlist.c | 4 ++-- src/or/circuitlist.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 9d72ea1111..7b4eda3fa7 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -302,8 +302,8 @@ channel_note_destroy_pending(channel_t *chan, circid_t id) /** Called to indicate that a DESTROY is no longer pending on chan with * circuit ID id -- typically, because it has been sent. */ -void -channel_note_destroy_not_pending(channel_t *chan, circid_t id) +MOCK_IMPL(void, channel_note_destroy_not_pending, + (channel_t *chan, circid_t id)) { circuit_t *circ = circuit_get_by_circid_channel_even_if_marked(id,chan); if (circ) { diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h index 03934f971e..a8d746be53 100644 --- a/src/or/circuitlist.h +++ b/src/or/circuitlist.h @@ -72,7 +72,8 @@ void circuit_free_all(void); void circuits_handle_oom(size_t current_allocation); void channel_note_destroy_pending(channel_t *chan, circid_t id); -void channel_note_destroy_not_pending(channel_t *chan, circid_t id); +MOCK_DECL(void, channel_note_destroy_not_pending, + (channel_t *chan, circid_t id)); #ifdef CIRCUITLIST_PRIVATE STATIC void circuit_free(circuit_t *circ); From 85ee07085281a1fa47d0b44b0addbb54fcfa6061 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 13 Dec 2013 06:27:00 -0800 Subject: [PATCH 043/184] Make scheduler_release_channel() mockable --- src/or/scheduler.c | 4 ++-- src/or/scheduler.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 140ff2fef1..450eb02903 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -360,8 +360,8 @@ scheduler_retrigger(void) /** Notify the scheduler of a channel being closed */ -void -scheduler_release_channel(channel_t *chan) +MOCK_IMPL(void, +scheduler_release_channel,(channel_t *chan)) { tor_assert(chan); tor_assert(channels_pending); diff --git a/src/or/scheduler.h b/src/or/scheduler.h index e2d2eb5192..9cdf6c1c4d 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -11,6 +11,7 @@ #include "or.h" #include "channel.h" +#include "testsupport.h" /* Global-visibility scheduler functions */ @@ -25,7 +26,7 @@ void scheduler_channel_has_waiting_cells(channel_t *chan); void scheduler_channel_wants_writes(channel_t *chan); /* Notify the scheduler of a channel being closed */ -void scheduler_release_channel(channel_t *chan); +MOCK_DECL(void,scheduler_release_channel,(channel_t *chan)); /* Notify scheduler of queue size adjustments */ void scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj); From 6d886787e3e112693dc8ac9cda021c93eaefee8b Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 13 Dec 2013 06:34:46 -0800 Subject: [PATCH 044/184] Unit tests for channel_get_cell_queue_entry_size() and channel_write_*() functions --- src/test/Makefile.nmake | 2 +- src/test/include.am | 1 + src/test/test.c | 3 + src/test/test_channel.c | 295 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 300 insertions(+), 1 deletion(-) create mode 100644 src/test/test_channel.c diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index 822431f3b8..fceef99564 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -11,7 +11,7 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \ ws2_32.lib advapi32.lib shell32.lib \ crypt32.lib gdi32.lib user32.lib -TEST_OBJECTS = test.obj test_addr.obj test_containers.obj \ +TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_containers.obj \ test_controller_events.ogj test_crypto.obj test_data.obj test_dir.obj \ test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ test_cell_formats.obj test_replay.obj test_introduce.obj tinytest.obj \ diff --git a/src/test/include.am b/src/test/include.am index 77c92f12f8..547f23b733 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -20,6 +20,7 @@ src_test_test_SOURCES = \ src/test/test_addr.c \ src/test/test_buffers.c \ src/test/test_cell_formats.c \ + src/test/test_channel.c \ src/test/test_circuitlist.c \ src/test/test_circuitmux.c \ src/test/test_containers.c \ diff --git a/src/test/test.c b/src/test/test.c index cfbe203d2e..4d4f6f23a4 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1308,6 +1308,8 @@ extern struct testcase_t oom_tests[]; extern struct testcase_t policy_tests[]; extern struct testcase_t status_tests[]; extern struct testcase_t routerset_tests[]; +extern struct testcase_t router_tests[]; +extern struct testcase_t channel_tests[]; static struct testgroup_t testgroups[] = { { "", test_array }, @@ -1340,6 +1342,7 @@ static struct testgroup_t testgroups[] = { { "policy/" , policy_tests }, { "status/" , status_tests }, { "routerset/" , routerset_tests }, + { "channel/", channel_tests }, END_OF_GROUPS }; diff --git a/src/test/test_channel.c b/src/test/test_channel.c new file mode 100644 index 0000000000..c4241db77e --- /dev/null +++ b/src/test/test_channel.c @@ -0,0 +1,295 @@ +/* Copyright (c) 2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#define TOR_CHANNEL_INTERNAL_ +#include "or.h" +#include "channel.h" +/* For channel_note_destroy_not_pending */ +#include "circuitlist.h" +/* For var_cell_free */ +#include "connection_or.h" +/* For packed_cell stuff */ +#define RELAY_PRIVATE +#include "relay.h" +/* For init/free stuff */ +#include "scheduler.h" +#include "test.h" + +static int test_chan_accept_cells = 0; +static int test_cells_written = 0; +static int test_destroy_not_pending_calls = 0; + +static void channel_note_destroy_not_pending_mock(channel_t *ch, + circid_t circid); +static void chan_test_close(channel_t *ch); +static size_t chan_test_num_bytes_queued(channel_t *ch); +static int chan_test_write_cell(channel_t *ch, cell_t *cell); +static int chan_test_write_packed_cell(channel_t *ch, + packed_cell_t *packed_cell); +static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); +static void make_fake_cell(cell_t *c); +static void make_fake_var_cell(var_cell_t *c); +static channel_t * new_fake_channel(void); +static void scheduler_release_channel_mock(channel_t *ch); +static void test_channel_write(void *arg); + +static void +channel_note_destroy_not_pending_mock(channel_t *ch, + circid_t circid) +{ + (void)ch; + (void)circid; + + ++test_destroy_not_pending_calls; +} + +static void +chan_test_close(channel_t *ch) +{ + test_assert(ch); + + done: + return; +} + +static size_t +chan_test_num_bytes_queued(channel_t *ch) +{ + test_assert(ch); + + done: + return 0; +} + +static int +chan_test_write_cell(channel_t *ch, cell_t *cell) +{ + int rv = 0; + + test_assert(ch); + test_assert(cell); + + if (test_chan_accept_cells) { + /* Free the cell and bump the counter */ + tor_free(cell); + ++test_cells_written; + rv = 1; + } + /* else return 0, we didn't accept it */ + + done: + return rv; +} + +static int +chan_test_write_packed_cell(channel_t *ch, + packed_cell_t *packed_cell) +{ + int rv = 0; + + test_assert(ch); + test_assert(packed_cell); + + if (test_chan_accept_cells) { + /* Free the cell and bump the counter */ + packed_cell_free(packed_cell); + ++test_cells_written; + rv = 1; + } + /* else return 0, we didn't accept it */ + + done: + return rv; +} + +static int +chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell) +{ + int rv = 0; + + test_assert(ch); + test_assert(var_cell); + + if (test_chan_accept_cells) { + /* Free the cell and bump the counter */ + var_cell_free(var_cell); + ++test_cells_written; + rv = 1; + } + /* else return 0, we didn't accept it */ + + done: + return rv; +} + +static void +make_fake_cell(cell_t *c) +{ + test_assert(c != NULL); + + c->circ_id = 1; + c->command = CELL_RELAY; + memset(c->payload, 0, CELL_PAYLOAD_SIZE); + + done: + return; +} + +static void +make_fake_var_cell(var_cell_t *c) +{ + test_assert(c != NULL); + + c->circ_id = 1; + c->command = CELL_VERSIONS; + c->payload_len = CELL_PAYLOAD_SIZE / 2; + memset(c->payload, 0, c->payload_len); + + done: + return; +} + +static channel_t * +new_fake_channel(void) +{ + channel_t *chan = tor_malloc_zero(sizeof(channel_t)); + channel_init(chan); + + chan->close = chan_test_close; + chan->num_bytes_queued = chan_test_num_bytes_queued; + chan->write_cell = chan_test_write_cell; + chan->write_packed_cell = chan_test_write_packed_cell; + chan->write_var_cell = chan_test_write_var_cell; + chan->state = CHANNEL_STATE_OPEN; + + return chan; +} + +static void +scheduler_release_channel_mock(channel_t *ch) +{ + (void)ch; + + /* Increment counter */ + ++test_releases_count; + + return; +} + +static void +test_channel_write(void *arg) +{ + channel_t *ch = NULL; + cell_t *cell = tor_malloc_zero(sizeof(cell_t)); + packed_cell_t *packed_cell = NULL; + var_cell_t *var_cell = + tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); + int old_count; + + (void)arg; + + init_cell_pool(); + + packed_cell = packed_cell_new(); + test_assert(packed_cell); + + ch = new_fake_channel(); + test_assert(ch); + make_fake_cell(cell); + make_fake_var_cell(var_cell); + + /* Tell it to accept cells */ + test_chan_accept_cells = 1; + + old_count = test_cells_written; + channel_write_cell(ch, cell); + test_assert(test_cells_written == old_count + 1); + + channel_write_var_cell(ch, var_cell); + test_assert(test_cells_written == old_count + 2); + + channel_write_packed_cell(ch, packed_cell); + test_assert(test_cells_written == old_count + 3); + + /* Now we test queueing; tell it not to accept cells */ + test_chan_accept_cells = 0; + /* ...and keep it from trying to flush the queue */ + ch->state = CHANNEL_STATE_MAINT; + + /* Get a fresh cell */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + + old_count = test_cells_written; + channel_write_cell(ch, cell); + test_assert(test_cells_written == old_count); + + /* + * Now change back to open with channel_change_state() and assert that it + * gets drained from the queue. + */ + test_chan_accept_cells = 1; + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_assert(test_cells_written == old_count + 1); + + /* + * Check the note destroy case + */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + cell->command = CELL_DESTROY; + + /* Set up the mock */ + MOCK(channel_note_destroy_not_pending, + channel_note_destroy_not_pending_mock); + + old_count = test_destroy_not_pending_calls; + channel_write_cell(ch, cell); + test_assert(test_destroy_not_pending_calls == old_count + 1); + + /* Now send a non-destroy and check we don't call it */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch, cell); + test_assert(test_destroy_not_pending_calls == old_count + 1); + + UNMOCK(channel_note_destroy_not_pending); + + /* + * Now switch it to CLOSING so we can test the discard-cells case + * in the channel_write_*() functions. + */ + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + channel_mark_for_close(ch); + UNMOCK(scheduler_release_channel); + + /* Send cells that will drop in the closing state */ + old_count = test_cells_written; + + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch, cell); + test_assert(test_cells_written == old_count); + + var_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); + make_fake_var_cell(var_cell); + channel_write_var_cell(ch, var_cell); + test_assert(test_cells_written == old_count); + + packed_cell = packed_cell_new(); + channel_write_packed_cell(ch, packed_cell); + test_assert(test_cells_written == old_count); + + free_cell_pool(); + + done: + tor_free(ch); + + return; +} + +struct testcase_t channel_tests[] = { + { "write", test_channel_write, TT_FORK, NULL, NULL }, + END_OF_TESTCASES +}; + From 6e427c30af389fdc15ae3a8d946a46ad5803688c Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 18 Dec 2013 13:42:02 -0800 Subject: [PATCH 045/184] Implement channel queue size estimate unit test --- src/test/test_channel.c | 143 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index c4241db77e..08abd96cd6 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -18,11 +18,13 @@ static int test_chan_accept_cells = 0; static int test_cells_written = 0; static int test_destroy_not_pending_calls = 0; +static double test_overhead_estimate = 1.0f; static void channel_note_destroy_not_pending_mock(channel_t *ch, circid_t circid); static void chan_test_close(channel_t *ch); static size_t chan_test_num_bytes_queued(channel_t *ch); +static int chan_test_num_cells_writeable(channel_t *ch); static int chan_test_write_cell(channel_t *ch, cell_t *cell); static int chan_test_write_packed_cell(channel_t *ch, packed_cell_t *packed_cell); @@ -31,6 +33,7 @@ static void make_fake_cell(cell_t *c); static void make_fake_var_cell(var_cell_t *c); static channel_t * new_fake_channel(void); static void scheduler_release_channel_mock(channel_t *ch); +static void test_channel_queue_size(void *arg); static void test_channel_write(void *arg); static void @@ -52,6 +55,15 @@ chan_test_close(channel_t *ch) return; } +static double +chan_test_get_overhead_estimate(channel_t *ch) +{ + test_assert(ch); + + done: + return test_overhead_estimate; +} + static size_t chan_test_num_bytes_queued(channel_t *ch) { @@ -61,6 +73,15 @@ chan_test_num_bytes_queued(channel_t *ch) return 0; } +static int +chan_test_num_cells_writeable(channel_t *ch) +{ + test_assert(ch); + + done: + return 32; +} + static int chan_test_write_cell(channel_t *ch, cell_t *cell) { @@ -156,7 +177,9 @@ new_fake_channel(void) channel_init(chan); chan->close = chan_test_close; + chan->get_overhead_estimate = chan_test_get_overhead_estimate; chan->num_bytes_queued = chan_test_num_bytes_queued; + chan->num_cells_writeable = chan_test_num_cells_writeable; chan->write_cell = chan_test_write_cell; chan->write_packed_cell = chan_test_write_packed_cell; chan->write_var_cell = chan_test_write_var_cell; @@ -176,6 +199,125 @@ scheduler_release_channel_mock(channel_t *ch) return; } +static void +test_channel_queue_size(void *arg) +{ + channel_t *ch = NULL; + cell_t *cell = NULL; + int n, old_count; + uint64_t global_queue_estimate; + + (void)arg; + + ch = new_fake_channel(); + test_assert(ch); + + /* Initial queue size update */ + channel_update_xmit_queue_size(ch); + test_eq(ch->bytes_queued_for_xmit, 0); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 0); + + /* Test the call-through to our fake lower layer */ + n = channel_num_cells_writeable(ch); + /* chan_test_num_cells_writeable() always returns 32 */ + test_eq(n, 32); + + /* + * Now we queue some cells and check that channel_num_cells_writeable() + * adjusts properly + */ + + /* tell it not to accept cells */ + test_chan_accept_cells = 0; + /* ...and keep it from trying to flush the queue */ + ch->state = CHANNEL_STATE_MAINT; + + /* Get a fresh cell */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + + old_count = test_cells_written; + channel_write_cell(ch, cell); + /* Assert that it got queued, not written through, correctly */ + test_eq(test_cells_written, old_count); + + /* Now check chan_test_num_cells_writeable() again */ + n = channel_num_cells_writeable(ch); + test_eq(n, 0); /* Should return 0 since we're in CHANNEL_STATE_MAINT */ + + /* Update queue size estimates */ + channel_update_xmit_queue_size(ch); + /* One cell, times an overhead factor of 1.0 */ + test_eq(ch->bytes_queued_for_xmit, 512); + /* Try a different overhead factor */ + test_overhead_estimate = 0.5f; + /* This one should be ignored since it's below 1.0 */ + channel_update_xmit_queue_size(ch); + test_eq(ch->bytes_queued_for_xmit, 512); + /* Now try a larger one */ + test_overhead_estimate = 2.0f; + channel_update_xmit_queue_size(ch); + test_eq(ch->bytes_queued_for_xmit, 1024); + /* Go back to 1.0 */ + test_overhead_estimate = 1.0f; + channel_update_xmit_queue_size(ch); + test_eq(ch->bytes_queued_for_xmit, 512); + /* Check the global estimate too */ + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 512); + + /* Go to open */ + old_count = test_cells_written; + channel_change_state(ch, CHANNEL_STATE_OPEN); + + /* + * It should try to write, but we aren't accepting cells right now, so + * it'll requeue + */ + test_eq(test_cells_written, old_count); + + /* Check the queue size again */ + channel_update_xmit_queue_size(ch); + test_eq(ch->bytes_queued_for_xmit, 512); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 512); + + /* + * Now the cell is in the queue, and we're open, so we should get 31 + * writeable cells. + */ + n = channel_num_cells_writeable(ch); + test_eq(n, 31); + + /* Accept cells again */ + test_chan_accept_cells = 1; + /* ...and re-process the queue */ + old_count = test_cells_written; + channel_flush_cells(ch); + test_eq(test_cells_written, old_count + 1); + + /* Should have 32 writeable now */ + n = channel_num_cells_writeable(ch); + test_eq(n, 32); + + /* Should have queue size estimate of zero */ + channel_update_xmit_queue_size(ch); + test_eq(ch->bytes_queued_for_xmit, 0); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 0); + + /* Okay, now we're done with this one */ + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + channel_mark_for_close(ch); + UNMOCK(scheduler_release_channel); + + done: + tor_free(ch); + + return; +} + static void test_channel_write(void *arg) { @@ -289,6 +431,7 @@ test_channel_write(void *arg) } struct testcase_t channel_tests[] = { + { "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL }, { "write", test_channel_write, TT_FORK, NULL, NULL }, END_OF_TESTCASES }; From e00fde17975810d7cc420fb185dd84591f89b7a5 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 18 Dec 2013 15:04:00 -0800 Subject: [PATCH 046/184] Implement two-channel queue estimate test --- src/test/test_channel.c | 133 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 08abd96cd6..acbfca1c7d 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -33,6 +33,8 @@ static void make_fake_cell(cell_t *c); static void make_fake_var_cell(var_cell_t *c); static channel_t * new_fake_channel(void); static void scheduler_release_channel_mock(channel_t *ch); + +static void test_channel_multi(void *arg); static void test_channel_queue_size(void *arg); static void test_channel_write(void *arg); @@ -199,6 +201,136 @@ scheduler_release_channel_mock(channel_t *ch) return; } +static void +test_channel_multi(void *arg) +{ + channel_t *ch1 = NULL, *ch2 = NULL; + uint64_t global_queue_estimate; + cell_t *cell = NULL; + + (void)arg; + + /* Accept cells to lower layer */ + test_chan_accept_cells = 1; + /* Use default overhead factor */ + test_overhead_estimate = 1.0f; + + ch1 = new_fake_channel(); + test_assert(ch1); + ch2 = new_fake_channel(); + test_assert(ch2); + + /* Initial queue size update */ + channel_update_xmit_queue_size(ch1); + test_eq(ch1->bytes_queued_for_xmit, 0); + channel_update_xmit_queue_size(ch2); + test_eq(ch2->bytes_queued_for_xmit, 0); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 0); + + /* Queue some cells, check queue estimates */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch1, cell); + + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch2, cell); + + channel_update_xmit_queue_size(ch1); + channel_update_xmit_queue_size(ch2); + test_eq(ch1->bytes_queued_for_xmit, 0); + test_eq(ch2->bytes_queued_for_xmit, 0); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 0); + + /* Stop accepting cells at lower layer */ + test_chan_accept_cells = 0; + + /* Queue some cells and check queue estimates */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch1, cell); + + channel_update_xmit_queue_size(ch1); + test_eq(ch1->bytes_queued_for_xmit, 512); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 512); + + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch2, cell); + + channel_update_xmit_queue_size(ch2); + test_eq(ch2->bytes_queued_for_xmit, 512); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 1024); + + /* Allow cells through again */ + test_chan_accept_cells = 1; + + /* Flush chan 2 */ + channel_flush_cells(ch2); + + /* Update and check queue sizes */ + channel_update_xmit_queue_size(ch1); + channel_update_xmit_queue_size(ch2); + test_eq(ch1->bytes_queued_for_xmit, 512); + test_eq(ch2->bytes_queued_for_xmit, 0); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 512); + + /* Flush chan 1 */ + channel_flush_cells(ch1); + + /* Update and check queue sizes */ + channel_update_xmit_queue_size(ch1); + channel_update_xmit_queue_size(ch2); + test_eq(ch1->bytes_queued_for_xmit, 0); + test_eq(ch2->bytes_queued_for_xmit, 0); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 0); + + /* Now block again */ + test_chan_accept_cells = 0; + + /* Queue some cells */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch1, cell); + + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch2, cell); + + /* Check the estimates */ + channel_update_xmit_queue_size(ch1); + channel_update_xmit_queue_size(ch2); + test_eq(ch1->bytes_queued_for_xmit, 512); + test_eq(ch2->bytes_queued_for_xmit, 512); + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 1024); + + /* Now close channel 2; it should be subtracted from the global queue */ + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + channel_mark_for_close(ch2); + UNMOCK(scheduler_release_channel); + + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 512); + + /* Now free everything */ + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + channel_free_all(); + UNMOCK(scheduler_release_channel); + + done: + tor_free(ch1); + tor_free(ch2); + + return; +} + static void test_channel_queue_size(void *arg) { @@ -431,6 +563,7 @@ test_channel_write(void *arg) } struct testcase_t channel_tests[] = { + { "multi", test_channel_multi, TT_FORK, NULL, NULL }, { "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL }, { "write", test_channel_write, TT_FORK, NULL, NULL }, END_OF_TESTCASES From fd57840a778f591fa175a1933c0b619741010bd1 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 18 Dec 2013 15:31:54 -0800 Subject: [PATCH 047/184] Make scheduler_channel_doesnt_want_writes() mockable --- src/or/scheduler.c | 4 ++-- src/or/scheduler.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 450eb02903..8a6620b049 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -235,8 +235,8 @@ scheduler_evt_callback(evutil_socket_t fd, short events, void *arg) /** Mark a channel as no longer ready to accept writes */ -void -scheduler_channel_doesnt_want_writes(channel_t *chan) +MOCK_IMPL(void, +scheduler_channel_doesnt_want_writes,(channel_t *chan)) { tor_assert(chan); diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 9cdf6c1c4d..0752ae0760 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -21,7 +21,7 @@ void scheduler_init(void); void scheduler_run(void); /* Mark channels as having cells or wanting/not wanting writes */ -void scheduler_channel_doesnt_want_writes(channel_t *chan); +MOCK_DECL(void,scheduler_channel_doesnt_want_writes,(channel_t *chan)); void scheduler_channel_has_waiting_cells(channel_t *chan); void scheduler_channel_wants_writes(channel_t *chan); From 37baef0687e4bef0cfadf927bfbc832a59de32f4 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 18 Dec 2013 15:50:32 -0800 Subject: [PATCH 048/184] Add channel lifecycle test --- src/test/test_channel.c | 114 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index acbfca1c7d..c47d2925b4 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -18,7 +18,9 @@ static int test_chan_accept_cells = 0; static int test_cells_written = 0; static int test_destroy_not_pending_calls = 0; +static int test_doesnt_want_writes_count = 0; static double test_overhead_estimate = 1.0f; +static int test_releases_count = 0; static void channel_note_destroy_not_pending_mock(channel_t *ch, circid_t circid); @@ -32,8 +34,10 @@ static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); static void make_fake_cell(cell_t *c); static void make_fake_var_cell(var_cell_t *c); static channel_t * new_fake_channel(void); +static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); static void scheduler_release_channel_mock(channel_t *ch); +static void test_channel_lifecycle(void *arg); static void test_channel_multi(void *arg); static void test_channel_queue_size(void *arg); static void test_channel_write(void *arg); @@ -190,6 +194,17 @@ new_fake_channel(void) return chan; } +static void +scheduler_channel_doesnt_want_writes_mock(channel_t *ch) +{ + (void)ch; + + /* Increment counter */ + ++test_doesnt_want_writes_count; + + return; +} + static void scheduler_release_channel_mock(channel_t *ch) { @@ -201,6 +216,104 @@ scheduler_release_channel_mock(channel_t *ch) return; } +static void +test_channel_lifecycle(void *arg) +{ + channel_t *ch1 = NULL, *ch2 = NULL; + cell_t *cell = NULL; + int old_count, init_doesnt_want_writes_count; + int init_releases_count; + + (void)arg; + + /* Mock these for the whole lifecycle test */ + MOCK(scheduler_channel_doesnt_want_writes, + scheduler_channel_doesnt_want_writes_mock); + MOCK(scheduler_release_channel, + scheduler_release_channel_mock); + + /* Cache some initial counter values */ + init_doesnt_want_writes_count = test_doesnt_want_writes_count; + init_releases_count = test_releases_count; + + /* Accept cells to lower layer */ + test_chan_accept_cells = 1; + /* Use default overhead factor */ + test_overhead_estimate = 1.0f; + + ch1 = new_fake_channel(); + test_assert(ch1); + /* Start it off in OPENING */ + ch1->state = CHANNEL_STATE_OPENING; + + /* Try to register it */ + channel_register(ch1); + test_assert(ch1->registered); + + /* Try to write a cell through (should queue) */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + old_count = test_cells_written; + channel_write_cell(ch1, cell); + test_eq(old_count, test_cells_written); + + /* Move it to OPEN and flush */ + channel_change_state(ch1, CHANNEL_STATE_OPEN); + + /* Queue should drain */ + test_eq(old_count + 1, test_cells_written); + + /* Get another one */ + ch2 = new_fake_channel(); + test_assert(ch2); + ch2->state = CHANNEL_STATE_OPENING; + + /* Register */ + channel_register(ch2); + test_assert(ch2->registered); + + /* Check counters */ + test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count); + test_eq(test_releases_count, init_releases_count); + + /* Move ch1 to MAINT */ + channel_change_state(ch1, CHANNEL_STATE_MAINT); + test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); + test_eq(test_releases_count, init_releases_count); + + /* Move ch2 to OPEN */ + channel_change_state(ch2, CHANNEL_STATE_OPEN); + test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); + test_eq(test_releases_count, init_releases_count); + + /* Move ch1 back to OPEN */ + channel_change_state(ch1, CHANNEL_STATE_OPEN); + test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); + test_eq(test_releases_count, init_releases_count); + + /* Mark ch2 for close */ + channel_mark_for_close(ch2); + test_eq(ch2->state, CHANNEL_STATE_CLOSING); + test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); + test_eq(test_releases_count, init_releases_count + 1); + + /* Shut down channels */ + channel_free_all(); + ch1 = ch2 = NULL; + test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); + /* channel_free() calls scheduler_release_channel() */ + test_eq(test_releases_count, init_releases_count + 4); + + done: + tor_free(ch1); + tor_free(ch2); + + UNMOCK(scheduler_channel_doesnt_want_writes); + UNMOCK(scheduler_release_channel); + + return; +} + static void test_channel_multi(void *arg) { @@ -563,6 +676,7 @@ test_channel_write(void *arg) } struct testcase_t channel_tests[] = { + { "lifecycle", test_channel_lifecycle, TT_FORK, NULL, NULL }, { "multi", test_channel_multi, TT_FORK, NULL, NULL }, { "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL }, { "write", test_channel_write, TT_FORK, NULL, NULL }, From ba294ff2dcdbf75c49a478cd9f0ad20fc0ad4b50 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 18 Dec 2013 17:07:54 -0800 Subject: [PATCH 049/184] Implement channel flush unit test --- src/test/test_channel.c | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index c47d2925b4..9e6ef17502 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -37,6 +37,7 @@ static channel_t * new_fake_channel(void); static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); static void scheduler_release_channel_mock(channel_t *ch); +static void test_channel_flush(void *arg); static void test_channel_lifecycle(void *arg); static void test_channel_multi(void *arg); static void test_channel_queue_size(void *arg); @@ -216,6 +217,65 @@ scheduler_release_channel_mock(channel_t *ch) return; } +static void +test_channel_flush(void *arg) +{ + channel_t *ch = NULL; + cell_t *cell = NULL; + packed_cell_t *p_cell = NULL; + var_cell_t *v_cell = NULL; + int init_count; + + (void)arg; + + init_cell_pool(); + + ch = new_fake_channel(); + test_assert(ch); + + /* Cache the original count */ + init_count = test_cells_written; + + /* Stop accepting so we can queue some */ + test_chan_accept_cells = 0; + + /* Queue a regular cell */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch, cell); + /* It should be queued, so assert that we didn't write it */ + test_eq(test_cells_written, init_count); + + /* Queue a var cell */ + v_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); + make_fake_var_cell(v_cell); + channel_write_var_cell(ch, v_cell); + /* It should be queued, so assert that we didn't write it */ + test_eq(test_cells_written, init_count); + + /* Try a packed cell now */ + p_cell = packed_cell_new(); + test_assert(p_cell); + channel_write_packed_cell(ch, p_cell); + /* It should be queued, so assert that we didn't write it */ + test_eq(test_cells_written, init_count); + + /* Now allow writes through again */ + test_chan_accept_cells = 1; + + /* ...and flush */ + channel_flush_cells(ch); + + /* All three should have gone through */ + test_eq(test_cells_written, init_count + 3); + + done: + tor_free(ch); + free_cell_pool(); + + return; +} + static void test_channel_lifecycle(void *arg) { @@ -676,6 +736,7 @@ test_channel_write(void *arg) } struct testcase_t channel_tests[] = { + { "flush", test_channel_flush, TT_FORK, NULL, NULL }, { "lifecycle", test_channel_lifecycle, TT_FORK, NULL, NULL }, { "multi", test_channel_multi, TT_FORK, NULL, NULL }, { "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL }, From 79b8f14c25ecbb4cda8fe587f18694dedd3ee9c0 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 00:46:57 -0800 Subject: [PATCH 050/184] Expose fake channel utility functions in test suite in fakechans.h, and fix a test_channel.c bug --- src/test/fakechans.h | 16 ++++++++++++++++ src/test/test_channel.c | 35 +++++++++++++++++++++++++++++------ 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 src/test/fakechans.h diff --git a/src/test/fakechans.h b/src/test/fakechans.h new file mode 100644 index 0000000000..b474810bc4 --- /dev/null +++ b/src/test/fakechans.h @@ -0,0 +1,16 @@ + /* Copyright (c) 2014, The Tor Project, Inc. */ + /* See LICENSE for licensing information */ + +#ifndef TOR_FAKECHANS_H +#define TOR_FAKECHANS_H + +/** + * \file fakechans.h + * \brief Declarations for fake channels for test suite use + */ + +void make_fake_cell(cell_t *c); +void make_fake_var_cell(var_cell_t *c); +channel_t * new_fake_channel(void); + +#endif /* !defined(TOR_FAKECHANS_H) */ diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 9e6ef17502..1ab7f321bd 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -13,7 +13,10 @@ #include "relay.h" /* For init/free stuff */ #include "scheduler.h" + +/* Test suite stuff */ #include "test.h" +#include "fakechans.h" static int test_chan_accept_cells = 0; static int test_cells_written = 0; @@ -31,9 +34,6 @@ static int chan_test_write_cell(channel_t *ch, cell_t *cell); static int chan_test_write_packed_cell(channel_t *ch, packed_cell_t *packed_cell); static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); -static void make_fake_cell(cell_t *c); -static void make_fake_var_cell(var_cell_t *c); -static channel_t * new_fake_channel(void); static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); static void scheduler_release_channel_mock(channel_t *ch); @@ -150,7 +150,11 @@ chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell) return rv; } -static void +/** + * Fill out c with a new fake cell for test suite use + */ + +void make_fake_cell(cell_t *c) { test_assert(c != NULL); @@ -163,7 +167,11 @@ make_fake_cell(cell_t *c) return; } -static void +/** + * Fill out c with a new fake var_cell for test suite use + */ + +void make_fake_var_cell(var_cell_t *c) { test_assert(c != NULL); @@ -177,7 +185,11 @@ make_fake_var_cell(var_cell_t *c) return; } -static channel_t * +/** + * Set up a new fake channel for the test suite + */ + +channel_t * new_fake_channel(void) { channel_t *chan = tor_malloc_zero(sizeof(channel_t)); @@ -492,6 +504,17 @@ test_channel_multi(void *arg) global_queue_estimate = channel_get_global_queue_estimate(); test_eq(global_queue_estimate, 512); + /* + * Since the fake channels aren't registered, channel_free_all() can't + * see them properly. + */ + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + channel_mark_for_close(ch1); + UNMOCK(scheduler_release_channel); + + global_queue_estimate = channel_get_global_queue_estimate(); + test_eq(global_queue_estimate, 0); + /* Now free everything */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); channel_free_all(); From bef11b715637ad28f6c8802adf6893e050c05d0a Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 00:58:27 -0800 Subject: [PATCH 051/184] Expose a useful mock from test_channel.c --- src/test/fakechans.h | 3 +++ src/test/test_channel.c | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/fakechans.h b/src/test/fakechans.h index b474810bc4..99773e721d 100644 --- a/src/test/fakechans.h +++ b/src/test/fakechans.h @@ -13,4 +13,7 @@ void make_fake_cell(cell_t *c); void make_fake_var_cell(var_cell_t *c); channel_t * new_fake_channel(void); +/* Also exposes some a mock used by both test_channel.c and test_relay.c */ +void scheduler_release_channel_mock(channel_t *ch); + #endif /* !defined(TOR_FAKECHANS_H) */ diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 1ab7f321bd..1ae9810d66 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -35,7 +35,6 @@ static int chan_test_write_packed_cell(channel_t *ch, packed_cell_t *packed_cell); static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); -static void scheduler_release_channel_mock(channel_t *ch); static void test_channel_flush(void *arg); static void test_channel_lifecycle(void *arg); @@ -218,7 +217,7 @@ scheduler_channel_doesnt_want_writes_mock(channel_t *ch) return; } -static void +void scheduler_release_channel_mock(channel_t *ch) { (void)ch; From ade60890d013e8af25f432cca97193bdc8659701 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 02:49:21 -0800 Subject: [PATCH 052/184] Make scheduler_channel_doesnt_want_writes() mockable --- src/or/scheduler.c | 4 ++-- src/or/scheduler.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 8a6620b049..367480cb31 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -275,8 +275,8 @@ scheduler_channel_doesnt_want_writes,(channel_t *chan)) /** Mark a channel as having waiting cells */ -void -scheduler_channel_has_waiting_cells(channel_t *chan) +MOCK_IMPL(void, +scheduler_channel_has_waiting_cells,(channel_t *chan)) { int became_pending = 0; diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 0752ae0760..7f59ec45d0 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -22,7 +22,7 @@ void scheduler_run(void); /* Mark channels as having cells or wanting/not wanting writes */ MOCK_DECL(void,scheduler_channel_doesnt_want_writes,(channel_t *chan)); -void scheduler_channel_has_waiting_cells(channel_t *chan); +MOCK_DECL(void,scheduler_channel_has_waiting_cells,(channel_t *chan)); void scheduler_channel_wants_writes(channel_t *chan); /* Notify the scheduler of a channel being closed */ From 2ee69bd5d74842681aa3c90aae93b93fb0657269 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 02:49:51 -0800 Subject: [PATCH 053/184] Expose get_unique_circ_id_by_chan() to test suite --- src/or/circuitbuild.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index edf7d2863e..7a23fbaa79 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -14,6 +14,7 @@ #include "or.h" #include "channel.h" #include "circpathbias.h" +#define CIRCUITBUILD_PRIVATE #include "circuitbuild.h" #include "circuitlist.h" #include "circuitstats.h" From 46ff91b6ec90fc8ee9a84622f9dce91903686559 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 02:50:33 -0800 Subject: [PATCH 054/184] Add scheduler_channel_has_waiting_cells_mock() and some mock counter queries --- src/test/fakechans.h | 6 ++++++ src/test/test_channel.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/test/fakechans.h b/src/test/fakechans.h index 99773e721d..b129ab49a5 100644 --- a/src/test/fakechans.h +++ b/src/test/fakechans.h @@ -14,6 +14,12 @@ void make_fake_var_cell(var_cell_t *c); channel_t * new_fake_channel(void); /* Also exposes some a mock used by both test_channel.c and test_relay.c */ +void scheduler_channel_has_waiting_cells_mock(channel_t *ch); void scheduler_release_channel_mock(channel_t *ch); +/* Query some counters used by the exposed mocks */ +int get_mock_scheduler_has_waiting_cells_count(void); +int get_mock_scheduler_release_channel_count(void); + #endif /* !defined(TOR_FAKECHANS_H) */ + diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 1ae9810d66..eff418957b 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -22,6 +22,7 @@ static int test_chan_accept_cells = 0; static int test_cells_written = 0; static int test_destroy_not_pending_calls = 0; static int test_doesnt_want_writes_count = 0; +static int test_has_waiting_cells_count = 0; static double test_overhead_estimate = 1.0f; static int test_releases_count = 0; @@ -206,6 +207,31 @@ new_fake_channel(void) return chan; } +/** + * Counter query for scheduler_channel_has_waiting_cells_mock() + */ + +int +get_mock_scheduler_has_waiting_cells_count(void) +{ + return test_has_waiting_cells_count; +} + +/** + * Mock for scheduler_channel_has_waiting_cells() + */ + +void +scheduler_channel_has_waiting_cells_mock(channel_t *ch) +{ + (void)ch; + + /* Increment counter */ + ++test_has_waiting_cells_count; + + return; +} + static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch) { @@ -217,6 +243,20 @@ scheduler_channel_doesnt_want_writes_mock(channel_t *ch) return; } +/** + * Counter query for scheduler_release_channel_mock() + */ + +int +get_mock_scheduler_release_channel_count(void) +{ + return test_releases_count; +} + +/** + * Mock for scheduler_release_channel() + */ + void scheduler_release_channel_mock(channel_t *ch) { From 5992a69deee324fb91f5f2995e145edd2c0560d2 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 02:54:35 -0800 Subject: [PATCH 055/184] Add append_cell_to_circuit_queue() unit test --- src/test/Makefile.nmake | 4 +- src/test/include.am | 1 + src/test/test.c | 2 + src/test/test_relay.c | 130 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 src/test/test_relay.c diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index fceef99564..2a347bd677 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -14,8 +14,8 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \ TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_containers.obj \ test_controller_events.ogj test_crypto.obj test_data.obj test_dir.obj \ test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ - test_cell_formats.obj test_replay.obj test_introduce.obj tinytest.obj \ - test_hs.obj + test_cell_formats.obj test_relay.obj test_replay.obj \ + test_introduce.obj tinytest.obj test_hs.obj tinytest.obj: ..\ext\tinytest.c $(CC) $(CFLAGS) /D snprintf=_snprintf /c ..\ext\tinytest.c diff --git a/src/test/include.am b/src/test/include.am index 547f23b733..531b81ef52 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -38,6 +38,7 @@ src_test_test_SOURCES = \ src/test/test_options.c \ src/test/test_pt.c \ src/test/test_relaycell.c \ + src/test/test_relay.c \ src/test/test_replay.c \ src/test/test_routerkeys.c \ src/test/test_socks.c \ diff --git a/src/test/test.c b/src/test/test.c index 4d4f6f23a4..7ade83d907 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1310,6 +1310,7 @@ extern struct testcase_t status_tests[]; extern struct testcase_t routerset_tests[]; extern struct testcase_t router_tests[]; extern struct testcase_t channel_tests[]; +extern struct testcase_t relay_tests[]; static struct testgroup_t testgroups[] = { { "", test_array }, @@ -1343,6 +1344,7 @@ static struct testgroup_t testgroups[] = { { "status/" , status_tests }, { "routerset/" , routerset_tests }, { "channel/", channel_tests }, + { "relay/" , relay_tests }, END_OF_GROUPS }; diff --git a/src/test/test_relay.c b/src/test/test_relay.c new file mode 100644 index 0000000000..6b9cb33ca3 --- /dev/null +++ b/src/test/test_relay.c @@ -0,0 +1,130 @@ +/* Copyright (c) 2014, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include "or.h" +#define CIRCUITBUILD_PRIVATE +#include "circuitbuild.h" +#define RELAY_PRIVATE +#include "relay.h" +/* For init/free stuff */ +#include "scheduler.h" + +/* Test suite stuff */ +#include "test.h" +#include "fakechans.h" + +static or_circuit_t * new_fake_orcirc(channel_t *nchan, channel_t *pchan); + +static void test_relay_append_cell_to_circuit_queue(void *arg); + +static or_circuit_t * +new_fake_orcirc(channel_t *nchan, channel_t *pchan) +{ + or_circuit_t *orcirc = NULL; + circuit_t *circ = NULL; + + orcirc = tor_malloc_zero(sizeof(*orcirc)); + circ = &(orcirc->base_); + circ->magic = OR_CIRCUIT_MAGIC; + + circ->n_chan = nchan; + circ->n_circ_id = get_unique_circ_id_by_chan(nchan); + circ->n_mux = NULL; /* ?? */ + cell_queue_init(&(circ->n_chan_cells)); + circ->n_hop = NULL; + circ->streams_blocked_on_n_chan = 0; + circ->streams_blocked_on_p_chan = 0; + circ->n_delete_pending = 0; + circ->p_delete_pending = 0; + circ->received_destroy = 0; + circ->state = CIRCUIT_STATE_OPEN; + circ->purpose = CIRCUIT_PURPOSE_OR; + circ->package_window = CIRCWINDOW_START_MAX; + circ->deliver_window = CIRCWINDOW_START_MAX; + circ->n_chan_create_cell = NULL; + + orcirc->p_chan = pchan; + orcirc->p_circ_id = get_unique_circ_id_by_chan(pchan); + cell_queue_init(&(orcirc->p_chan_cells)); + + return orcirc; +} + +static void +test_relay_append_cell_to_circuit_queue(void *arg) +{ + channel_t *nchan = NULL, *pchan = NULL; + or_circuit_t *orcirc = NULL; + cell_t *cell = NULL; + int old_count, new_count; + + (void)arg; + + /* We'll need the cell pool for append_cell_to_circuit_queue() to work */ + init_cell_pool(); + + /* Make fake channels to be nchan and pchan for the circuit */ + nchan = new_fake_channel(); + test_assert(nchan); + + pchan = new_fake_channel(); + test_assert(pchan); + + /* We'll need chans with working cmuxes */ + nchan->cmux = circuitmux_alloc(); + pchan->cmux = circuitmux_alloc(); + + /* Make a fake orcirc */ + orcirc = new_fake_orcirc(nchan, pchan); + test_assert(orcirc); + + /* Make a cell */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + + MOCK(scheduler_channel_has_waiting_cells, + scheduler_channel_has_waiting_cells_mock); + + /* Append it */ + old_count = get_mock_scheduler_has_waiting_cells_count(); + append_cell_to_circuit_queue(TO_CIRCUIT(orcirc), nchan, cell, + CELL_DIRECTION_OUT, 0); + new_count = get_mock_scheduler_has_waiting_cells_count(); + test_eq(new_count, old_count + 1); + + /* Now try the reverse direction */ + old_count = get_mock_scheduler_has_waiting_cells_count(); + append_cell_to_circuit_queue(TO_CIRCUIT(orcirc), pchan, cell, + CELL_DIRECTION_IN, 0); + new_count = get_mock_scheduler_has_waiting_cells_count(); + test_eq(new_count, old_count + 1); + + UNMOCK(scheduler_channel_has_waiting_cells); + + /* Get rid of the fake channels */ + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + channel_mark_for_close(nchan); + channel_mark_for_close(pchan); + UNMOCK(scheduler_release_channel); + + /* Shut down channels */ + channel_free_all(); + nchan = pchan = NULL; + + done: + tor_free(orcirc); + if (nchan && nchan->cmux) circuitmux_free(nchan->cmux); + tor_free(nchan); + if (pchan && pchan->cmux) circuitmux_free(pchan->cmux); + tor_free(pchan); + free_cell_pool(); + + return; +} + +struct testcase_t relay_tests[] = { + { "append_cell_to_circuit_queue", test_relay_append_cell_to_circuit_queue, + TT_FORK, NULL, NULL }, + END_OF_TESTCASES +}; + From bbb06b73cd46d8e603b9a5b99f2cdd28e31888eb Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 20:51:21 -0800 Subject: [PATCH 056/184] Expose some channel cell queue stuff to the test suite --- src/or/channel.c | 32 +++++--------------------------- src/or/channel.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index 9e3e452d0b..76ade4fbdd 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -13,6 +13,9 @@ #define TOR_CHANNEL_INTERNAL_ +/* This one's for stuff only channel.c and the test suite should see */ +#define CHANNEL_PRIVATE_ + #include "or.h" #include "channel.h" #include "channeltls.h" @@ -31,29 +34,6 @@ #include "routerlist.h" #include "scheduler.h" -/* Cell queue structure */ - -typedef struct cell_queue_entry_s cell_queue_entry_t; -struct cell_queue_entry_s { - TOR_SIMPLEQ_ENTRY(cell_queue_entry_s) next; - enum { - CELL_QUEUE_FIXED, - CELL_QUEUE_VAR, - CELL_QUEUE_PACKED - } type; - union { - struct { - cell_t *cell; - } fixed; - struct { - var_cell_t *var_cell; - } var; - struct { - packed_cell_t *packed_cell; - } packed; - } u; -}; - /* Global lists of channels */ /* All channel_t instances */ @@ -175,7 +155,6 @@ static cell_queue_entry_t * cell_queue_entry_new_fixed(cell_t *cell); static cell_queue_entry_t * cell_queue_entry_new_var(var_cell_t *var_cell); -static int chan_cell_queue_len(const chan_cell_queue_t *queue); static int is_destroy_cell(channel_t *chan, const cell_queue_entry_t *q, circid_t *circid_out); @@ -1751,9 +1730,8 @@ channel_get_cell_queue_entry_size(channel_t *chan, cell_queue_entry_t *q) rv = get_cell_network_size(chan->wide_circ_ids); break; case CELL_QUEUE_VAR: - tor_assert(q->u.var.var_cell); rv = get_var_cell_header_size(chan->wide_circ_ids) + - q->u.var.var_cell->payload_len; + (q->u.var.var_cell ? q->u.var.var_cell->payload_len : 0); break; case CELL_QUEUE_PACKED: rv = get_cell_network_size(chan->wide_circ_ids); @@ -3455,7 +3433,7 @@ channel_listener_describe_transport(channel_listener_t *chan_l) /** * Return the number of entries in queue */ -static int +STATIC int chan_cell_queue_len(const chan_cell_queue_t *queue) { int r = 0; diff --git a/src/or/channel.h b/src/or/channel.h index 023c39d0dd..ba6d66b350 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -354,6 +354,34 @@ void channel_set_cmux_policy_everywhere(circuitmux_policy_t *pol); #ifdef TOR_CHANNEL_INTERNAL_ +#ifdef CHANNEL_PRIVATE_ +/* Cell queue structure (here rather than channel.c for test suite use) */ + +typedef struct cell_queue_entry_s cell_queue_entry_t; +struct cell_queue_entry_s { + TOR_SIMPLEQ_ENTRY(cell_queue_entry_s) next; + enum { + CELL_QUEUE_FIXED, + CELL_QUEUE_VAR, + CELL_QUEUE_PACKED + } type; + union { + struct { + cell_t *cell; + } fixed; + struct { + var_cell_t *var_cell; + } var; + struct { + packed_cell_t *packed_cell; + } packed; + } u; +}; + +/* Cell queue functions for benefit of test suite */ +STATIC int chan_cell_queue_len(const chan_cell_queue_t *queue); +#endif + /* Channel operations for subclasses and internal use only */ /* Initialize a newly allocated channel - do this first in subclass From b6d0aaec07e1251af3735f4d5ec8250c4f9ce470 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 20:51:50 -0800 Subject: [PATCH 057/184] Check some can't-happen cases draining channel cell queues --- src/test/test_channel.c | 125 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index eff418957b..8c0b06336b 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -2,6 +2,7 @@ /* See LICENSE for licensing information */ #define TOR_CHANNEL_INTERNAL_ +#define CHANNEL_PRIVATE_ #include "or.h" #include "channel.h" /* For channel_note_destroy_not_pending */ @@ -566,6 +567,129 @@ test_channel_multi(void *arg) return; } +/** + * Check some hopefully-impossible edge cases in the channel queue we + * can only trigger by doing evil things to the queue directly. + */ + +static void +test_channel_queue_impossible(void *arg) +{ + channel_t *ch = NULL; + cell_t *cell = NULL; + packed_cell_t *packed_cell = NULL; + var_cell_t *var_cell = NULL; + int old_count; + cell_queue_entry_t *q = NULL; + + (void)arg; + + init_cell_pool(); + + packed_cell = packed_cell_new(); + test_assert(packed_cell); + + ch = new_fake_channel(); + test_assert(ch); + + /* We test queueing here; tell it not to accept cells */ + test_chan_accept_cells = 0; + /* ...and keep it from trying to flush the queue */ + ch->state = CHANNEL_STATE_MAINT; + + /* Cache the cell written count */ + old_count = test_cells_written; + + /* Assert that the queue is initially empty */ + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + + /* Get a fresh cell and write it to the channel*/ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch, cell); + + /* Now it should be queued */ + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)),1); + q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); + test_assert(q); + if (q) { + test_eq(q->type, CELL_QUEUE_FIXED); + test_eq(q->u.fixed.cell, cell); + } + /* Do perverse things to it */ + tor_free(q->u.fixed.cell); + q->u.fixed.cell = NULL; + + /* + * Now change back to open with channel_change_state() and assert that it + * gets thrown away properly. + */ + test_chan_accept_cells = 1; + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_assert(test_cells_written == old_count); + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + + /* Same thing but for a var_cell */ + + test_chan_accept_cells = 0; + ch->state = CHANNEL_STATE_MAINT; + var_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); + make_fake_var_cell(var_cell); + channel_write_var_cell(ch, var_cell); + + /* Check that it's queued */ + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 1); + q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); + test_assert(q); + if (q) { + test_eq(q->type, CELL_QUEUE_VAR); + test_eq(q->u.var.var_cell, var_cell); + } + + /* Remove the cell from the queue entry */ + tor_free(q->u.var.var_cell); + q->u.var.var_cell = NULL; + + /* Let it drain and check that the bad entry is discarded */ + test_chan_accept_cells = 1; + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_assert(test_cells_written == old_count); + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + + /* Same thing with a packed_cell */ + + test_chan_accept_cells = 0; + ch->state = CHANNEL_STATE_MAINT; + packed_cell = packed_cell_new(); + test_assert(packed_cell); + channel_write_packed_cell(ch, packed_cell); + + /* Check that it's queued */ + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 1); + q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); + test_assert(q); + if (q) { + test_eq(q->type, CELL_QUEUE_PACKED); + test_eq(q->u.packed.packed_cell, packed_cell); + } + + /* Remove the cell from the queue entry */ + packed_cell_free(q->u.packed.packed_cell); + q->u.packed.packed_cell = NULL; + + /* Let it drain and check that the bad entry is discarded */ + test_chan_accept_cells = 1; + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_assert(test_cells_written == old_count); + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + + done: + tor_free(ch); + free_cell_pool(); + + return; +} + static void test_channel_queue_size(void *arg) { @@ -801,6 +925,7 @@ struct testcase_t channel_tests[] = { { "flush", test_channel_flush, TT_FORK, NULL, NULL }, { "lifecycle", test_channel_lifecycle, TT_FORK, NULL, NULL }, { "multi", test_channel_multi, TT_FORK, NULL, NULL }, + { "queue_impossible", test_channel_queue_impossible, TT_FORK, NULL, NULL }, { "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL }, { "write", test_channel_write, TT_FORK, NULL, NULL }, END_OF_TESTCASES From 3b78667d65848d0fbbe73a57874312ddd7f88140 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 22:20:59 -0800 Subject: [PATCH 058/184] Unit test for unusual channel lifecycles --- src/test/test_channel.c | 204 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 8c0b06336b..9cc709dee0 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -7,6 +7,7 @@ #include "channel.h" /* For channel_note_destroy_not_pending */ #include "circuitlist.h" +#include "circuitmux.h" /* For var_cell_free */ #include "connection_or.h" /* For packed_cell stuff */ @@ -30,6 +31,8 @@ static int test_releases_count = 0; static void channel_note_destroy_not_pending_mock(channel_t *ch, circid_t circid); static void chan_test_close(channel_t *ch); +static void chan_test_error(channel_t *ch); +static void chan_test_finish_close(channel_t *ch); static size_t chan_test_num_bytes_queued(channel_t *ch); static int chan_test_num_cells_writeable(channel_t *ch); static int chan_test_write_cell(channel_t *ch, cell_t *cell); @@ -63,6 +66,40 @@ chan_test_close(channel_t *ch) return; } +/* + * Close a channel through the error path + */ + +static void +chan_test_error(channel_t *ch) +{ + test_assert(ch); + test_assert(!(ch->state == CHANNEL_STATE_CLOSING || + ch->state == CHANNEL_STATE_ERROR || + ch->state == CHANNEL_STATE_CLOSED)); + + channel_close_for_error(ch); + + done: + return; +} + +/* + * Finish closing a channel from CHANNEL_STATE_CLOSING + */ + +static void +chan_test_finish_close(channel_t *ch) +{ + test_assert(ch); + test_assert(ch->state == CHANNEL_STATE_CLOSING); + + channel_closed(ch); + + done: + return; +} + static double chan_test_get_overhead_estimate(channel_t *ch) { @@ -328,6 +365,12 @@ test_channel_flush(void *arg) return; } +/** + * Normal channel lifecycle test: + * + * OPENING->OPEN->MAINT->OPEN->CLOSING->CLOSED + */ + static void test_channel_lifecycle(void *arg) { @@ -426,6 +469,166 @@ test_channel_lifecycle(void *arg) return; } +/** + * Weird channel lifecycle test: + * + * OPENING->CLOSING->CLOSED + * OPENING->OPEN->CLOSING->ERROR + * OPENING->OPEN->MAINT->CLOSING->CLOSED + * OPENING->OPEN->MAINT->CLOSING->ERROR + */ + +static void +test_channel_lifecycle_2(void *arg) +{ + channel_t *ch = NULL; + + (void)arg; + + /* Mock these for the whole lifecycle test */ + MOCK(scheduler_channel_doesnt_want_writes, + scheduler_channel_doesnt_want_writes_mock); + MOCK(scheduler_release_channel, + scheduler_release_channel_mock); + + /* Accept cells to lower layer */ + test_chan_accept_cells = 1; + /* Use default overhead factor */ + test_overhead_estimate = 1.0f; + + ch = new_fake_channel(); + test_assert(ch); + /* Start it off in OPENING */ + ch->state = CHANNEL_STATE_OPENING; + /* The full lifecycle test needs a cmux */ + ch->cmux = circuitmux_alloc(); + + /* Try to register it */ + channel_register(ch); + test_assert(ch->registered); + + /* Try to close it */ + channel_mark_for_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + + /* Finish closing it */ + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSED); + channel_run_cleanup(); + ch = NULL; + + /* Now try OPENING->OPEN->CLOSING->ERROR */ + ch = new_fake_channel(); + test_assert(ch); + ch->state = CHANNEL_STATE_OPENING; + ch->cmux = circuitmux_alloc(); + channel_register(ch); + test_assert(ch->registered); + + /* Finish opening it */ + channel_change_state(ch, CHANNEL_STATE_OPEN); + + /* Error exit from lower layer */ + chan_test_error(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_ERROR); + channel_run_cleanup(); + ch = NULL; + + /* OPENING->OPEN->MAINT->CLOSING->CLOSED close from maintenance state */ + ch = new_fake_channel(); + test_assert(ch); + ch->state = CHANNEL_STATE_OPENING; + ch->cmux = circuitmux_alloc(); + channel_register(ch); + test_assert(ch->registered); + + /* Finish opening it */ + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_eq(ch->state, CHANNEL_STATE_OPEN); + + /* Go to maintenance state */ + channel_change_state(ch, CHANNEL_STATE_MAINT); + test_eq(ch->state, CHANNEL_STATE_MAINT); + + /* Lower layer close */ + channel_mark_for_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + + /* Finish */ + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSED); + channel_run_cleanup(); + ch = NULL; + + /* + * OPENING->OPEN->MAINT->CLOSING->CLOSED lower-layer close during + * maintenance state + */ + ch = new_fake_channel(); + test_assert(ch); + ch->state = CHANNEL_STATE_OPENING; + ch->cmux = circuitmux_alloc(); + channel_register(ch); + test_assert(ch->registered); + + /* Finish opening it */ + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_eq(ch->state, CHANNEL_STATE_OPEN); + + /* Go to maintenance state */ + channel_change_state(ch, CHANNEL_STATE_MAINT); + test_eq(ch->state, CHANNEL_STATE_MAINT); + + /* Lower layer close */ + channel_close_from_lower_layer(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + + /* Finish */ + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSED); + channel_run_cleanup(); + ch = NULL; + + /* OPENING->OPEN->MAINT->CLOSING->ERROR */ + ch = new_fake_channel(); + test_assert(ch); + ch->state = CHANNEL_STATE_OPENING; + ch->cmux = circuitmux_alloc(); + channel_register(ch); + test_assert(ch->registered); + + /* Finish opening it */ + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_eq(ch->state, CHANNEL_STATE_OPEN); + + /* Go to maintenance state */ + channel_change_state(ch, CHANNEL_STATE_MAINT); + test_eq(ch->state, CHANNEL_STATE_MAINT); + + /* Lower layer close */ + chan_test_error(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + + /* Finish */ + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_ERROR); + channel_run_cleanup(); + ch = NULL; + + /* Shut down channels */ + channel_free_all(); + + done: + tor_free(ch); + + UNMOCK(scheduler_channel_doesnt_want_writes); + UNMOCK(scheduler_release_channel); + + return; +} + static void test_channel_multi(void *arg) { @@ -924,6 +1127,7 @@ test_channel_write(void *arg) struct testcase_t channel_tests[] = { { "flush", test_channel_flush, TT_FORK, NULL, NULL }, { "lifecycle", test_channel_lifecycle, TT_FORK, NULL, NULL }, + { "lifecycle_2", test_channel_lifecycle_2, TT_FORK, NULL, NULL }, { "multi", test_channel_multi, TT_FORK, NULL, NULL }, { "queue_impossible", test_channel_queue_impossible, TT_FORK, NULL, NULL }, { "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL }, From ae3ed185e495499516173d6c5dd51ea49a0aa9c1 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 22:30:02 -0800 Subject: [PATCH 059/184] Let channel unit tests mess with global queue estimate --- src/or/channel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/or/channel.c b/src/or/channel.c index 76ade4fbdd..18c236fe66 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -109,7 +109,7 @@ static uint64_t n_channel_bytes_in_queues = 0; * transmit overhead* */ -static uint64_t estimated_total_queue_size = 0; +STATIC uint64_t estimated_total_queue_size = 0; /* Digest->channel map * From f7951d318a29e8f9af5af080160902b62ee278b7 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 22:33:04 -0800 Subject: [PATCH 060/184] Small channel unit test improvements --- src/test/test_channel.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 9cc709dee0..2f07413ad7 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -20,6 +20,9 @@ #include "test.h" #include "fakechans.h" +/* This comes from channel.c */ +extern uint64_t estimated_total_queue_size; + static int test_chan_accept_cells = 0; static int test_cells_written = 0; static int test_destroy_not_pending_calls = 0; @@ -400,6 +403,8 @@ test_channel_lifecycle(void *arg) test_assert(ch1); /* Start it off in OPENING */ ch1->state = CHANNEL_STATE_OPENING; + /* We'll need a cmux */ + ch1->cmux = circuitmux_alloc(); /* Try to register it */ channel_register(ch1); @@ -422,6 +427,7 @@ test_channel_lifecycle(void *arg) ch2 = new_fake_channel(); test_assert(ch2); ch2->state = CHANNEL_STATE_OPENING; + ch2->cmux = circuitmux_alloc(); /* Register */ channel_register(ch2); @@ -784,6 +790,10 @@ test_channel_queue_impossible(void *arg) var_cell_t *var_cell = NULL; int old_count; cell_queue_entry_t *q = NULL; + uint64_t global_queue_estimate; + + /* Cache the global queue size (see below) */ + global_queue_estimate = channel_get_global_queue_estimate(); (void)arg; @@ -890,6 +900,13 @@ test_channel_queue_impossible(void *arg) tor_free(ch); free_cell_pool(); + /* + * Doing that meant that we couldn't correctly adjust the queue size + * for the var cell, so manually reset the global queue size estimate + * so the next test doesn't break if we run with --no-fork. + */ + estimated_total_queue_size = global_queue_estimate; + return; } From b5d4ef18e172c18dd169570b17dfb14a4a270ae1 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 21 Jan 2014 22:54:40 -0800 Subject: [PATCH 061/184] Add unknown cell queue entry type case to channel/queue_impossible unit test --- src/test/test_channel.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 2f07413ad7..add57deb50 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -896,6 +896,32 @@ test_channel_queue_impossible(void *arg) test_assert(test_cells_written == old_count); test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + /* Unknown cell type case */ + test_chan_accept_cells = 0; + ch->state = CHANNEL_STATE_MAINT; + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + channel_write_cell(ch, cell); + + /* Check that it's queued */ + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)),1); + q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); + test_assert(q); + if (q) { + test_eq(q->type, CELL_QUEUE_FIXED); + test_eq(q->u.fixed.cell, cell); + } + /* Clobber it, including the queue entry type */ + tor_free(q->u.fixed.cell); + q->u.fixed.cell = NULL; + q->type = CELL_QUEUE_PACKED + 1; + + /* Let it drain and check that the bad entry is discarded */ + test_chan_accept_cells = 1; + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_assert(test_cells_written == old_count); + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + done: tor_free(ch); free_cell_pool(); From 76fcb8cb55d91aa66699266b00ff5379e3c99461 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 00:06:06 -0800 Subject: [PATCH 062/184] Add channel/incoming unit test --- src/test/test_channel.c | 123 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index add57deb50..18746df26c 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -24,6 +24,8 @@ extern uint64_t estimated_total_queue_size; static int test_chan_accept_cells = 0; +static int test_chan_fixed_cells_recved = 0; +static int test_chan_var_cells_recved = 0; static int test_cells_written = 0; static int test_destroy_not_pending_calls = 0; static int test_doesnt_want_writes_count = 0; @@ -33,6 +35,10 @@ static int test_releases_count = 0; static void channel_note_destroy_not_pending_mock(channel_t *ch, circid_t circid); +static void chan_test_cell_handler(channel_t *ch, + cell_t *cell); +static void chan_test_var_cell_handler(channel_t *ch, + var_cell_t *var_cell); static void chan_test_close(channel_t *ch); static void chan_test_error(channel_t *ch); static void chan_test_finish_close(channel_t *ch); @@ -45,6 +51,7 @@ static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); static void test_channel_flush(void *arg); +static void test_channel_incoming(void *arg); static void test_channel_lifecycle(void *arg); static void test_channel_multi(void *arg); static void test_channel_queue_size(void *arg); @@ -60,6 +67,42 @@ channel_note_destroy_not_pending_mock(channel_t *ch, ++test_destroy_not_pending_calls; } +/* + * Handle an incoming fixed-size cell for unit tests + */ + +static void +chan_test_cell_handler(channel_t *ch, + cell_t *cell) +{ + test_assert(ch); + test_assert(cell); + + tor_free(cell); + ++test_chan_fixed_cells_recved; + + done: + return; +} + +/* + * Handle an incoming variable-size cell for unit tests + */ + +static void +chan_test_var_cell_handler(channel_t *ch, + var_cell_t *var_cell) +{ + test_assert(ch); + test_assert(var_cell); + + tor_free(var_cell); + ++test_chan_var_cells_recved; + + done: + return; +} + static void chan_test_close(channel_t *ch) { @@ -368,6 +411,85 @@ test_channel_flush(void *arg) return; } +static void +test_channel_incoming(void *arg) +{ + channel_t *ch = NULL; + cell_t *cell = NULL; + var_cell_t *var_cell = NULL; + int old_count; + + (void)arg; + + /* Mock these for duration of the test */ + MOCK(scheduler_channel_doesnt_want_writes, + scheduler_channel_doesnt_want_writes_mock); + MOCK(scheduler_release_channel, + scheduler_release_channel_mock); + + /* Accept cells to lower layer */ + test_chan_accept_cells = 1; + /* Use default overhead factor */ + test_overhead_estimate = 1.0f; + + ch = new_fake_channel(); + test_assert(ch); + /* Start it off in OPENING */ + ch->state = CHANNEL_STATE_OPENING; + /* We'll need a cmux */ + ch->cmux = circuitmux_alloc(); + + /* Install incoming cell handlers */ + channel_set_cell_handlers(ch, + chan_test_cell_handler, + chan_test_var_cell_handler); + /* Test cell handler getters */ + test_eq(channel_get_cell_handler(ch), chan_test_cell_handler); + test_eq(channel_get_var_cell_handler(ch), chan_test_var_cell_handler); + + /* Try to register it */ + channel_register(ch); + test_assert(ch->registered); + + /* Open it */ + channel_change_state(ch, CHANNEL_STATE_OPEN); + test_eq(ch->state, CHANNEL_STATE_OPEN); + + /* Receive a fixed cell */ + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + old_count = test_chan_fixed_cells_recved; + channel_queue_cell(ch, cell); + cell = NULL; + test_eq(test_chan_fixed_cells_recved, old_count + 1); + + /* Receive a variable-size cell */ + var_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); + make_fake_var_cell(var_cell); + old_count = test_chan_var_cells_recved; + channel_queue_var_cell(ch, var_cell); + var_cell = NULL; + test_eq(test_chan_var_cells_recved, old_count + 1); + + /* Close it */ + channel_mark_for_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSED); + channel_run_cleanup(); + ch = NULL; + + done: + tor_free(ch); + tor_free(cell); + tor_free(var_cell); + + UNMOCK(scheduler_channel_doesnt_want_writes); + UNMOCK(scheduler_release_channel); + + return; +} + /** * Normal channel lifecycle test: * @@ -1169,6 +1291,7 @@ test_channel_write(void *arg) struct testcase_t channel_tests[] = { { "flush", test_channel_flush, TT_FORK, NULL, NULL }, + { "incoming", test_channel_incoming, TT_FORK, NULL, NULL }, { "lifecycle", test_channel_lifecycle, TT_FORK, NULL, NULL }, { "lifecycle_2", test_channel_lifecycle_2, TT_FORK, NULL, NULL }, { "multi", test_channel_multi, TT_FORK, NULL, NULL }, From 5b7a58f7c43c98c1f1fbb6bc347263c5247a5ab7 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 01:00:25 -0800 Subject: [PATCH 063/184] Make circuitmux_num_cells() mockable --- src/or/circuitmux.c | 4 ++-- src/or/circuitmux.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c index 29c3be17d5..71bc4efc4a 100644 --- a/src/or/circuitmux.c +++ b/src/or/circuitmux.c @@ -896,8 +896,8 @@ circuitmux_num_cells_for_circuit(circuitmux_t *cmux, circuit_t *circ) * Query total number of available cells on a circuitmux */ -unsigned int -circuitmux_num_cells(circuitmux_t *cmux) +MOCK_IMPL(unsigned int, +circuitmux_num_cells, (circuitmux_t *cmux)) { tor_assert(cmux); diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h index 5833ee5eee..9a5ea7d675 100644 --- a/src/or/circuitmux.h +++ b/src/or/circuitmux.h @@ -120,7 +120,7 @@ int circuitmux_is_circuit_attached(circuitmux_t *cmux, circuit_t *circ); int circuitmux_is_circuit_active(circuitmux_t *cmux, circuit_t *circ); unsigned int circuitmux_num_cells_for_circuit(circuitmux_t *cmux, circuit_t *circ); -unsigned int circuitmux_num_cells(circuitmux_t *cmux); +MOCK_DECL(unsigned int, circuitmux_num_cells, (circuitmux_t *cmux)); unsigned int circuitmux_num_circuits(circuitmux_t *cmux); unsigned int circuitmux_num_active_circuits(circuitmux_t *cmux); From 9eea42f844801f673b90788ff4f5389b300d81fb Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 01:04:39 -0800 Subject: [PATCH 064/184] Make channel_flush_from_first_active_circuit() mockable --- src/or/relay.c | 4 ++-- src/or/relay.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/or/relay.c b/src/or/relay.c index b653616c2c..fee2eec39d 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -2592,8 +2592,8 @@ packed_cell_get_circid(const packed_cell_t *cell, int wide_circ_ids) * queue of the first active circuit on chan, and write them to * chan->outbuf. Return the number of cells written. Advance * the active circuit pointer to the next active circuit in the ring. */ -int -channel_flush_from_first_active_circuit(channel_t *chan, int max) +MOCK_IMPL(int, +channel_flush_from_first_active_circuit, (channel_t *chan, int max)) { circuitmux_t *cmux = NULL; int n_flushed = 0; diff --git a/src/or/relay.h b/src/or/relay.h index 969c6fb61d..68b4fdf197 100644 --- a/src/or/relay.h +++ b/src/or/relay.h @@ -64,7 +64,8 @@ void append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan, cell_t *cell, cell_direction_t direction, streamid_t fromstream); void channel_unlink_all_circuits(channel_t *chan, smartlist_t *detached_out); -int channel_flush_from_first_active_circuit(channel_t *chan, int max); +MOCK_DECL(int, channel_flush_from_first_active_circuit, + (channel_t *chan, int max)); void assert_circuit_mux_okay(channel_t *chan); void update_circuit_on_cmux_(circuit_t *circ, cell_direction_t direction, const char *file, int lineno); From f12f7159a53f191a981104bae3f87d65a581e1f8 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 02:11:59 -0800 Subject: [PATCH 065/184] Add channel/flushmux unit test --- src/test/test_channel.c | 118 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 18746df26c..2f5e9465a7 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -32,7 +32,12 @@ static int test_doesnt_want_writes_count = 0; static int test_has_waiting_cells_count = 0; static double test_overhead_estimate = 1.0f; static int test_releases_count = 0; +static circuitmux_t *test_target_cmux = NULL; +static unsigned int test_cmux_cells = 0; +static int chan_test_channel_flush_from_first_active_circuit_mock( + channel_t *chan, int max); +static unsigned int chan_test_circuitmux_num_cells_mock(circuitmux_t *cmux); static void channel_note_destroy_not_pending_mock(channel_t *ch, circid_t circid); static void chan_test_cell_handler(channel_t *ch, @@ -51,6 +56,7 @@ static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); static void test_channel_flush(void *arg); +static void test_channel_flushmux(void *arg); static void test_channel_incoming(void *arg); static void test_channel_lifecycle(void *arg); static void test_channel_multi(void *arg); @@ -67,6 +73,62 @@ channel_note_destroy_not_pending_mock(channel_t *ch, ++test_destroy_not_pending_calls; } +/** + * If the target cmux is the cmux for chan, make fake cells up to the + * target number of cells and write them to chan. Otherwise, invoke + * the real channel_flush_from_first_active_circuit(). + */ + +static int +chan_test_channel_flush_from_first_active_circuit_mock(channel_t *chan, + int max) +{ + int result = 0, c = 0; + packed_cell_t *cell = NULL; + + test_assert(chan != NULL); + if (test_target_cmux != NULL && + test_target_cmux == chan->cmux) { + while (c <= max && test_cmux_cells > 0) { + cell = packed_cell_new(); + channel_write_packed_cell(chan, cell); + ++c; + --test_cmux_cells; + } + result = c; + } else { + result = channel_flush_from_first_active_circuit__real(chan, max); + } + + done: + return result; +} + +/** + * If we have a target cmux set and this matches it, lie about how + * many cells we have according to the number indicated; otherwise + * pass to the real circuitmux_num_cells(). + */ + +static unsigned int +chan_test_circuitmux_num_cells_mock(circuitmux_t *cmux) +{ + unsigned int result = 0; + + test_assert(cmux != NULL); + if (cmux != NULL) { + if (cmux == test_target_cmux) { + result = test_cmux_cells; + } else { + result = circuitmux_num_cells__real(cmux); + } + } + + done: + + return result; +} + /* * Handle an incoming fixed-size cell for unit tests */ @@ -411,6 +473,61 @@ test_channel_flush(void *arg) return; } +/** + * Channel flush tests that require cmux mocking + */ + +static void +test_channel_flushmux(void *arg) +{ + channel_t *ch = NULL; + int old_count; + ssize_t result; + + (void)arg; + + init_cell_pool(); + + /* Install mocks we need for this test */ + MOCK(channel_flush_from_first_active_circuit, + chan_test_channel_flush_from_first_active_circuit_mock); + MOCK(circuitmux_num_cells, + chan_test_circuitmux_num_cells_mock); + + ch = new_fake_channel(); + test_assert(ch); + ch->cmux = circuitmux_alloc(); + + old_count = test_cells_written; + + test_target_cmux = ch->cmux; + test_cmux_cells = 1; + + /* Enable cell acceptance */ + test_chan_accept_cells = 1; + + result = channel_flush_some_cells(ch, 1); + + test_eq(result, 1); + test_eq(test_cells_written, old_count + 1); + test_eq(test_cmux_cells, 0); + + test_target_cmux = NULL; + test_cmux_cells = 0; + + done: + tor_free(ch); + + UNMOCK(channel_flush_from_first_active_circuit); + UNMOCK(circuitmux_num_cells); + + test_chan_accept_cells = 0; + + free_cell_pool(); + + return; +} + static void test_channel_incoming(void *arg) { @@ -1291,6 +1408,7 @@ test_channel_write(void *arg) struct testcase_t channel_tests[] = { { "flush", test_channel_flush, TT_FORK, NULL, NULL }, + { "flushmux", test_channel_flushmux, TT_FORK, NULL, NULL }, { "incoming", test_channel_incoming, TT_FORK, NULL, NULL }, { "lifecycle", test_channel_lifecycle, TT_FORK, NULL, NULL }, { "lifecycle_2", test_channel_lifecycle_2, TT_FORK, NULL, NULL }, From 9740a07b8c5b2608f0a937799f9e24ce0f468de7 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 02:33:27 -0800 Subject: [PATCH 066/184] Check queueing case in channel/flushmux unit test too --- src/test/test_channel.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 2f5e9465a7..588f698854 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -481,7 +481,7 @@ static void test_channel_flushmux(void *arg) { channel_t *ch = NULL; - int old_count; + int old_count, q_len_before, q_len_after; ssize_t result; (void)arg; @@ -512,6 +512,28 @@ test_channel_flushmux(void *arg) test_eq(test_cells_written, old_count + 1); test_eq(test_cmux_cells, 0); + /* Now try it without accepting to force them into the queue */ + test_chan_accept_cells = 0; + test_cmux_cells = 1; + q_len_before = chan_cell_queue_len(&(ch->outgoing_queue)); + + result = channel_flush_some_cells(ch, 1); + + /* We should not have actually flushed any */ + test_eq(result, 0); + test_eq(test_cells_written, old_count + 1); + /* But we should have gotten to the fake cellgen loop */ + test_eq(test_cmux_cells, 0); + /* ...and we should have a queued cell */ + q_len_after = chan_cell_queue_len(&(ch->outgoing_queue)); + test_eq(q_len_after, q_len_before + 1); + + /* Now accept cells again and drain the queue */ + test_chan_accept_cells = 1; + channel_flush_cells(ch); + test_eq(test_cells_written, old_count + 2); + test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + test_target_cmux = NULL; test_cmux_cells = 0; From 5a24ff0563ed916abffcde083019d23142197fdf Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 02:50:40 -0800 Subject: [PATCH 067/184] What the hell was I on? --- src/or/channel.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/or/channel.c b/src/or/channel.c index 18c236fe66..94cca5caf8 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -2263,7 +2263,8 @@ channel_flush_some_cells(channel_t *chan, ssize_t num_cells) /* Now process the queue if necessary */ - if (q_len_after > q_len_before && num_cells < flushed) { + if ((q_len_after > q_len_before) && + (unlimited || (flushed < num_cells))) { flushed += channel_flush_some_cells_from_outgoing_queue(chan, (unlimited ? -1 : num_cells - flushed)); } From 452bce6c7200600d4810f490ba5cc1c93d49cc96 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 03:51:22 -0800 Subject: [PATCH 068/184] Make channel_dump_statistics() mockable --- src/or/channel.c | 4 ++-- src/or/channel.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index 94cca5caf8..ec44cce427 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -3450,8 +3450,8 @@ chan_cell_queue_len(const chan_cell_queue_t *queue) * Dump statistics for one channel to the log */ -void -channel_dump_statistics(channel_t *chan, int severity) +MOCK_IMPL(void, +channel_dump_statistics, (channel_t *chan, int severity)) { double avg, interval, age; time_t now = time(NULL); diff --git a/src/or/channel.h b/src/or/channel.h index ba6d66b350..07a66ebcda 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -506,7 +506,7 @@ channel_t * channel_next_with_digest(channel_t *chan); */ const char * channel_describe_transport(channel_t *chan); -void channel_dump_statistics(channel_t *chan, int severity); +MOCK_DECL(void, channel_dump_statistics, (channel_t *chan, int severity)); void channel_dump_transport_statistics(channel_t *chan, int severity); const char * channel_get_actual_remote_descr(channel_t *chan); const char * channel_get_actual_remote_address(channel_t *chan); From 5ee25cc185cf7d91c5147faf5dc92b6b305c16ee Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 04:10:15 -0800 Subject: [PATCH 069/184] Add channel/dumpstats unit test --- src/test/test_channel.c | 95 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 588f698854..fc0ef3da4c 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -34,7 +34,11 @@ static double test_overhead_estimate = 1.0f; static int test_releases_count = 0; static circuitmux_t *test_target_cmux = NULL; static unsigned int test_cmux_cells = 0; +static channel_t *dump_statistics_mock_target = NULL; +static int dump_statistics_mock_matches = 0; +static void chan_test_channel_dump_statistics_mock( + channel_t *chan, int severity); static int chan_test_channel_flush_from_first_active_circuit_mock( channel_t *chan, int max); static unsigned int chan_test_circuitmux_num_cells_mock(circuitmux_t *cmux); @@ -55,6 +59,7 @@ static int chan_test_write_packed_cell(channel_t *ch, static int chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell); static void scheduler_channel_doesnt_want_writes_mock(channel_t *ch); +static void test_channel_dumpstats(void *arg); static void test_channel_flush(void *arg); static void test_channel_flushmux(void *arg); static void test_channel_incoming(void *arg); @@ -73,6 +78,26 @@ channel_note_destroy_not_pending_mock(channel_t *ch, ++test_destroy_not_pending_calls; } +/** + * Mock for channel_dump_statistics(); if the channel matches the + * target, bump a counter - otherwise ignore. + */ + +static void +chan_test_channel_dump_statistics_mock(channel_t *chan, int severity) +{ + test_assert(chan != NULL); + + (void)severity; + + if (chan != NULL && chan == dump_statistics_mock_target) { + ++dump_statistics_mock_matches; + } + + done: + return; +} + /** * If the target cmux is the cmux for chan, make fake cells up to the * target number of cells and write them to chan. Otherwise, invoke @@ -414,6 +439,75 @@ scheduler_release_channel_mock(channel_t *ch) return; } +/** + * Test for channel_dumpstats() + */ + +static void +test_channel_dumpstats(void *arg) +{ + channel_t *ch = NULL; + + (void)arg; + + /* Mock these for duration of the test */ + MOCK(scheduler_channel_doesnt_want_writes, + scheduler_channel_doesnt_want_writes_mock); + MOCK(scheduler_release_channel, + scheduler_release_channel_mock); + + /* Set up a new fake channel */ + ch = new_fake_channel(); + test_assert(ch); + ch->cmux = circuitmux_alloc(); + + /* Try to register it */ + channel_register(ch); + test_assert(ch->registered); + + /* Set up mock */ + dump_statistics_mock_target = ch; + dump_statistics_mock_matches = 0; + MOCK(channel_dump_statistics, + chan_test_channel_dump_statistics_mock); + + /* Call channel_dumpstats() */ + channel_dumpstats(LOG_DEBUG); + + /* Assert that we hit the mock */ + test_eq(dump_statistics_mock_matches, 1); + + /* Close the channel */ + channel_mark_for_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSED); + + /* Try again and hit the finished channel */ + channel_dumpstats(LOG_DEBUG); + test_eq(dump_statistics_mock_matches, 2); + + channel_run_cleanup(); + ch = NULL; + + /* Now we should hit nothing */ + channel_dumpstats(LOG_DEBUG); + test_eq(dump_statistics_mock_matches, 2); + + /* Unmock */ + UNMOCK(channel_dump_statistics); + dump_statistics_mock_target = NULL; + dump_statistics_mock_matches = 0; + + done: + tor_free(ch); + + UNMOCK(scheduler_channel_doesnt_want_writes); + UNMOCK(scheduler_release_channel); + + return; +} + static void test_channel_flush(void *arg) { @@ -1429,6 +1523,7 @@ test_channel_write(void *arg) } struct testcase_t channel_tests[] = { + { "dumpstats", test_channel_dumpstats, TT_FORK, NULL, NULL }, { "flush", test_channel_flush, TT_FORK, NULL, NULL }, { "flushmux", test_channel_flushmux, TT_FORK, NULL, NULL }, { "incoming", test_channel_incoming, TT_FORK, NULL, NULL }, From 462eaed43e73af7869bd4ed96561e9bed88a9de3 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 16:23:54 -0800 Subject: [PATCH 070/184] Limited unit test for channel_dump_statistics() --- src/test/test_channel.c | 112 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 1 deletion(-) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index fc0ef3da4c..9ad271d1f2 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -29,6 +29,7 @@ static int test_chan_var_cells_recved = 0; static int test_cells_written = 0; static int test_destroy_not_pending_calls = 0; static int test_doesnt_want_writes_count = 0; +static int test_dumpstats_calls = 0; static int test_has_waiting_cells_count = 0; static double test_overhead_estimate = 1.0f; static int test_releases_count = 0; @@ -46,11 +47,15 @@ static void channel_note_destroy_not_pending_mock(channel_t *ch, circid_t circid); static void chan_test_cell_handler(channel_t *ch, cell_t *cell); +static const char * chan_test_describe_transport(channel_t *ch); +static void chan_test_dumpstats(channel_t *ch, int severity); static void chan_test_var_cell_handler(channel_t *ch, var_cell_t *var_cell); static void chan_test_close(channel_t *ch); static void chan_test_error(channel_t *ch); static void chan_test_finish_close(channel_t *ch); +static const char * chan_test_get_remote_descr(channel_t *ch, int flags); +static int chan_test_is_canonical(channel_t *ch, int req); static size_t chan_test_num_bytes_queued(channel_t *ch); static int chan_test_num_cells_writeable(channel_t *ch); static int chan_test_write_cell(channel_t *ch, cell_t *cell); @@ -78,6 +83,15 @@ channel_note_destroy_not_pending_mock(channel_t *ch, ++test_destroy_not_pending_calls; } +static const char * +chan_test_describe_transport(channel_t *ch) +{ + test_assert(ch != NULL); + + done: + return "Fake channel for unit tests"; +} + /** * Mock for channel_dump_statistics(); if the channel matches the * target, bump a counter - otherwise ignore. @@ -172,6 +186,23 @@ chan_test_cell_handler(channel_t *ch, return; } +/* + * Fake transport-specific stats call + */ + +static void +chan_test_dumpstats(channel_t *ch, int severity) +{ + test_assert(ch != NULL); + + (void)severity; + + ++test_dumpstats_calls; + + done: + return; +} + /* * Handle an incoming variable-size cell for unit tests */ @@ -233,6 +264,16 @@ chan_test_finish_close(channel_t *ch) return; } +static const char * +chan_test_get_remote_descr(channel_t *ch, int flags) +{ + test_assert(ch); + test_eq(flags & ~(GRD_FLAG_ORIGINAL | GRD_FLAG_ADDR_ONLY), 0); + + done: + return "Fake channel for unit tests; no real endpoint"; +} + static double chan_test_get_overhead_estimate(channel_t *ch) { @@ -242,6 +283,17 @@ chan_test_get_overhead_estimate(channel_t *ch) return test_overhead_estimate; } +static int +chan_test_is_canonical(channel_t *ch, int req) +{ + test_assert(ch != NULL); + test_assert(req == 0 || req == 1); + + done: + /* Fake channels are always canonical */ + return 1; +} + static size_t chan_test_num_bytes_queued(channel_t *ch) { @@ -440,13 +492,16 @@ scheduler_release_channel_mock(channel_t *ch) } /** - * Test for channel_dumpstats() + * Test for channel_dumpstats() and limited test for + * channel_dump_statistics() */ static void test_channel_dumpstats(void *arg) { channel_t *ch = NULL; + cell_t *cell = NULL; + int old_count; (void)arg; @@ -499,7 +554,62 @@ test_channel_dumpstats(void *arg) dump_statistics_mock_target = NULL; dump_statistics_mock_matches = 0; + /* Now make another channel */ + ch = new_fake_channel(); + test_assert(ch); + ch->cmux = circuitmux_alloc(); + channel_register(ch); + test_assert(ch->registered); + /* Lie about its age so dumpstats gets coverage for rate calculations */ + ch->timestamp_created = time(NULL) - 30; + test_assert(ch->timestamp_created > 0); + test_assert(time(NULL) > ch->timestamp_created); + + /* Put cells through it both ways to make the counters non-zero */ + cell = tor_malloc_zero(sizeof(*cell)); + make_fake_cell(cell); + test_chan_accept_cells = 1; + old_count = test_cells_written; + channel_write_cell(ch, cell); + cell = NULL; + test_eq(test_cells_written, old_count + 1); + test_assert(ch->n_bytes_xmitted > 0); + test_assert(ch->n_cells_xmitted > 0); + + /* Receive path */ + channel_set_cell_handlers(ch, + chan_test_cell_handler, + chan_test_var_cell_handler); + test_eq(channel_get_cell_handler(ch), chan_test_cell_handler); + test_eq(channel_get_var_cell_handler(ch), chan_test_var_cell_handler); + cell = tor_malloc_zero(sizeof(cell_t)); + make_fake_cell(cell); + old_count = test_chan_fixed_cells_recved; + channel_queue_cell(ch, cell); + cell = NULL; + test_eq(test_chan_fixed_cells_recved, old_count + 1); + test_assert(ch->n_bytes_recved > 0); + test_assert(ch->n_cells_recved > 0); + + /* Test channel_dump_statistics */ + ch->describe_transport = chan_test_describe_transport; + ch->dumpstats = chan_test_dumpstats; + ch->get_remote_descr = chan_test_get_remote_descr; + ch->is_canonical = chan_test_is_canonical; + old_count = test_dumpstats_calls; + channel_dump_statistics(ch, LOG_DEBUG); + test_eq(test_dumpstats_calls, old_count + 1); + + /* Close the channel */ + channel_mark_for_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSING); + chan_test_finish_close(ch); + test_eq(ch->state, CHANNEL_STATE_CLOSED); + channel_run_cleanup(); + ch = NULL; + done: + tor_free(cell); tor_free(ch); UNMOCK(scheduler_channel_doesnt_want_writes); From 50d5fb87bd6e763895eb0a784e4dbb40a132b759 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Wed, 22 Jan 2014 16:51:44 -0800 Subject: [PATCH 071/184] Initial test_channeltls.c --- src/test/Makefile.nmake | 6 +++--- src/test/include.am | 1 + src/test/test.c | 2 ++ src/test/test_channeltls.c | 18 ++++++++++++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/test/test_channeltls.c diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index 2a347bd677..7986eb07ef 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -11,9 +11,9 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \ ws2_32.lib advapi32.lib shell32.lib \ crypt32.lib gdi32.lib user32.lib -TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_containers.obj \ - test_controller_events.ogj test_crypto.obj test_data.obj test_dir.obj \ - test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ +TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_channeltls.obj \ + test_containers.obj test_controller_events.obj test_crypto.obj test_data.obj \ + test_dir.obj test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ test_cell_formats.obj test_relay.obj test_replay.obj \ test_introduce.obj tinytest.obj test_hs.obj diff --git a/src/test/include.am b/src/test/include.am index 531b81ef52..fdd88db0ea 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -21,6 +21,7 @@ src_test_test_SOURCES = \ src/test/test_buffers.c \ src/test/test_cell_formats.c \ src/test/test_channel.c \ + src/test/test_channeltls.c \ src/test/test_circuitlist.c \ src/test/test_circuitmux.c \ src/test/test_containers.c \ diff --git a/src/test/test.c b/src/test/test.c index 7ade83d907..d0f00416ab 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1310,6 +1310,7 @@ extern struct testcase_t status_tests[]; extern struct testcase_t routerset_tests[]; extern struct testcase_t router_tests[]; extern struct testcase_t channel_tests[]; +extern struct testcase_t channeltls_tests[]; extern struct testcase_t relay_tests[]; static struct testgroup_t testgroups[] = { @@ -1344,6 +1345,7 @@ static struct testgroup_t testgroups[] = { { "status/" , status_tests }, { "routerset/" , routerset_tests }, { "channel/", channel_tests }, + { "channeltls/", channeltls_tests }, { "relay/" , relay_tests }, END_OF_GROUPS }; diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c new file mode 100644 index 0000000000..6284cc0a05 --- /dev/null +++ b/src/test/test_channeltls.c @@ -0,0 +1,18 @@ +/* Copyright (c) 2013, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#define TOR_CHANNEL_INTERNAL_ +#include "or.h" +#include "channel.h" +#include "channeltls.h" +/* For init/free stuff */ +#include "scheduler.h" + +/* Test suite stuff */ +#include "test.h" +#include "fakechans.h" + +struct testcase_t channeltls_tests[] = { + END_OF_TESTCASES +}; + From 3bc7108d2cfb6795f1beb0f5dbb3ab66fe1601d3 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 04:52:59 -0800 Subject: [PATCH 072/184] Make is_local_addr() mockable --- src/or/config.c | 4 ++-- src/or/config.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 4ae9fadfeb..86d7c6e502 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -2259,8 +2259,8 @@ resolve_my_address(int warn_severity, const or_options_t *options, /** Return true iff addr is judged to be on the same network as us, or * on a private network. */ -int -is_local_addr(const tor_addr_t *addr) +MOCK_IMPL(int, +is_local_addr, (const tor_addr_t *addr)) { if (tor_addr_is_internal(addr, 0)) return 1; diff --git a/src/or/config.h b/src/or/config.h index 8a1919c2ed..bf176a6860 100644 --- a/src/or/config.h +++ b/src/or/config.h @@ -32,7 +32,7 @@ uint32_t get_last_resolved_addr(void); int resolve_my_address(int warn_severity, const or_options_t *options, uint32_t *addr_out, const char **method_out, char **hostname_out); -int is_local_addr(const tor_addr_t *addr); +MOCK_DECL(int, is_local_addr, (const tor_addr_t *addr)); void options_init(or_options_t *options); #define OPTIONS_DUMP_MINIMAL 1 From 3b080230e9fda4befda17739d202b9bc59006add Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 04:54:44 -0800 Subject: [PATCH 073/184] Make connection_or_connect() mockable --- src/or/connection_or.c | 8 ++++---- src/or/connection_or.h | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 445335b43a..52f417d9dd 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -1174,10 +1174,10 @@ connection_or_notify_error(or_connection_t *conn, * * Return the launched conn, or NULL if it failed. */ -or_connection_t * -connection_or_connect(const tor_addr_t *_addr, uint16_t port, - const char *id_digest, - channel_tls_t *chan) + +MOCK_IMPL(or_connection_t *, +connection_or_connect, (const tor_addr_t *_addr, uint16_t port, + const char *id_digest, channel_tls_t *chan)) { or_connection_t *conn; const or_options_t *options = get_options(); diff --git a/src/or/connection_or.h b/src/or/connection_or.h index 7b46d7d111..c922fb5d52 100644 --- a/src/or/connection_or.h +++ b/src/or/connection_or.h @@ -37,9 +37,10 @@ void connection_or_connect_failed(or_connection_t *conn, int reason, const char *msg); void connection_or_notify_error(or_connection_t *conn, int reason, const char *msg); -or_connection_t *connection_or_connect(const tor_addr_t *addr, uint16_t port, - const char *id_digest, - channel_tls_t *chan); +MOCK_DECL(or_connection_t *, + connection_or_connect, + (const tor_addr_t *addr, uint16_t port, + const char *id_digest, channel_tls_t *chan)); void connection_or_close_normally(or_connection_t *orconn, int flush); void connection_or_close_for_error(or_connection_t *orconn, int flush); From 8719f8ff09346f2aaa596ec77ff326923379ccde Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 05:59:46 -0800 Subject: [PATCH 074/184] Implement tlschan create and overhead estimate unit tests --- src/test/test_channeltls.c | 212 ++++++++++++++++++++++++++++++++++++- 1 file changed, 211 insertions(+), 1 deletion(-) diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c index 6284cc0a05..9be738f8c6 100644 --- a/src/test/test_channeltls.c +++ b/src/test/test_channeltls.c @@ -1,18 +1,228 @@ -/* Copyright (c) 2013, The Tor Project, Inc. */ +/* Copyright (c) 2014, The Tor Project, Inc. */ /* See LICENSE for licensing information */ +#include + #define TOR_CHANNEL_INTERNAL_ #include "or.h" +#include "address.h" #include "channel.h" #include "channeltls.h" +#include "connection_or.h" +#include "config.h" /* For init/free stuff */ #include "scheduler.h" +#include "tortls.h" /* Test suite stuff */ #include "test.h" #include "fakechans.h" +/* The channeltls unit tests */ +static void test_channeltls_create(void *arg); +static void test_channeltls_overhead_estimate(void *arg); + +/* Mocks used by channeltls unit tests */ +static or_connection_t * tlschan_connection_or_connect_mock( + const tor_addr_t *addr, + uint16_t port, + const char *digest, + channel_tls_t *tlschan); +static int tlschan_is_local_addr_mock(const tor_addr_t *addr); + +/* Fake close method */ +static void tlschan_fake_close_method(channel_t *chan); + +/* Flags controlling behavior of channeltls unit test mocks */ +static int tlschan_local = 0; + +/* Thing to cast to fake tor_tls_t * to appease assert_connection_ok() */ +static int fake_tortls = 0; /* Bleh... */ + +static void +test_channeltls_create(void *arg) +{ + tor_addr_t test_addr; + channel_t *ch = NULL; + const char test_digest[DIGEST_LEN] = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14 }; + + (void)arg; + + /* Set up a fake address to fake-connect to */ + test_addr.family = AF_INET; + test_addr.addr.in_addr.s_addr = htonl(0x01020304); + + /* For this test we always want the address to be treated as non-local */ + tlschan_local = 0; + /* Install is_local_addr() mock */ + MOCK(is_local_addr, tlschan_is_local_addr_mock); + + /* Install mock for connection_or_connect() */ + MOCK(connection_or_connect, tlschan_connection_or_connect_mock); + + /* Try connecting */ + ch = channel_tls_connect(&test_addr, 567, test_digest); + test_assert(ch != NULL); + + done: + if (ch) { + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + /* + * Use fake close method that doesn't try to do too much to fake + * orconn + */ + ch->close = tlschan_fake_close_method; + channel_mark_for_close(ch); + tor_free(ch); + UNMOCK(scheduler_release_channel); + } + + UNMOCK(connection_or_connect); + UNMOCK(is_local_addr); + + return; +} + +static void +test_channeltls_overhead_estimate(void *arg) +{ + tor_addr_t test_addr; + channel_t *ch = NULL; + const char test_digest[DIGEST_LEN] = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14 }; + float r; + channel_tls_t *tlschan = NULL; + + (void)arg; + + /* Set up a fake address to fake-connect to */ + test_addr.family = AF_INET; + test_addr.addr.in_addr.s_addr = htonl(0x01020304); + + /* For this test we always want the address to be treated as non-local */ + tlschan_local = 0; + /* Install is_local_addr() mock */ + MOCK(is_local_addr, tlschan_is_local_addr_mock); + + /* Install mock for connection_or_connect() */ + MOCK(connection_or_connect, tlschan_connection_or_connect_mock); + + /* Try connecting */ + ch = channel_tls_connect(&test_addr, 567, test_digest); + test_assert(ch != NULL); + + /* First case: silly low ratios should get clamped to 1.0f */ + tlschan = BASE_CHAN_TO_TLS(ch); + test_assert(tlschan != NULL); + tlschan->conn->bytes_xmitted = 128; + tlschan->conn->bytes_xmitted_by_tls = 64; + r = ch->get_overhead_estimate(ch); + test_assert(fabsf(r - 1.0f) < 1E-12); + + tlschan->conn->bytes_xmitted_by_tls = 127; + r = ch->get_overhead_estimate(ch); + test_assert(fabsf(r - 1.0f) < 1E-12); + + /* Now middle of the range */ + tlschan->conn->bytes_xmitted_by_tls = 192; + r = ch->get_overhead_estimate(ch); + test_assert(fabsf(r - 1.5f) < 1E-12); + + /* Now above the 2.0f clamp */ + tlschan->conn->bytes_xmitted_by_tls = 257; + r = ch->get_overhead_estimate(ch); + test_assert(fabsf(r - 2.0f) < 1E-12); + + tlschan->conn->bytes_xmitted_by_tls = 512; + r = ch->get_overhead_estimate(ch); + test_assert(fabsf(r - 2.0f) < 1E-12); + + done: + if (ch) { + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + /* + * Use fake close method that doesn't try to do too much to fake + * orconn + */ + ch->close = tlschan_fake_close_method; + channel_mark_for_close(ch); + tor_free(ch); + UNMOCK(scheduler_release_channel); + } + + UNMOCK(connection_or_connect); + UNMOCK(is_local_addr); + + return; +} + +static or_connection_t * +tlschan_connection_or_connect_mock(const tor_addr_t *addr, + uint16_t port, + const char *digest, + channel_tls_t *tlschan) +{ + or_connection_t *result = NULL; + + test_assert(addr != NULL); + test_assert(port != 0); + test_assert(digest != NULL); + test_assert(tlschan != NULL); + + /* Make a fake orconn */ + result = tor_malloc_zero(sizeof(*result)); + result->base_.magic = OR_CONNECTION_MAGIC; + result->base_.state = OR_CONN_STATE_OPEN; + result->base_.type = CONN_TYPE_OR; + result->base_.socket_family = addr->family; + result->base_.address = tor_strdup(""); + memcpy(&(result->base_.addr), addr, sizeof(tor_addr_t)); + result->base_.port = port; + memcpy(result->identity_digest, digest, DIGEST_LEN); + result->chan = tlschan; + memcpy(&(result->real_addr), addr, sizeof(tor_addr_t)); + result->tls = (tor_tls_t *)((void *)(&fake_tortls)); + + done: + return result; +} + +static void +tlschan_fake_close_method(channel_t *chan) +{ + channel_tls_t *tlschan = NULL; + + test_assert(chan != NULL); + test_eq(chan->magic, TLS_CHAN_MAGIC); + + tlschan = BASE_CHAN_TO_TLS(chan); + test_assert(tlschan != NULL); + + /* Just free the fake orconn */ + tor_free(tlschan->conn); + + channel_closed(chan); + + done: + return; +} + +static int +tlschan_is_local_addr_mock(const tor_addr_t *addr) +{ + test_assert(addr != NULL); + + done: + return tlschan_local; +} + struct testcase_t channeltls_tests[] = { + { "create", test_channeltls_create, TT_FORK, NULL, NULL }, + { "overhead_estimate", test_channeltls_overhead_estimate, + TT_FORK, NULL, NULL }, END_OF_TESTCASES }; From a2de0a1034b3d4c1433c548526a1401e51540bc1 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 06:42:14 -0800 Subject: [PATCH 075/184] Make buf_datalen() mockable --- src/or/buffers.c | 4 ++-- src/or/buffers.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/buffers.c b/src/or/buffers.c index 033f86288e..85eff36b4c 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -559,8 +559,8 @@ buf_clear(buf_t *buf) } /** Return the number of bytes stored in buf */ -size_t -buf_datalen(const buf_t *buf) +MOCK_IMPL(size_t, +buf_datalen, (const buf_t *buf)) { return buf->datalen; } diff --git a/src/or/buffers.h b/src/or/buffers.h index c90e14750e..6b91a2d6c1 100644 --- a/src/or/buffers.h +++ b/src/or/buffers.h @@ -24,7 +24,7 @@ void buf_shrink(buf_t *buf); size_t buf_shrink_freelists(int free_all); void buf_dump_freelist_sizes(int severity); -size_t buf_datalen(const buf_t *buf); +MOCK_DECL(size_t, buf_datalen, (const buf_t *buf)); size_t buf_allocation(const buf_t *buf); size_t buf_slack(const buf_t *buf); From 030b0fe1076bd8747e3fecf32740c0b3fd3759eb Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 06:56:18 -0800 Subject: [PATCH 076/184] Add channeltls/num_bytes_queued unit test --- src/test/test_channeltls.c | 95 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c index 9be738f8c6..b70d0fd2fa 100644 --- a/src/test/test_channeltls.c +++ b/src/test/test_channeltls.c @@ -6,6 +6,7 @@ #define TOR_CHANNEL_INTERNAL_ #include "or.h" #include "address.h" +#include "buffers.h" #include "channel.h" #include "channeltls.h" #include "connection_or.h" @@ -20,9 +21,11 @@ /* The channeltls unit tests */ static void test_channeltls_create(void *arg); +static void test_channeltls_num_bytes_queued(void *arg); static void test_channeltls_overhead_estimate(void *arg); /* Mocks used by channeltls unit tests */ +static size_t tlschan_buf_datalen_mock(const buf_t *buf); static or_connection_t * tlschan_connection_or_connect_mock( const tor_addr_t *addr, uint16_t port, @@ -35,6 +38,8 @@ static void tlschan_fake_close_method(channel_t *chan); /* Flags controlling behavior of channeltls unit test mocks */ static int tlschan_local = 0; +static const buf_t * tlschan_buf_datalen_mock_target = NULL; +static size_t tlschan_buf_datalen_mock_size = 0; /* Thing to cast to fake tor_tls_t * to appease assert_connection_ok() */ static int fake_tortls = 0; /* Bleh... */ @@ -85,6 +90,84 @@ test_channeltls_create(void *arg) return; } +static void +test_channeltls_num_bytes_queued(void *arg) +{ + tor_addr_t test_addr; + channel_t *ch = NULL; + const char test_digest[DIGEST_LEN] = { + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14 }; + channel_tls_t *tlschan = NULL; + size_t len; + int fake_outbuf = 0; + + (void)arg; + + /* Set up a fake address to fake-connect to */ + test_addr.family = AF_INET; + test_addr.addr.in_addr.s_addr = htonl(0x01020304); + + /* For this test we always want the address to be treated as non-local */ + tlschan_local = 0; + /* Install is_local_addr() mock */ + MOCK(is_local_addr, tlschan_is_local_addr_mock); + + /* Install mock for connection_or_connect() */ + MOCK(connection_or_connect, tlschan_connection_or_connect_mock); + + /* Try connecting */ + ch = channel_tls_connect(&test_addr, 567, test_digest); + test_assert(ch != NULL); + + /* + * Next, we have to test ch->num_bytes_queued, which is + * channel_tls_num_bytes_queued_method. We can't mock + * connection_get_outbuf_len() directly because it's static INLINE + * in connection.h, but we can mock buf_datalen(). Note that + * if bufferevents ever work, this will break with them enabled. + */ + + test_assert(ch->num_bytes_queued != NULL); + tlschan = BASE_CHAN_TO_TLS(ch); + test_assert(tlschan != NULL); + if (TO_CONN(tlschan->conn)->outbuf == NULL) { + /* We need an outbuf to make sure buf_datalen() gets called */ + fake_outbuf = 1; + TO_CONN(tlschan->conn)->outbuf = buf_new(); + } + tlschan_buf_datalen_mock_target = TO_CONN(tlschan->conn)->outbuf; + tlschan_buf_datalen_mock_size = 1024; + MOCK(buf_datalen, tlschan_buf_datalen_mock); + len = ch->num_bytes_queued(ch); + test_eq(len, tlschan_buf_datalen_mock_size); + UNMOCK(buf_datalen); + tlschan_buf_datalen_mock_target = NULL; + tlschan_buf_datalen_mock_size = 0; + if (fake_outbuf) { + buf_free(TO_CONN(tlschan->conn)->outbuf); + TO_CONN(tlschan->conn)->outbuf = NULL; + } + + done: + if (ch) { + MOCK(scheduler_release_channel, scheduler_release_channel_mock); + /* + * Use fake close method that doesn't try to do too much to fake + * orconn + */ + ch->close = tlschan_fake_close_method; + channel_mark_for_close(ch); + tor_free(ch); + UNMOCK(scheduler_release_channel); + } + + UNMOCK(connection_or_connect); + UNMOCK(is_local_addr); + + return; +} + static void test_channeltls_overhead_estimate(void *arg) { @@ -159,6 +242,16 @@ test_channeltls_overhead_estimate(void *arg) return; } +static size_t +tlschan_buf_datalen_mock(const buf_t *buf) +{ + if (buf != NULL && buf == tlschan_buf_datalen_mock_target) { + return tlschan_buf_datalen_mock_size; + }else { + return buf_datalen__real(buf); + } +} + static or_connection_t * tlschan_connection_or_connect_mock(const tor_addr_t *addr, uint16_t port, @@ -221,6 +314,8 @@ tlschan_is_local_addr_mock(const tor_addr_t *addr) struct testcase_t channeltls_tests[] = { { "create", test_channeltls_create, TT_FORK, NULL, NULL }, + { "num_bytes_queued", test_channeltls_num_bytes_queued, + TT_FORK, NULL, NULL }, { "overhead_estimate", test_channeltls_overhead_estimate, TT_FORK, NULL, NULL }, END_OF_TESTCASES From 5e9a88e001f66092b8b3fd5fd14877214d038027 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 07:11:13 -0800 Subject: [PATCH 077/184] Add channel_tls_num_cells_writeable_method() coverage to channeltls/num_bytes_queued unit test --- src/test/test_channeltls.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c index b70d0fd2fa..4dcf4c5579 100644 --- a/src/test/test_channeltls.c +++ b/src/test/test_channeltls.c @@ -100,7 +100,7 @@ test_channeltls_num_bytes_queued(void *arg) 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14 }; channel_tls_t *tlschan = NULL; size_t len; - int fake_outbuf = 0; + int fake_outbuf = 0, n; (void)arg; @@ -141,6 +141,15 @@ test_channeltls_num_bytes_queued(void *arg) MOCK(buf_datalen, tlschan_buf_datalen_mock); len = ch->num_bytes_queued(ch); test_eq(len, tlschan_buf_datalen_mock_size); + /* + * We also cover num_cells_writeable here; since wide_circ_ids = 0 on + * the fake tlschans, cell_network_size returns 512, and so with + * tlschan_buf_datalen_mock_size == 1024, we should be able to write + * ceil((OR_CONN_HIGHWATER - 1024) / 512) = ceil(OR_CONN_HIGHWATER / 512) + * - 2 cells. + */ + n = ch->num_cells_writeable(ch); + test_eq(n, CEIL_DIV(OR_CONN_HIGHWATER, 512) - 2); UNMOCK(buf_datalen); tlschan_buf_datalen_mock_target = NULL; tlschan_buf_datalen_mock_size = 0; From 5a07fb96f2a4072bd9ee31a887ac0c790fdaf6c4 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 20:54:50 -0800 Subject: [PATCH 078/184] Make tor_libevent_get_base() mockable --- src/common/compat_libevent.c | 4 ++-- src/common/compat_libevent.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c index 74b54bb855..6b2241ad30 100644 --- a/src/common/compat_libevent.c +++ b/src/common/compat_libevent.c @@ -280,8 +280,8 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg) } /** Return the current Libevent event base that we're set up to use. */ -struct event_base * -tor_libevent_get_base(void) +MOCK_IMPL(struct event_base *, +tor_libevent_get_base, (void)) { return the_event_base; } diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h index 9ee7b49cfb..45d007f9b8 100644 --- a/src/common/compat_libevent.h +++ b/src/common/compat_libevent.h @@ -72,7 +72,7 @@ typedef struct tor_libevent_cfg { } tor_libevent_cfg; void tor_libevent_initialize(tor_libevent_cfg *cfg); -struct event_base *tor_libevent_get_base(void); +MOCK_DECL(struct event_base *, tor_libevent_get_base, (void)); const char *tor_libevent_get_method(void); void tor_check_libevent_version(const char *m, int server, const char **badness_out); From 9869254608587dbd0d33bcba0233967f6bf3c326 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 20:55:13 -0800 Subject: [PATCH 079/184] Make scheduler.c static globals visible to test suite --- src/or/scheduler.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 367480cb31..71da4a4435 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -109,27 +109,27 @@ */ /* Pqueue of channels that can write and have cells (pending work) */ -static smartlist_t *channels_pending = NULL; +STATIC smartlist_t *channels_pending = NULL; /* * This event runs the scheduler from its callback, and is manually * activated whenever a channel enters open for writes/cells to send. */ -static struct event *run_sched_ev = NULL; +STATIC struct event *run_sched_ev = NULL; /* * Queue heuristic; this is not the queue size, but an 'effective queuesize' * that ages out contributions from stalled channels. */ -static uint64_t queue_heuristic = 0; +STATIC uint64_t queue_heuristic = 0; /* * Timestamp for last queue heuristic update */ -static time_t queue_heuristic_timestamp = 0; +STATIC time_t queue_heuristic_timestamp = 0; /* Scheduler static function declarations */ From 0af88f909661b8fd2987beb839c78b804212abc7 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 20:55:34 -0800 Subject: [PATCH 080/184] Initial test_scheduler.c --- src/test/Makefile.nmake | 8 +-- src/test/include.am | 1 + src/test/test.c | 2 + src/test/test_scheduler.c | 141 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 src/test/test_scheduler.c diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake index 7986eb07ef..e2cf53895f 100644 --- a/src/test/Makefile.nmake +++ b/src/test/Makefile.nmake @@ -12,10 +12,10 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \ crypt32.lib gdi32.lib user32.lib TEST_OBJECTS = test.obj test_addr.obj test_channel.obj test_channeltls.obj \ - test_containers.obj test_controller_events.obj test_crypto.obj test_data.obj \ - test_dir.obj test_microdesc.obj test_pt.obj test_util.obj test_config.obj \ - test_cell_formats.obj test_relay.obj test_replay.obj \ - test_introduce.obj tinytest.obj test_hs.obj + test_containers.obj test_controller_events.obj test_crypto.obj \ + test_data.obj test_dir.obj test_microdesc.obj test_pt.obj test_util.obj \ + test_config.obj test_cell_formats.obj test_relay.obj test_replay.obj \ + test_scheduler.obj test_introduce.obj test_hs.obj tinytest.obj tinytest.obj: ..\ext\tinytest.c $(CC) $(CFLAGS) /D snprintf=_snprintf /c ..\ext\tinytest.c diff --git a/src/test/include.am b/src/test/include.am index fdd88db0ea..5a8652b031 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -42,6 +42,7 @@ src_test_test_SOURCES = \ src/test/test_relay.c \ src/test/test_replay.c \ src/test/test_routerkeys.c \ + src/test/test_scheduler.c \ src/test/test_socks.c \ src/test/test_util.c \ src/test/test_config.c \ diff --git a/src/test/test.c b/src/test/test.c index d0f00416ab..8d45ef0f59 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1312,6 +1312,7 @@ extern struct testcase_t router_tests[]; extern struct testcase_t channel_tests[]; extern struct testcase_t channeltls_tests[]; extern struct testcase_t relay_tests[]; +extern struct testcase_t scheduler_tests[]; static struct testgroup_t testgroups[] = { { "", test_array }, @@ -1347,6 +1348,7 @@ static struct testgroup_t testgroups[] = { { "channel/", channel_tests }, { "channeltls/", channeltls_tests }, { "relay/" , relay_tests }, + { "scheduler/", scheduler_tests }, END_OF_GROUPS }; diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c new file mode 100644 index 0000000000..e8bceeb2d4 --- /dev/null +++ b/src/test/test_scheduler.c @@ -0,0 +1,141 @@ +/* Copyright (c) 2014, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#include + +#include "orconfig.h" + +/* Libevent stuff */ +#ifdef HAVE_EVENT2_EVENT_H +#include +#else +#include +#endif + +#define TOR_CHANNEL_INTERNAL_ +#include "or.h" +#include "compat_libevent.h" +#include "scheduler.h" + +/* Test suite stuff */ +#include "test.h" + +/* Statics in scheduler.c exposed to the test suite */ +extern smartlist_t *channels_pending; +extern struct event *run_sched_ev; +extern uint64_t queue_heuristic; +extern time_t queue_heuristic_timestamp; + +/* Event base for scheduelr tests */ +static struct event_base *mock_event_base = NULL; + +/* Setup for mock event stuff */ +static void mock_event_free_all(void); +static void mock_event_init(void); + +/* Mocks used by scheduler tests */ +static struct event_base * tor_libevent_get_base_mock(void); + +/* Scheduler test cases */ +static void test_scheduler_initfree(void *arg); + +/* Mock event init/free */ + +/* Shamelessly stolen from compat_libevent.c */ +#define V(major, minor, patch) \ + (((major) << 24) | ((minor) << 16) | ((patch) << 8)) + +static void +mock_event_free_all(void) +{ + test_assert(mock_event_base != NULL); + + if (mock_event_base) { + event_base_free(mock_event_base); + mock_event_base = NULL; + } + + test_eq(mock_event_base, NULL); + + done: + return; +} + +static void +mock_event_init(void) +{ +#ifdef HAVE_EVENT2_EVENT_H + struct event_config *cfg = NULL; +#endif + + test_eq(mock_event_base, NULL); + + /* + * Really cut down from tor_libevent_initialize of + * src/common/compat_libevent.c to kill config dependencies + */ + + if (!mock_event_base) { +#ifdef HAVE_EVENT2_EVENT_H + cfg = event_config_new(); +#if LIBEVENT_VERSION_NUMBER >= V(2,0,9) + /* We can enable changelist support with epoll, since we don't give + * Libevent any dup'd fds. This lets us avoid some syscalls. */ + event_config_set_flag(cfg, EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST); +#endif + mock_event_base = event_base_new_with_config(cfg); + event_config_free(cfg); +#else + mock_event_base = event_init(); +#endif + } + + test_assert(mock_event_base != NULL); + + done: + return; +} + +/* Mocks */ + +static struct event_base * +tor_libevent_get_base_mock(void) +{ + return mock_event_base; +} + +/* Test cases */ + +static void +test_scheduler_initfree(void *arg) +{ + (void)arg; + + test_eq(channels_pending, NULL); + test_eq(run_sched_ev, NULL); + + mock_event_init(); + MOCK(tor_libevent_get_base, tor_libevent_get_base_mock); + + scheduler_init(); + + test_assert(channels_pending != NULL); + test_assert(run_sched_ev != NULL); + + scheduler_free_all(); + + UNMOCK(tor_libevent_get_base); + mock_event_free_all(); + + test_eq(channels_pending, NULL); + test_eq(run_sched_ev, NULL); + + done: + return; +} + +struct testcase_t scheduler_tests[] = { + { "initfree", test_scheduler_initfree, TT_FORK, NULL, NULL }, + END_OF_TESTCASES +}; + From 71a9ed6feb9e28cce0a2e776e23b440b0139e479 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 21:13:26 -0800 Subject: [PATCH 081/184] Make some scheduler.c static functions visible to the test suite --- src/or/scheduler.c | 7 +++---- src/or/scheduler.h | 7 +++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 71da4a4435..1b4ae04182 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -12,6 +12,7 @@ #include "channel.h" #include "compat_libevent.h" +#define SCHEDULER_PRIVATE_ #include "scheduler.h" #ifdef HAVE_EVENT2_EVENT_H @@ -141,8 +142,6 @@ static void scheduler_retrigger(void); #if 0 static void scheduler_trigger(void); #endif -static uint64_t scheduler_get_queue_heuristic(void); -static void scheduler_update_queue_heuristic(time_t now); /* Scheduler function implementations */ @@ -642,7 +641,7 @@ scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj) * Query the current value of the queue heuristic */ -static uint64_t +STATIC uint64_t scheduler_get_queue_heuristic(void) { time_t now = approx_time(); @@ -656,7 +655,7 @@ scheduler_get_queue_heuristic(void) * Adjust the queue heuristic value to the present time */ -static void +STATIC void scheduler_update_queue_heuristic(time_t now) { time_t diff; diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 7f59ec45d0..3c0d86dabb 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -34,5 +34,12 @@ void scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj); /* Notify scheduler that a channel's queue position may have changed */ void scheduler_touch_channel(channel_t *chan); +/* Things only scheduler.c and its test suite should see */ + +#ifdef SCHEDULER_PRIVATE_ +STATIC uint64_t scheduler_get_queue_heuristic(void); +STATIC void scheduler_update_queue_heuristic(time_t now); +#endif + #endif /* !defined(TOR_SCHEDULER_H) */ From 030608d68d393c90fb789638e5e93ac6af7d4f5e Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Thu, 23 Jan 2014 21:13:44 -0800 Subject: [PATCH 082/184] Add scheduler/queue_heuristic unit test --- src/test/test_scheduler.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index e8bceeb2d4..02426f3723 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -15,6 +15,7 @@ #define TOR_CHANNEL_INTERNAL_ #include "or.h" #include "compat_libevent.h" +#define SCHEDULER_PRIVATE_ #include "scheduler.h" /* Test suite stuff */ @@ -134,8 +135,44 @@ test_scheduler_initfree(void *arg) return; } +static void +test_scheduler_queue_heuristic(void *arg) +{ + time_t now = approx_time(); + uint64_t qh; + + (void)arg; + + queue_heuristic = 0; + queue_heuristic_timestamp = 0; + + /* Not yet inited case */ + scheduler_update_queue_heuristic(now - 180); + test_eq(queue_heuristic, 0); + test_eq(queue_heuristic_timestamp, now - 180); + + queue_heuristic = 1000000000L; + queue_heuristic_timestamp = now - 120; + + scheduler_update_queue_heuristic(now - 119); + test_eq(queue_heuristic, 500000000L); + test_eq(queue_heuristic_timestamp, now - 119); + + scheduler_update_queue_heuristic(now - 116); + test_eq(queue_heuristic, 62500000L); + test_eq(queue_heuristic_timestamp, now - 116); + + qh = scheduler_get_queue_heuristic(); + test_eq(qh, 0); + + done: + return; +} + struct testcase_t scheduler_tests[] = { { "initfree", test_scheduler_initfree, TT_FORK, NULL, NULL }, + { "queue_heuristic", test_scheduler_queue_heuristic, + TT_FORK, NULL, NULL }, END_OF_TESTCASES }; From c5f73e52e54a60581374ff6355104aea3e0f6233 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 24 Jan 2014 03:10:55 -0800 Subject: [PATCH 083/184] Make circuitmux_compare_muxes() and circuitmux_get_policy() mockable --- src/or/circuitmux.c | 8 ++++---- src/or/circuitmux.h | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c index 71bc4efc4a..7175b6bf13 100644 --- a/src/or/circuitmux.c +++ b/src/or/circuitmux.c @@ -621,8 +621,8 @@ circuitmux_clear_policy(circuitmux_t *cmux) * Return the policy currently installed on a circuitmux_t */ -const circuitmux_policy_t * -circuitmux_get_policy(circuitmux_t *cmux) +MOCK_IMPL(const circuitmux_policy_t *, +circuitmux_get_policy, (circuitmux_t *cmux)) { tor_assert(cmux); @@ -1961,8 +1961,8 @@ circuitmux_count_queued_destroy_cells(const channel_t *chan, * support the cmp_cmux method, return 0. */ -int -circuitmux_compare_muxes(circuitmux_t *cmux_1, circuitmux_t *cmux_2) +MOCK_IMPL(int, +circuitmux_compare_muxes, (circuitmux_t *cmux_1, circuitmux_t *cmux_2)) { const circuitmux_policy_t *policy; diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h index 9a5ea7d675..00707d97e2 100644 --- a/src/or/circuitmux.h +++ b/src/or/circuitmux.h @@ -108,7 +108,8 @@ void circuitmux_free(circuitmux_t *cmux); /* Policy control */ void circuitmux_clear_policy(circuitmux_t *cmux); -const circuitmux_policy_t * circuitmux_get_policy(circuitmux_t *cmux); +MOCK_DECL(const circuitmux_policy_t *, + circuitmux_get_policy, (circuitmux_t *cmux)); void circuitmux_set_policy(circuitmux_t *cmux, const circuitmux_policy_t *pol); @@ -152,7 +153,8 @@ void circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux, channel_t *chan); /* Optional interchannel comparisons for scheduling */ -int circuitmux_compare_muxes(circuitmux_t *cmux_1, circuitmux_t *cmux_2); +MOCK_DECL(int, circuitmux_compare_muxes, + (circuitmux_t *cmux_1, circuitmux_t *cmux_2)); #endif /* TOR_CIRCUITMUX_H */ From b7125961de3e7d2687cc52d63d000ad6b6320d63 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 24 Jan 2014 03:12:28 -0800 Subject: [PATCH 084/184] Expose scheduler_compare_channels() to test suite --- src/or/scheduler.c | 3 +-- src/or/scheduler.h | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 1b4ae04182..544ec83258 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -134,7 +134,6 @@ STATIC time_t queue_heuristic_timestamp = 0; /* Scheduler static function declarations */ -static int scheduler_compare_channels(const void *c1_v, const void *c2_v); static void scheduler_evt_callback(evutil_socket_t fd, short events, void *arg); static int scheduler_more_work(void); @@ -168,7 +167,7 @@ scheduler_free_all(void) * Comparison function to use when sorting pending channels */ -static int +STATIC int scheduler_compare_channels(const void *c1_v, const void *c2_v) { channel_t *c1 = NULL, *c2 = NULL; diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 3c0d86dabb..b99491b221 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -37,6 +37,7 @@ void scheduler_touch_channel(channel_t *chan); /* Things only scheduler.c and its test suite should see */ #ifdef SCHEDULER_PRIVATE_ +STATIC int scheduler_compare_channels(const void *c1_v, const void *c2_v); STATIC uint64_t scheduler_get_queue_heuristic(void); STATIC void scheduler_update_queue_heuristic(time_t now); #endif From 314c2f18ae53c73e790b815567d4c266a4b67382 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 24 Jan 2014 04:33:59 -0800 Subject: [PATCH 085/184] Add scheduler/compare_channels unit test --- src/test/test_scheduler.c | 135 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index 02426f3723..e40df16f2d 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -13,13 +13,16 @@ #endif #define TOR_CHANNEL_INTERNAL_ +#define CHANNEL_PRIVATE_ #include "or.h" #include "compat_libevent.h" +#include "channel.h" #define SCHEDULER_PRIVATE_ #include "scheduler.h" /* Test suite stuff */ #include "test.h" +#include "fakechans.h" /* Statics in scheduler.c exposed to the test suite */ extern smartlist_t *channels_pending; @@ -30,15 +33,30 @@ extern time_t queue_heuristic_timestamp; /* Event base for scheduelr tests */ static struct event_base *mock_event_base = NULL; +/* Statics controlling mocks */ +static circuitmux_t *mock_ccm_tgt_1 = NULL; +static circuitmux_t *mock_ccm_tgt_2 = NULL; + +static circuitmux_t *mock_cgp_tgt_1 = NULL; +static const circuitmux_policy_t *mock_cgp_val_1 = NULL; +static circuitmux_t *mock_cgp_tgt_2 = NULL; +static const circuitmux_policy_t *mock_cgp_val_2 = NULL; + /* Setup for mock event stuff */ static void mock_event_free_all(void); static void mock_event_init(void); /* Mocks used by scheduler tests */ +static int circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, + circuitmux_t *cmux_2); +static const circuitmux_policy_t * circuitmux_get_policy_mock( + circuitmux_t *cmux); static struct event_base * tor_libevent_get_base_mock(void); /* Scheduler test cases */ +static void test_scheduler_compare_channels(void *arg); static void test_scheduler_initfree(void *arg); +static void test_scheduler_queue_heuristic(void *arg); /* Mock event init/free */ @@ -99,6 +117,51 @@ mock_event_init(void) /* Mocks */ +static int +circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, + circuitmux_t *cmux_2) +{ + int result = 0; + + test_assert(cmux_1 != NULL); + test_assert(cmux_2 != NULL); + + if (cmux_1 != cmux_2) { + if (cmux_1 == mock_ccm_tgt_1 && cmux_2 == mock_ccm_tgt_2) result = -1; + else if (cmux_1 == mock_ccm_tgt_2 && cmux_2 == mock_ccm_tgt_1) { + result = 1; + } + else { + if (cmux_1 == mock_ccm_tgt_1 || cmux_1 == mock_ccm_tgt_1) result = -1; + else if (cmux_2 == mock_ccm_tgt_1 || cmux_2 == mock_ccm_tgt_2) { + result = 1; + } else { + result = circuitmux_compare_muxes__real(cmux_1, cmux_2); + } + } + } + /* else result = 0 always */ + + done: + return result; +} + +static const circuitmux_policy_t * +circuitmux_get_policy_mock(circuitmux_t *cmux) +{ + const circuitmux_policy_t *result = NULL; + + test_assert(cmux != NULL); + if (cmux) { + if (cmux == mock_cgp_tgt_1) result = mock_cgp_val_1; + else if (cmux == mock_cgp_tgt_2) result = mock_cgp_val_2; + else result = circuitmux_get_policy__real(cmux); + } + + done: + return result; +} + static struct event_base * tor_libevent_get_base_mock(void) { @@ -107,6 +170,76 @@ tor_libevent_get_base_mock(void) /* Test cases */ +static void +test_scheduler_compare_channels(void *arg) +{ + /* We don't actually need whole fake channels... */ + channel_t c1, c2; + /* ...and some dummy circuitmuxes too */ + circuitmux_t *cm1 = NULL, *cm2 = NULL; + int result; + + (void)arg; + + /* We can't actually see sizeof(circuitmux_t) from here */ + cm1 = tor_malloc_zero(sizeof(void *)); + cm2 = tor_malloc_zero(sizeof(void *)); + + c1.cmux = cm1; + c2.cmux = cm2; + + /* Configure circuitmux_get_policy() mock */ + mock_cgp_tgt_1 = cm1; + /* + * This is to test the different-policies case, which uses the policy + * cast to an intptr_t as an arbitrary but definite thing to compare. + */ + mock_cgp_val_1 = (const circuitmux_policy_t *)(1); + mock_cgp_tgt_2 = cm2; + mock_cgp_val_2 = (const circuitmux_policy_t *)(2); + + MOCK(circuitmux_get_policy, circuitmux_get_policy_mock); + + /* Now set up circuitmux_compare_muxes() mock using cm1/cm2 */ + mock_ccm_tgt_1 = cm1; + mock_ccm_tgt_2 = cm2; + MOCK(circuitmux_compare_muxes, circuitmux_compare_muxes_mock); + + /* Equal-channel case */ + result = scheduler_compare_channels(&c1, &c1); + test_eq(result, 0); + + /* Distinct channels, distinct policies */ + result = scheduler_compare_channels(&c1, &c2); + test_eq(result, -1); + result = scheduler_compare_channels(&c2, &c1); + test_eq(result, 1); + + /* Distinct channels, same policy */ + mock_cgp_val_2 = mock_cgp_val_1; + result = scheduler_compare_channels(&c1, &c2); + test_eq(result, -1); + result = scheduler_compare_channels(&c2, &c1); + test_eq(result, 1); + + done: + + UNMOCK(circuitmux_compare_muxes); + mock_ccm_tgt_1 = NULL; + mock_ccm_tgt_2 = NULL; + + UNMOCK(circuitmux_get_policy); + mock_cgp_tgt_1 = NULL; + mock_cgp_val_1 = NULL; + mock_cgp_tgt_2 = NULL; + mock_cgp_val_2 = NULL; + + tor_free(cm1); + tor_free(cm2); + + return; +} + static void test_scheduler_initfree(void *arg) { @@ -170,6 +303,8 @@ test_scheduler_queue_heuristic(void *arg) } struct testcase_t scheduler_tests[] = { + { "compare_channels", test_scheduler_compare_channels, + TT_FORK, NULL, NULL }, { "initfree", test_scheduler_initfree, TT_FORK, NULL, NULL }, { "queue_heuristic", test_scheduler_queue_heuristic, TT_FORK, NULL, NULL }, From f8ceb0f028eb7661cb31b2f82d5a82460e96ece9 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Fri, 24 Jan 2014 07:03:14 -0800 Subject: [PATCH 086/184] Make scheduler_run() mockable --- src/or/scheduler.c | 4 ++-- src/or/scheduler.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 544ec83258..bf86810517 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -376,8 +376,8 @@ scheduler_release_channel,(channel_t *chan)) /** Run the scheduling algorithm if necessary */ -void -scheduler_run(void) +MOCK_IMPL(void, +scheduler_run, (void)) { int n_cells, n_chans_before, n_chans_after; uint64_t q_len_before, q_heur_before, q_len_after, q_heur_after; diff --git a/src/or/scheduler.h b/src/or/scheduler.h index b99491b221..b0b66ee957 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -18,7 +18,7 @@ /* Set up and shut down the scheduler from main.c */ void scheduler_free_all(void); void scheduler_init(void); -void scheduler_run(void); +MOCK_DECL(void, scheduler_run, (void)); /* Mark channels as having cells or wanting/not wanting writes */ MOCK_DECL(void,scheduler_channel_doesnt_want_writes,(channel_t *chan)); From dc3af04ba8c65e1217f834f04be2a055e8084ec8 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 28 Jan 2014 17:25:37 -0800 Subject: [PATCH 087/184] Make scheduler_compare_channels() mockable --- src/or/scheduler.c | 4 ++-- src/or/scheduler.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index bf86810517..c161393b5a 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -167,8 +167,8 @@ scheduler_free_all(void) * Comparison function to use when sorting pending channels */ -STATIC int -scheduler_compare_channels(const void *c1_v, const void *c2_v) +MOCK_IMPL(STATIC int, +scheduler_compare_channels, (const void *c1_v, const void *c2_v)) { channel_t *c1 = NULL, *c2 = NULL; /* These are a workaround for -Wbad-function-cast throwing a fit */ diff --git a/src/or/scheduler.h b/src/or/scheduler.h index b0b66ee957..8854d5a508 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -37,7 +37,8 @@ void scheduler_touch_channel(channel_t *chan); /* Things only scheduler.c and its test suite should see */ #ifdef SCHEDULER_PRIVATE_ -STATIC int scheduler_compare_channels(const void *c1_v, const void *c2_v); +MOCK_DECL(STATIC int, scheduler_compare_channels, + (const void *c1_v, const void *c2_v)); STATIC uint64_t scheduler_get_queue_heuristic(void); STATIC void scheduler_update_queue_heuristic(time_t now); #endif From 684bcd886abb36414a1499ced1b038050f6face1 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 28 Jan 2014 17:34:16 -0800 Subject: [PATCH 088/184] Add scheduler channel states unit test --- src/test/test_scheduler.c | 153 +++++++++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 3 deletions(-) diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index e40df16f2d..650d4f1015 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -41,6 +41,8 @@ static circuitmux_t *mock_cgp_tgt_1 = NULL; static const circuitmux_policy_t *mock_cgp_val_1 = NULL; static circuitmux_t *mock_cgp_tgt_2 = NULL; static const circuitmux_policy_t *mock_cgp_val_2 = NULL; +static int scheduler_compare_channels_mock_ctr = 0; +static int scheduler_run_mock_ctr = 0; /* Setup for mock event stuff */ static void mock_event_free_all(void); @@ -51,9 +53,13 @@ static int circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, circuitmux_t *cmux_2); static const circuitmux_policy_t * circuitmux_get_policy_mock( circuitmux_t *cmux); +static int scheduler_compare_channels_mock(const void *c1_v, + const void *c2_v); +static void scheduler_run_noop_mock(void); static struct event_base * tor_libevent_get_base_mock(void); /* Scheduler test cases */ +static void test_scheduler_channel_states(void *arg); static void test_scheduler_compare_channels(void *arg); static void test_scheduler_initfree(void *arg); static void test_scheduler_queue_heuristic(void *arg); @@ -130,8 +136,7 @@ circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, if (cmux_1 == mock_ccm_tgt_1 && cmux_2 == mock_ccm_tgt_2) result = -1; else if (cmux_1 == mock_ccm_tgt_2 && cmux_2 == mock_ccm_tgt_1) { result = 1; - } - else { + } else { if (cmux_1 == mock_ccm_tgt_1 || cmux_1 == mock_ccm_tgt_1) result = -1; else if (cmux_2 == mock_ccm_tgt_1 || cmux_2 == mock_ccm_tgt_2) { result = 1; @@ -162,6 +167,28 @@ circuitmux_get_policy_mock(circuitmux_t *cmux) return result; } +static int +scheduler_compare_channels_mock(const void *c1_v, + const void *c2_v) +{ + uintptr_t p1, p2; + + p1 = (uintptr_t)(c1_v); + p2 = (uintptr_t)(c2_v); + + ++scheduler_compare_channels_mock_ctr; + + if (p1 == p2) return 0; + else if (p1 < p2) return 1; + else return -1; +} + +static void +scheduler_run_noop_mock(void) +{ + ++scheduler_run_mock_ctr; +} + static struct event_base * tor_libevent_get_base_mock(void) { @@ -170,6 +197,125 @@ tor_libevent_get_base_mock(void) /* Test cases */ +static void +test_scheduler_channel_states(void *arg) +{ + channel_t *ch1 = NULL, *ch2 = NULL; + int old_count; + + (void)arg; + + /* Set up libevent and scheduler */ + + mock_event_init(); + MOCK(tor_libevent_get_base, tor_libevent_get_base_mock); + scheduler_init(); + /* + * Install the compare channels mock so we can test + * scheduler_touch_channel(). + */ + MOCK(scheduler_compare_channels, scheduler_compare_channels_mock); + /* + * Disable scheduler_run so we can just check the state transitions + * without having to make everything it might call work too. + */ + MOCK(scheduler_run, scheduler_run_noop_mock); + + test_eq(smartlist_len(channels_pending), 0); + + /* Set up a fake channel */ + ch1 = new_fake_channel(); + test_assert(ch1); + + /* Start it off in OPENING */ + ch1->state = CHANNEL_STATE_OPENING; + /* We'll need a cmux */ + ch1->cmux = circuitmux_alloc(); + /* Try to register it */ + channel_register(ch1); + test_assert(ch1->registered); + + /* It should start off in SCHED_CHAN_IDLE */ + test_eq(ch1->scheduler_state, SCHED_CHAN_IDLE); + + /* Now get another one */ + ch2 = new_fake_channel(); + test_assert(ch2); + ch2->state = CHANNEL_STATE_OPENING; + ch2->cmux = circuitmux_alloc(); + channel_register(ch2); + test_assert(ch2->registered); + + /* Send it to SCHED_CHAN_WAITING_TO_WRITE */ + scheduler_channel_has_waiting_cells(ch1); + test_eq(ch1->scheduler_state, SCHED_CHAN_WAITING_TO_WRITE); + + /* This should send it to SCHED_CHAN_PENDING */ + scheduler_channel_wants_writes(ch1); + test_eq(ch1->scheduler_state, SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 1); + + /* Now send ch2 to SCHED_CHAN_WAITING_FOR_CELLS */ + scheduler_channel_wants_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + + /* Drop ch2 back to idle */ + scheduler_channel_doesnt_want_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_IDLE); + + /* ...and back to SCHED_CHAN_WAITING_FOR_CELLS */ + scheduler_channel_wants_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + + /* ...and this should kick ch2 into SCHED_CHAN_PENDING */ + scheduler_channel_has_waiting_cells(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 2); + + /* This should send ch2 to SCHED_CHAN_WAITING_TO_WRITE */ + scheduler_channel_doesnt_want_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_TO_WRITE); + test_eq(smartlist_len(channels_pending), 1); + + /* ...and back to SCHED_CHAN_PENDING */ + scheduler_channel_wants_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 2); + + /* Now we exercise scheduler_touch_channel */ + old_count = scheduler_compare_channels_mock_ctr; + scheduler_touch_channel(ch1); + test_assert(scheduler_compare_channels_mock_ctr > old_count); + + /* Close */ + channel_mark_for_close(ch1); + test_eq(ch1->state, CHANNEL_STATE_CLOSING); + channel_mark_for_close(ch2); + test_eq(ch2->state, CHANNEL_STATE_CLOSING); + channel_closed(ch1); + test_eq(ch1->state, CHANNEL_STATE_CLOSED); + ch1 = NULL; + channel_closed(ch2); + test_eq(ch2->state, CHANNEL_STATE_CLOSED); + ch2 = NULL; + + /* Shut things down */ + + channel_free_all(); + scheduler_free_all(); + mock_event_free_all(); + + done: + tor_free(ch1); + tor_free(ch2); + + UNMOCK(scheduler_compare_channels); + UNMOCK(scheduler_run); + UNMOCK(tor_libevent_get_base); + + return; +} + static void test_scheduler_compare_channels(void *arg) { @@ -208,7 +354,7 @@ test_scheduler_compare_channels(void *arg) /* Equal-channel case */ result = scheduler_compare_channels(&c1, &c1); test_eq(result, 0); - + /* Distinct channels, distinct policies */ result = scheduler_compare_channels(&c1, &c2); test_eq(result, -1); @@ -303,6 +449,7 @@ test_scheduler_queue_heuristic(void *arg) } struct testcase_t scheduler_tests[] = { + { "channel_states", test_scheduler_channel_states, TT_FORK, NULL, NULL }, { "compare_channels", test_scheduler_compare_channels, TT_FORK, NULL, NULL }, { "initfree", test_scheduler_initfree, TT_FORK, NULL, NULL }, From 99d312c2937c0289eec047a70f626e3976a25895 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Mon, 3 Feb 2014 12:52:28 -0800 Subject: [PATCH 089/184] Make channel_flush_some_cells() mockable --- src/or/channel.c | 4 ++-- src/or/channel.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/or/channel.c b/src/or/channel.c index ec44cce427..edeee6937a 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -2197,8 +2197,8 @@ channel_listener_change_state(channel_listener_t *chan_l, #define MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED 256 -ssize_t -channel_flush_some_cells(channel_t *chan, ssize_t num_cells) +MOCK_IMPL(ssize_t, +channel_flush_some_cells, (channel_t *chan, ssize_t num_cells)) { unsigned int unlimited = 0; ssize_t flushed = 0; diff --git a/src/or/channel.h b/src/or/channel.h index 07a66ebcda..dd0ca369cd 100644 --- a/src/or/channel.h +++ b/src/or/channel.h @@ -455,7 +455,8 @@ void channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell); void channel_flush_cells(channel_t *chan); /* Request from lower layer for more cells if available */ -ssize_t channel_flush_some_cells(channel_t *chan, ssize_t num_cells); +MOCK_DECL(ssize_t, channel_flush_some_cells, + (channel_t *chan, ssize_t num_cells)); /* Query if data available on this channel */ int channel_more_to_flush(channel_t *chan); From 41cf9f6260d70de8b07740c89fd5273b4f073c95 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 4 Feb 2014 13:59:53 -0800 Subject: [PATCH 090/184] Add scheduler/loop unit test --- src/test/test_scheduler.c | 303 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index 650d4f1015..79fc453bd3 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -44,11 +44,17 @@ static const circuitmux_policy_t *mock_cgp_val_2 = NULL; static int scheduler_compare_channels_mock_ctr = 0; static int scheduler_run_mock_ctr = 0; +static void channel_flush_some_cells_mock_free_all(void); +static void channel_flush_some_cells_mock_set(channel_t *chan, + ssize_t num_cells); + /* Setup for mock event stuff */ static void mock_event_free_all(void); static void mock_event_init(void); /* Mocks used by scheduler tests */ +static ssize_t channel_flush_some_cells_mock(channel_t *chan, + ssize_t num_cells); static int circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, circuitmux_t *cmux_2); static const circuitmux_policy_t * circuitmux_get_policy_mock( @@ -62,6 +68,7 @@ static struct event_base * tor_libevent_get_base_mock(void); static void test_scheduler_channel_states(void *arg); static void test_scheduler_compare_channels(void *arg); static void test_scheduler_initfree(void *arg); +static void test_scheduler_loop(void *arg); static void test_scheduler_queue_heuristic(void *arg); /* Mock event init/free */ @@ -123,6 +130,120 @@ mock_event_init(void) /* Mocks */ +typedef struct { + const channel_t *chan; + ssize_t cells; +} flush_mock_channel_t; + +static smartlist_t *chans_for_flush_mock = NULL; + +static void +channel_flush_some_cells_mock_free_all(void) +{ + if (chans_for_flush_mock) { + SMARTLIST_FOREACH_BEGIN(chans_for_flush_mock, + flush_mock_channel_t *, + flush_mock_ch) { + SMARTLIST_DEL_CURRENT(chans_for_flush_mock, flush_mock_ch); + tor_free(flush_mock_ch); + } SMARTLIST_FOREACH_END(flush_mock_ch); + + smartlist_free(chans_for_flush_mock); + chans_for_flush_mock = NULL; + } +} + +static void +channel_flush_some_cells_mock_set(channel_t *chan, ssize_t num_cells) +{ + flush_mock_channel_t *flush_mock_ch = NULL; + + if (!chan) return; + if (num_cells <= 0) return; + + if (!chans_for_flush_mock) { + chans_for_flush_mock = smartlist_new(); + } + + SMARTLIST_FOREACH_BEGIN(chans_for_flush_mock, + flush_mock_channel_t *, + flush_mock_ch) { + if (flush_mock_ch != NULL && flush_mock_ch->chan != NULL) { + if (flush_mock_ch->chan == chan) { + /* Found it */ + flush_mock_ch->cells = num_cells; + break; + } + } else { + /* That shouldn't be there... */ + SMARTLIST_DEL_CURRENT(chans_for_flush_mock, flush_mock_ch); + tor_free(flush_mock_ch); + } + } SMARTLIST_FOREACH_END(flush_mock_ch); + + if (!flush_mock_ch) { + /* The loop didn't find it */ + flush_mock_ch = tor_malloc_zero(sizeof(*flush_mock_ch)); + flush_mock_ch->chan = chan; + flush_mock_ch->cells = num_cells; + smartlist_add(chans_for_flush_mock, flush_mock_ch); + } +} + +static ssize_t +channel_flush_some_cells_mock(channel_t *chan, ssize_t num_cells) +{ + ssize_t flushed = 0, max; + char unlimited = 0; + flush_mock_channel_t *found = NULL; + + test_assert(chan != NULL); + if (chan) { + if (num_cells < 0) { + num_cells = 0; + unlimited = 1; + } + + /* Check if we have it */ + if (chans_for_flush_mock != NULL) { + SMARTLIST_FOREACH_BEGIN(chans_for_flush_mock, + flush_mock_channel_t *, + flush_mock_ch) { + if (flush_mock_ch != NULL && flush_mock_ch->chan != NULL) { + if (flush_mock_ch->chan == chan) { + /* Found it */ + found = flush_mock_ch; + break; + } + } else { + /* That shouldn't be there... */ + SMARTLIST_DEL_CURRENT(chans_for_flush_mock, flush_mock_ch); + tor_free(flush_mock_ch); + } + } SMARTLIST_FOREACH_END(flush_mock_ch); + + if (found) { + /* We found one */ + if (found->cells < 0) found->cells = 0; + + if (unlimited) max = found->cells; + else max = MIN(found->cells, num_cells); + + flushed += max; + found->cells -= max; + + if (found->cells <= 0) { + smartlist_remove(chans_for_flush_mock, found); + tor_free(found); + } + } + } + } + + done: + return flushed; +} + static int circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, circuitmux_t *cmux_2) @@ -414,6 +535,187 @@ test_scheduler_initfree(void *arg) return; } +static void +test_scheduler_loop(void *arg) +{ + channel_t *ch1 = NULL, *ch2 = NULL; + + (void)arg; + + /* Set up libevent and scheduler */ + + mock_event_init(); + MOCK(tor_libevent_get_base, tor_libevent_get_base_mock); + scheduler_init(); + /* + * Install the compare channels mock so we can test + * scheduler_touch_channel(). + */ + MOCK(scheduler_compare_channels, scheduler_compare_channels_mock); + /* + * Disable scheduler_run so we can just check the state transitions + * without having to make everything it might call work too. + */ + MOCK(scheduler_run, scheduler_run_noop_mock); + + test_eq(smartlist_len(channels_pending), 0); + + /* Set up a fake channel */ + ch1 = new_fake_channel(); + test_assert(ch1); + + /* Start it off in OPENING */ + ch1->state = CHANNEL_STATE_OPENING; + /* We'll need a cmux */ + ch1->cmux = circuitmux_alloc(); + /* Try to register it */ + channel_register(ch1); + test_assert(ch1->registered); + /* Finish opening it */ + channel_change_state(ch1, CHANNEL_STATE_OPEN); + + /* It should start off in SCHED_CHAN_IDLE */ + test_eq(ch1->scheduler_state, SCHED_CHAN_IDLE); + + /* Now get another one */ + ch2 = new_fake_channel(); + test_assert(ch2); + ch2->state = CHANNEL_STATE_OPENING; + ch2->cmux = circuitmux_alloc(); + channel_register(ch2); + test_assert(ch2->registered); + /* + * Don't open ch2; then channel_num_cells_writeable() will return + * zero and we'll get coverage of that exception case in scheduler_run() + */ + + test_eq(ch1->state, CHANNEL_STATE_OPEN); + test_eq(ch2->state, CHANNEL_STATE_OPENING); + + /* Send it to SCHED_CHAN_WAITING_TO_WRITE */ + scheduler_channel_has_waiting_cells(ch1); + test_eq(ch1->scheduler_state, SCHED_CHAN_WAITING_TO_WRITE); + + /* This should send it to SCHED_CHAN_PENDING */ + scheduler_channel_wants_writes(ch1); + test_eq(ch1->scheduler_state, SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 1); + + /* Now send ch2 to SCHED_CHAN_WAITING_FOR_CELLS */ + scheduler_channel_wants_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + + /* Drop ch2 back to idle */ + scheduler_channel_doesnt_want_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_IDLE); + + /* ...and back to SCHED_CHAN_WAITING_FOR_CELLS */ + scheduler_channel_wants_writes(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + + /* ...and this should kick ch2 into SCHED_CHAN_PENDING */ + scheduler_channel_has_waiting_cells(ch2); + test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 2); + + /* + * Now we've got two pending channels and need to fire off + * scheduler_run(); first, unmock it. + */ + + UNMOCK(scheduler_run); + + scheduler_run(); + + /* Now re-mock it */ + MOCK(scheduler_run, scheduler_run_noop_mock); + + /* + * Assert that they're still in the states we left and aren't still + * pending + */ + test_eq(ch1->state, CHANNEL_STATE_OPEN); + test_eq(ch2->state, CHANNEL_STATE_OPENING); + test_assert(ch1->scheduler_state != SCHED_CHAN_PENDING); + test_assert(ch2->scheduler_state != SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 0); + + /* Now, finish opening ch2, and get both back to pending */ + channel_change_state(ch2, CHANNEL_STATE_OPEN); + scheduler_channel_wants_writes(ch1); + scheduler_channel_wants_writes(ch2); + scheduler_channel_has_waiting_cells(ch1); + scheduler_channel_has_waiting_cells(ch2); + test_eq(ch1->state, CHANNEL_STATE_OPEN); + test_eq(ch2->state, CHANNEL_STATE_OPEN); + test_eq(ch1->scheduler_state, SCHED_CHAN_PENDING); + test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); + test_eq(smartlist_len(channels_pending), 2); + + /* Now, set up the channel_flush_some_cells() mock */ + MOCK(channel_flush_some_cells, channel_flush_some_cells_mock); + /* + * 16 cells on ch1 means it'll completely drain into the 32 cells + * fakechan's num_cells_writeable() returns. + */ + channel_flush_some_cells_mock_set(ch1, 16); + /* + * This one should get sent back to pending, since num_cells_writeable() + * will still return non-zero. + */ + channel_flush_some_cells_mock_set(ch2, 48); + + /* + * And re-run the scheduler_run() loop with non-zero returns from + * channel_flush_some_cells() this time. + */ + UNMOCK(scheduler_run); + + scheduler_run(); + + /* Now re-mock it */ + MOCK(scheduler_run, scheduler_run_noop_mock); + + /* + * ch1 should have gone to SCHED_CHAN_WAITING_FOR_CELLS, with 16 flushed + * and 32 writeable. + */ + test_eq(ch1->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + /* + * ...ch2 should also have gone to SCHED_CHAN_WAITING_FOR_CELLS, with + * channel_more_to_flush() returning false and channel_num_cells_writeable() + * > 0/ + */ + test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + + /* Close */ + channel_mark_for_close(ch1); + test_eq(ch1->state, CHANNEL_STATE_CLOSING); + channel_mark_for_close(ch2); + test_eq(ch2->state, CHANNEL_STATE_CLOSING); + channel_closed(ch1); + test_eq(ch1->state, CHANNEL_STATE_CLOSED); + ch1 = NULL; + channel_closed(ch2); + test_eq(ch2->state, CHANNEL_STATE_CLOSED); + ch2 = NULL; + + /* Shut things down */ + channel_flush_some_cells_mock_free_all(); + channel_free_all(); + scheduler_free_all(); + mock_event_free_all(); + + done: + tor_free(ch1); + tor_free(ch2); + + UNMOCK(channel_flush_some_cells); + UNMOCK(scheduler_compare_channels); + UNMOCK(scheduler_run); + UNMOCK(tor_libevent_get_base); +} + static void test_scheduler_queue_heuristic(void *arg) { @@ -453,6 +755,7 @@ struct testcase_t scheduler_tests[] = { { "compare_channels", test_scheduler_compare_channels, TT_FORK, NULL, NULL }, { "initfree", test_scheduler_initfree, TT_FORK, NULL, NULL }, + { "loop", test_scheduler_loop, TT_FORK, NULL, NULL }, { "queue_heuristic", test_scheduler_queue_heuristic, TT_FORK, NULL, NULL }, END_OF_TESTCASES From 2d171c108191799b63737768bbad104ced0ac4cd Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 23 Sep 2014 07:11:24 -0700 Subject: [PATCH 091/184] Update test_channel.c for recent test suite changes and --enable-mempools support --- src/test/test_channel.c | 427 +++++++++++++++++++++------------------- 1 file changed, 224 insertions(+), 203 deletions(-) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 9ad271d1f2..49590f52c0 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -86,7 +86,7 @@ channel_note_destroy_not_pending_mock(channel_t *ch, static const char * chan_test_describe_transport(channel_t *ch) { - test_assert(ch != NULL); + tt_assert(ch != NULL); done: return "Fake channel for unit tests"; @@ -100,7 +100,7 @@ chan_test_describe_transport(channel_t *ch) static void chan_test_channel_dump_statistics_mock(channel_t *chan, int severity) { - test_assert(chan != NULL); + tt_assert(chan != NULL); (void)severity; @@ -125,7 +125,7 @@ chan_test_channel_flush_from_first_active_circuit_mock(channel_t *chan, int result = 0, c = 0; packed_cell_t *cell = NULL; - test_assert(chan != NULL); + tt_assert(chan != NULL); if (test_target_cmux != NULL && test_target_cmux == chan->cmux) { while (c <= max && test_cmux_cells > 0) { @@ -154,7 +154,7 @@ chan_test_circuitmux_num_cells_mock(circuitmux_t *cmux) { unsigned int result = 0; - test_assert(cmux != NULL); + tt_assert(cmux != NULL); if (cmux != NULL) { if (cmux == test_target_cmux) { result = test_cmux_cells; @@ -176,8 +176,8 @@ static void chan_test_cell_handler(channel_t *ch, cell_t *cell) { - test_assert(ch); - test_assert(cell); + tt_assert(ch); + tt_assert(cell); tor_free(cell); ++test_chan_fixed_cells_recved; @@ -193,7 +193,7 @@ chan_test_cell_handler(channel_t *ch, static void chan_test_dumpstats(channel_t *ch, int severity) { - test_assert(ch != NULL); + tt_assert(ch != NULL); (void)severity; @@ -211,8 +211,8 @@ static void chan_test_var_cell_handler(channel_t *ch, var_cell_t *var_cell) { - test_assert(ch); - test_assert(var_cell); + tt_assert(ch); + tt_assert(var_cell); tor_free(var_cell); ++test_chan_var_cells_recved; @@ -224,7 +224,7 @@ chan_test_var_cell_handler(channel_t *ch, static void chan_test_close(channel_t *ch) { - test_assert(ch); + tt_assert(ch); done: return; @@ -237,8 +237,8 @@ chan_test_close(channel_t *ch) static void chan_test_error(channel_t *ch) { - test_assert(ch); - test_assert(!(ch->state == CHANNEL_STATE_CLOSING || + tt_assert(ch); + tt_assert(!(ch->state == CHANNEL_STATE_CLOSING || ch->state == CHANNEL_STATE_ERROR || ch->state == CHANNEL_STATE_CLOSED)); @@ -255,8 +255,8 @@ chan_test_error(channel_t *ch) static void chan_test_finish_close(channel_t *ch) { - test_assert(ch); - test_assert(ch->state == CHANNEL_STATE_CLOSING); + tt_assert(ch); + tt_assert(ch->state == CHANNEL_STATE_CLOSING); channel_closed(ch); @@ -267,8 +267,8 @@ chan_test_finish_close(channel_t *ch) static const char * chan_test_get_remote_descr(channel_t *ch, int flags) { - test_assert(ch); - test_eq(flags & ~(GRD_FLAG_ORIGINAL | GRD_FLAG_ADDR_ONLY), 0); + tt_assert(ch); + tt_int_op(flags & ~(GRD_FLAG_ORIGINAL | GRD_FLAG_ADDR_ONLY), ==, 0); done: return "Fake channel for unit tests; no real endpoint"; @@ -277,7 +277,7 @@ chan_test_get_remote_descr(channel_t *ch, int flags) static double chan_test_get_overhead_estimate(channel_t *ch) { - test_assert(ch); + tt_assert(ch); done: return test_overhead_estimate; @@ -286,8 +286,8 @@ chan_test_get_overhead_estimate(channel_t *ch) static int chan_test_is_canonical(channel_t *ch, int req) { - test_assert(ch != NULL); - test_assert(req == 0 || req == 1); + tt_assert(ch != NULL); + tt_assert(req == 0 || req == 1); done: /* Fake channels are always canonical */ @@ -297,7 +297,7 @@ chan_test_is_canonical(channel_t *ch, int req) static size_t chan_test_num_bytes_queued(channel_t *ch) { - test_assert(ch); + tt_assert(ch); done: return 0; @@ -306,7 +306,7 @@ chan_test_num_bytes_queued(channel_t *ch) static int chan_test_num_cells_writeable(channel_t *ch) { - test_assert(ch); + tt_assert(ch); done: return 32; @@ -317,8 +317,8 @@ chan_test_write_cell(channel_t *ch, cell_t *cell) { int rv = 0; - test_assert(ch); - test_assert(cell); + tt_assert(ch); + tt_assert(cell); if (test_chan_accept_cells) { /* Free the cell and bump the counter */ @@ -338,8 +338,8 @@ chan_test_write_packed_cell(channel_t *ch, { int rv = 0; - test_assert(ch); - test_assert(packed_cell); + tt_assert(ch); + tt_assert(packed_cell); if (test_chan_accept_cells) { /* Free the cell and bump the counter */ @@ -358,8 +358,8 @@ chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell) { int rv = 0; - test_assert(ch); - test_assert(var_cell); + tt_assert(ch); + tt_assert(var_cell); if (test_chan_accept_cells) { /* Free the cell and bump the counter */ @@ -380,7 +380,7 @@ chan_test_write_var_cell(channel_t *ch, var_cell_t *var_cell) void make_fake_cell(cell_t *c) { - test_assert(c != NULL); + tt_assert(c != NULL); c->circ_id = 1; c->command = CELL_RELAY; @@ -397,7 +397,7 @@ make_fake_cell(cell_t *c) void make_fake_var_cell(var_cell_t *c) { - test_assert(c != NULL); + tt_assert(c != NULL); c->circ_id = 1; c->command = CELL_VERSIONS; @@ -513,12 +513,12 @@ test_channel_dumpstats(void *arg) /* Set up a new fake channel */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->cmux = circuitmux_alloc(); /* Try to register it */ channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Set up mock */ dump_statistics_mock_target = ch; @@ -530,24 +530,24 @@ test_channel_dumpstats(void *arg) channel_dumpstats(LOG_DEBUG); /* Assert that we hit the mock */ - test_eq(dump_statistics_mock_matches, 1); + tt_int_op(dump_statistics_mock_matches, ==, 1); /* Close the channel */ channel_mark_for_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSED); /* Try again and hit the finished channel */ channel_dumpstats(LOG_DEBUG); - test_eq(dump_statistics_mock_matches, 2); + tt_int_op(dump_statistics_mock_matches, ==, 2); channel_run_cleanup(); ch = NULL; /* Now we should hit nothing */ channel_dumpstats(LOG_DEBUG); - test_eq(dump_statistics_mock_matches, 2); + tt_int_op(dump_statistics_mock_matches, ==, 2); /* Unmock */ UNMOCK(channel_dump_statistics); @@ -556,14 +556,14 @@ test_channel_dumpstats(void *arg) /* Now make another channel */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->cmux = circuitmux_alloc(); channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Lie about its age so dumpstats gets coverage for rate calculations */ ch->timestamp_created = time(NULL) - 30; - test_assert(ch->timestamp_created > 0); - test_assert(time(NULL) > ch->timestamp_created); + tt_assert(ch->timestamp_created > 0); + tt_assert(time(NULL) > ch->timestamp_created); /* Put cells through it both ways to make the counters non-zero */ cell = tor_malloc_zero(sizeof(*cell)); @@ -572,24 +572,24 @@ test_channel_dumpstats(void *arg) old_count = test_cells_written; channel_write_cell(ch, cell); cell = NULL; - test_eq(test_cells_written, old_count + 1); - test_assert(ch->n_bytes_xmitted > 0); - test_assert(ch->n_cells_xmitted > 0); + tt_int_op(test_cells_written, ==, old_count + 1); + tt_assert(ch->n_bytes_xmitted > 0); + tt_assert(ch->n_cells_xmitted > 0); /* Receive path */ channel_set_cell_handlers(ch, chan_test_cell_handler, chan_test_var_cell_handler); - test_eq(channel_get_cell_handler(ch), chan_test_cell_handler); - test_eq(channel_get_var_cell_handler(ch), chan_test_var_cell_handler); + tt_ptr_op(channel_get_cell_handler(ch), ==, chan_test_cell_handler); + tt_ptr_op(channel_get_var_cell_handler(ch), ==, chan_test_var_cell_handler); cell = tor_malloc_zero(sizeof(cell_t)); make_fake_cell(cell); old_count = test_chan_fixed_cells_recved; channel_queue_cell(ch, cell); cell = NULL; - test_eq(test_chan_fixed_cells_recved, old_count + 1); - test_assert(ch->n_bytes_recved > 0); - test_assert(ch->n_cells_recved > 0); + tt_int_op(test_chan_fixed_cells_recved, ==, old_count + 1); + tt_assert(ch->n_bytes_recved > 0); + tt_assert(ch->n_cells_recved > 0); /* Test channel_dump_statistics */ ch->describe_transport = chan_test_describe_transport; @@ -598,13 +598,13 @@ test_channel_dumpstats(void *arg) ch->is_canonical = chan_test_is_canonical; old_count = test_dumpstats_calls; channel_dump_statistics(ch, LOG_DEBUG); - test_eq(test_dumpstats_calls, old_count + 1); + tt_int_op(test_dumpstats_calls, ==, old_count + 1); /* Close the channel */ channel_mark_for_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSED); channel_run_cleanup(); ch = NULL; @@ -629,10 +629,12 @@ test_channel_flush(void *arg) (void)arg; +#ifdef ENABLE_MEMPOOLS init_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); /* Cache the original count */ init_count = test_cells_written; @@ -645,21 +647,21 @@ test_channel_flush(void *arg) make_fake_cell(cell); channel_write_cell(ch, cell); /* It should be queued, so assert that we didn't write it */ - test_eq(test_cells_written, init_count); + tt_int_op(test_cells_written, ==, init_count); /* Queue a var cell */ v_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); make_fake_var_cell(v_cell); channel_write_var_cell(ch, v_cell); /* It should be queued, so assert that we didn't write it */ - test_eq(test_cells_written, init_count); + tt_int_op(test_cells_written, ==, init_count); /* Try a packed cell now */ p_cell = packed_cell_new(); - test_assert(p_cell); + tt_assert(p_cell); channel_write_packed_cell(ch, p_cell); /* It should be queued, so assert that we didn't write it */ - test_eq(test_cells_written, init_count); + tt_int_op(test_cells_written, ==, init_count); /* Now allow writes through again */ test_chan_accept_cells = 1; @@ -668,11 +670,13 @@ test_channel_flush(void *arg) channel_flush_cells(ch); /* All three should have gone through */ - test_eq(test_cells_written, init_count + 3); + tt_int_op(test_cells_written, ==, init_count + 3); done: tor_free(ch); +#ifdef ENABLE_MEMPOOLS free_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ return; } @@ -690,7 +694,9 @@ test_channel_flushmux(void *arg) (void)arg; +#ifdef ENABLE_MEMPOOLS init_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ /* Install mocks we need for this test */ MOCK(channel_flush_from_first_active_circuit, @@ -699,7 +705,7 @@ test_channel_flushmux(void *arg) chan_test_circuitmux_num_cells_mock); ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->cmux = circuitmux_alloc(); old_count = test_cells_written; @@ -712,9 +718,9 @@ test_channel_flushmux(void *arg) result = channel_flush_some_cells(ch, 1); - test_eq(result, 1); - test_eq(test_cells_written, old_count + 1); - test_eq(test_cmux_cells, 0); + tt_int_op(result, ==, 1); + tt_int_op(test_cells_written, ==, old_count + 1); + tt_int_op(test_cmux_cells, ==, 0); /* Now try it without accepting to force them into the queue */ test_chan_accept_cells = 0; @@ -724,19 +730,19 @@ test_channel_flushmux(void *arg) result = channel_flush_some_cells(ch, 1); /* We should not have actually flushed any */ - test_eq(result, 0); - test_eq(test_cells_written, old_count + 1); + tt_int_op(result, ==, 0); + tt_int_op(test_cells_written, ==, old_count + 1); /* But we should have gotten to the fake cellgen loop */ - test_eq(test_cmux_cells, 0); + tt_int_op(test_cmux_cells, ==, 0); /* ...and we should have a queued cell */ q_len_after = chan_cell_queue_len(&(ch->outgoing_queue)); - test_eq(q_len_after, q_len_before + 1); + tt_int_op(q_len_after, ==, q_len_before + 1); /* Now accept cells again and drain the queue */ test_chan_accept_cells = 1; channel_flush_cells(ch); - test_eq(test_cells_written, old_count + 2); - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + tt_int_op(test_cells_written, ==, old_count + 2); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); test_target_cmux = NULL; test_cmux_cells = 0; @@ -749,7 +755,9 @@ test_channel_flushmux(void *arg) test_chan_accept_cells = 0; +#ifdef ENABLE_MEMPOOLS free_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ return; } @@ -776,7 +784,7 @@ test_channel_incoming(void *arg) test_overhead_estimate = 1.0f; ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); /* Start it off in OPENING */ ch->state = CHANNEL_STATE_OPENING; /* We'll need a cmux */ @@ -787,16 +795,16 @@ test_channel_incoming(void *arg) chan_test_cell_handler, chan_test_var_cell_handler); /* Test cell handler getters */ - test_eq(channel_get_cell_handler(ch), chan_test_cell_handler); - test_eq(channel_get_var_cell_handler(ch), chan_test_var_cell_handler); + tt_ptr_op(channel_get_cell_handler(ch), ==, chan_test_cell_handler); + tt_ptr_op(channel_get_var_cell_handler(ch), ==, chan_test_var_cell_handler); /* Try to register it */ channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Open it */ channel_change_state(ch, CHANNEL_STATE_OPEN); - test_eq(ch->state, CHANNEL_STATE_OPEN); + tt_int_op(ch->state, ==, CHANNEL_STATE_OPEN); /* Receive a fixed cell */ cell = tor_malloc_zero(sizeof(cell_t)); @@ -804,7 +812,7 @@ test_channel_incoming(void *arg) old_count = test_chan_fixed_cells_recved; channel_queue_cell(ch, cell); cell = NULL; - test_eq(test_chan_fixed_cells_recved, old_count + 1); + tt_int_op(test_chan_fixed_cells_recved, ==, old_count + 1); /* Receive a variable-size cell */ var_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); @@ -812,13 +820,13 @@ test_channel_incoming(void *arg) old_count = test_chan_var_cells_recved; channel_queue_var_cell(ch, var_cell); var_cell = NULL; - test_eq(test_chan_var_cells_recved, old_count + 1); + tt_int_op(test_chan_var_cells_recved, ==, old_count + 1); /* Close it */ channel_mark_for_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSED); channel_run_cleanup(); ch = NULL; @@ -865,7 +873,7 @@ test_channel_lifecycle(void *arg) test_overhead_estimate = 1.0f; ch1 = new_fake_channel(); - test_assert(ch1); + tt_assert(ch1); /* Start it off in OPENING */ ch1->state = CHANNEL_STATE_OPENING; /* We'll need a cmux */ @@ -873,62 +881,67 @@ test_channel_lifecycle(void *arg) /* Try to register it */ channel_register(ch1); - test_assert(ch1->registered); + tt_assert(ch1->registered); /* Try to write a cell through (should queue) */ cell = tor_malloc_zero(sizeof(cell_t)); make_fake_cell(cell); old_count = test_cells_written; channel_write_cell(ch1, cell); - test_eq(old_count, test_cells_written); + tt_int_op(old_count, ==, test_cells_written); /* Move it to OPEN and flush */ channel_change_state(ch1, CHANNEL_STATE_OPEN); /* Queue should drain */ - test_eq(old_count + 1, test_cells_written); + tt_int_op(old_count + 1, ==, test_cells_written); /* Get another one */ ch2 = new_fake_channel(); - test_assert(ch2); + tt_assert(ch2); ch2->state = CHANNEL_STATE_OPENING; ch2->cmux = circuitmux_alloc(); /* Register */ channel_register(ch2); - test_assert(ch2->registered); + tt_assert(ch2->registered); /* Check counters */ - test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count); - test_eq(test_releases_count, init_releases_count); + tt_int_op(test_doesnt_want_writes_count, ==, init_doesnt_want_writes_count); + tt_int_op(test_releases_count, ==, init_releases_count); /* Move ch1 to MAINT */ channel_change_state(ch1, CHANNEL_STATE_MAINT); - test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); - test_eq(test_releases_count, init_releases_count); + tt_int_op(test_doesnt_want_writes_count, ==, + init_doesnt_want_writes_count + 1); + tt_int_op(test_releases_count, ==, init_releases_count); /* Move ch2 to OPEN */ channel_change_state(ch2, CHANNEL_STATE_OPEN); - test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); - test_eq(test_releases_count, init_releases_count); + tt_int_op(test_doesnt_want_writes_count, ==, + init_doesnt_want_writes_count + 1); + tt_int_op(test_releases_count, ==, init_releases_count); /* Move ch1 back to OPEN */ channel_change_state(ch1, CHANNEL_STATE_OPEN); - test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); - test_eq(test_releases_count, init_releases_count); + tt_int_op(test_doesnt_want_writes_count, ==, + init_doesnt_want_writes_count + 1); + tt_int_op(test_releases_count, ==, init_releases_count); /* Mark ch2 for close */ channel_mark_for_close(ch2); - test_eq(ch2->state, CHANNEL_STATE_CLOSING); - test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); - test_eq(test_releases_count, init_releases_count + 1); + tt_int_op(ch2->state, ==, CHANNEL_STATE_CLOSING); + tt_int_op(test_doesnt_want_writes_count, ==, + init_doesnt_want_writes_count + 1); + tt_int_op(test_releases_count, ==, init_releases_count + 1); /* Shut down channels */ channel_free_all(); ch1 = ch2 = NULL; - test_eq(test_doesnt_want_writes_count, init_doesnt_want_writes_count + 1); + tt_int_op(test_doesnt_want_writes_count, ==, + init_doesnt_want_writes_count + 1); /* channel_free() calls scheduler_release_channel() */ - test_eq(test_releases_count, init_releases_count + 4); + tt_int_op(test_releases_count, ==, init_releases_count + 4); done: tor_free(ch1); @@ -968,7 +981,7 @@ test_channel_lifecycle_2(void *arg) test_overhead_estimate = 1.0f; ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); /* Start it off in OPENING */ ch->state = CHANNEL_STATE_OPENING; /* The full lifecycle test needs a cmux */ @@ -976,60 +989,60 @@ test_channel_lifecycle_2(void *arg) /* Try to register it */ channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Try to close it */ channel_mark_for_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); /* Finish closing it */ chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSED); channel_run_cleanup(); ch = NULL; /* Now try OPENING->OPEN->CLOSING->ERROR */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->state = CHANNEL_STATE_OPENING; ch->cmux = circuitmux_alloc(); channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Finish opening it */ channel_change_state(ch, CHANNEL_STATE_OPEN); /* Error exit from lower layer */ chan_test_error(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_ERROR); + tt_int_op(ch->state, ==, CHANNEL_STATE_ERROR); channel_run_cleanup(); ch = NULL; /* OPENING->OPEN->MAINT->CLOSING->CLOSED close from maintenance state */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->state = CHANNEL_STATE_OPENING; ch->cmux = circuitmux_alloc(); channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Finish opening it */ channel_change_state(ch, CHANNEL_STATE_OPEN); - test_eq(ch->state, CHANNEL_STATE_OPEN); + tt_int_op(ch->state, ==, CHANNEL_STATE_OPEN); /* Go to maintenance state */ channel_change_state(ch, CHANNEL_STATE_MAINT); - test_eq(ch->state, CHANNEL_STATE_MAINT); + tt_int_op(ch->state, ==, CHANNEL_STATE_MAINT); /* Lower layer close */ channel_mark_for_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); /* Finish */ chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSED); channel_run_cleanup(); ch = NULL; @@ -1038,53 +1051,53 @@ test_channel_lifecycle_2(void *arg) * maintenance state */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->state = CHANNEL_STATE_OPENING; ch->cmux = circuitmux_alloc(); channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Finish opening it */ channel_change_state(ch, CHANNEL_STATE_OPEN); - test_eq(ch->state, CHANNEL_STATE_OPEN); + tt_int_op(ch->state, ==, CHANNEL_STATE_OPEN); /* Go to maintenance state */ channel_change_state(ch, CHANNEL_STATE_MAINT); - test_eq(ch->state, CHANNEL_STATE_MAINT); + tt_int_op(ch->state, ==, CHANNEL_STATE_MAINT); /* Lower layer close */ channel_close_from_lower_layer(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); /* Finish */ chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSED); channel_run_cleanup(); ch = NULL; /* OPENING->OPEN->MAINT->CLOSING->ERROR */ ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); ch->state = CHANNEL_STATE_OPENING; ch->cmux = circuitmux_alloc(); channel_register(ch); - test_assert(ch->registered); + tt_assert(ch->registered); /* Finish opening it */ channel_change_state(ch, CHANNEL_STATE_OPEN); - test_eq(ch->state, CHANNEL_STATE_OPEN); + tt_int_op(ch->state, ==, CHANNEL_STATE_OPEN); /* Go to maintenance state */ channel_change_state(ch, CHANNEL_STATE_MAINT); - test_eq(ch->state, CHANNEL_STATE_MAINT); + tt_int_op(ch->state, ==, CHANNEL_STATE_MAINT); /* Lower layer close */ chan_test_error(ch); - test_eq(ch->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch->state, ==, CHANNEL_STATE_CLOSING); /* Finish */ chan_test_finish_close(ch); - test_eq(ch->state, CHANNEL_STATE_ERROR); + tt_int_op(ch->state, ==, CHANNEL_STATE_ERROR); channel_run_cleanup(); ch = NULL; @@ -1115,17 +1128,17 @@ test_channel_multi(void *arg) test_overhead_estimate = 1.0f; ch1 = new_fake_channel(); - test_assert(ch1); + tt_assert(ch1); ch2 = new_fake_channel(); - test_assert(ch2); + tt_assert(ch2); /* Initial queue size update */ channel_update_xmit_queue_size(ch1); - test_eq(ch1->bytes_queued_for_xmit, 0); + tt_int_op(ch1->bytes_queued_for_xmit, ==, 0); channel_update_xmit_queue_size(ch2); - test_eq(ch2->bytes_queued_for_xmit, 0); + tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 0); + tt_int_op(global_queue_estimate, ==, 0); /* Queue some cells, check queue estimates */ cell = tor_malloc_zero(sizeof(cell_t)); @@ -1138,10 +1151,10 @@ test_channel_multi(void *arg) channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - test_eq(ch1->bytes_queued_for_xmit, 0); - test_eq(ch2->bytes_queued_for_xmit, 0); + tt_int_op(ch1->bytes_queued_for_xmit, ==, 0); + tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 0); + tt_int_op(global_queue_estimate, ==, 0); /* Stop accepting cells at lower layer */ test_chan_accept_cells = 0; @@ -1152,18 +1165,18 @@ test_channel_multi(void *arg) channel_write_cell(ch1, cell); channel_update_xmit_queue_size(ch1); - test_eq(ch1->bytes_queued_for_xmit, 512); + tt_int_op(ch1->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 512); + tt_int_op(global_queue_estimate, ==, 512); cell = tor_malloc_zero(sizeof(cell_t)); make_fake_cell(cell); channel_write_cell(ch2, cell); channel_update_xmit_queue_size(ch2); - test_eq(ch2->bytes_queued_for_xmit, 512); + tt_int_op(ch2->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 1024); + tt_int_op(global_queue_estimate, ==, 1024); /* Allow cells through again */ test_chan_accept_cells = 1; @@ -1174,10 +1187,10 @@ test_channel_multi(void *arg) /* Update and check queue sizes */ channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - test_eq(ch1->bytes_queued_for_xmit, 512); - test_eq(ch2->bytes_queued_for_xmit, 0); + tt_int_op(ch1->bytes_queued_for_xmit, ==, 512); + tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 512); + tt_int_op(global_queue_estimate, ==, 512); /* Flush chan 1 */ channel_flush_cells(ch1); @@ -1185,10 +1198,10 @@ test_channel_multi(void *arg) /* Update and check queue sizes */ channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - test_eq(ch1->bytes_queued_for_xmit, 0); - test_eq(ch2->bytes_queued_for_xmit, 0); + tt_int_op(ch1->bytes_queued_for_xmit, ==, 0); + tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 0); + tt_int_op(global_queue_estimate, ==, 0); /* Now block again */ test_chan_accept_cells = 0; @@ -1205,10 +1218,10 @@ test_channel_multi(void *arg) /* Check the estimates */ channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - test_eq(ch1->bytes_queued_for_xmit, 512); - test_eq(ch2->bytes_queued_for_xmit, 512); + tt_int_op(ch1->bytes_queued_for_xmit, ==, 512); + tt_int_op(ch2->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 1024); + tt_int_op(global_queue_estimate, ==, 1024); /* Now close channel 2; it should be subtracted from the global queue */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); @@ -1216,7 +1229,7 @@ test_channel_multi(void *arg) UNMOCK(scheduler_release_channel); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 512); + tt_int_op(global_queue_estimate, ==, 512); /* * Since the fake channels aren't registered, channel_free_all() can't @@ -1227,7 +1240,7 @@ test_channel_multi(void *arg) UNMOCK(scheduler_release_channel); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 0); + tt_int_op(global_queue_estimate, ==, 0); /* Now free everything */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); @@ -1262,13 +1275,15 @@ test_channel_queue_impossible(void *arg) (void)arg; +#ifdef ENABLE_MEMPOOLS init_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ packed_cell = packed_cell_new(); - test_assert(packed_cell); + tt_assert(packed_cell); ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); /* We test queueing here; tell it not to accept cells */ test_chan_accept_cells = 0; @@ -1279,7 +1294,7 @@ test_channel_queue_impossible(void *arg) old_count = test_cells_written; /* Assert that the queue is initially empty */ - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); /* Get a fresh cell and write it to the channel*/ cell = tor_malloc_zero(sizeof(cell_t)); @@ -1287,12 +1302,12 @@ test_channel_queue_impossible(void *arg) channel_write_cell(ch, cell); /* Now it should be queued */ - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)),1); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 1); q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); - test_assert(q); + tt_assert(q); if (q) { - test_eq(q->type, CELL_QUEUE_FIXED); - test_eq(q->u.fixed.cell, cell); + tt_int_op(q->type, ==, CELL_QUEUE_FIXED); + tt_ptr_op(q->u.fixed.cell, ==, cell); } /* Do perverse things to it */ tor_free(q->u.fixed.cell); @@ -1304,8 +1319,8 @@ test_channel_queue_impossible(void *arg) */ test_chan_accept_cells = 1; channel_change_state(ch, CHANNEL_STATE_OPEN); - test_assert(test_cells_written == old_count); - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + tt_assert(test_cells_written == old_count); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); /* Same thing but for a var_cell */ @@ -1316,12 +1331,12 @@ test_channel_queue_impossible(void *arg) channel_write_var_cell(ch, var_cell); /* Check that it's queued */ - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 1); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 1); q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); - test_assert(q); + tt_assert(q); if (q) { - test_eq(q->type, CELL_QUEUE_VAR); - test_eq(q->u.var.var_cell, var_cell); + tt_int_op(q->type, ==, CELL_QUEUE_VAR); + tt_ptr_op(q->u.var.var_cell, ==, var_cell); } /* Remove the cell from the queue entry */ @@ -1331,24 +1346,24 @@ test_channel_queue_impossible(void *arg) /* Let it drain and check that the bad entry is discarded */ test_chan_accept_cells = 1; channel_change_state(ch, CHANNEL_STATE_OPEN); - test_assert(test_cells_written == old_count); - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + tt_assert(test_cells_written == old_count); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); /* Same thing with a packed_cell */ test_chan_accept_cells = 0; ch->state = CHANNEL_STATE_MAINT; packed_cell = packed_cell_new(); - test_assert(packed_cell); + tt_assert(packed_cell); channel_write_packed_cell(ch, packed_cell); /* Check that it's queued */ - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 1); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 1); q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); - test_assert(q); + tt_assert(q); if (q) { - test_eq(q->type, CELL_QUEUE_PACKED); - test_eq(q->u.packed.packed_cell, packed_cell); + tt_int_op(q->type, ==, CELL_QUEUE_PACKED); + tt_ptr_op(q->u.packed.packed_cell, ==, packed_cell); } /* Remove the cell from the queue entry */ @@ -1358,8 +1373,8 @@ test_channel_queue_impossible(void *arg) /* Let it drain and check that the bad entry is discarded */ test_chan_accept_cells = 1; channel_change_state(ch, CHANNEL_STATE_OPEN); - test_assert(test_cells_written == old_count); - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + tt_assert(test_cells_written == old_count); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); /* Unknown cell type case */ test_chan_accept_cells = 0; @@ -1369,12 +1384,12 @@ test_channel_queue_impossible(void *arg) channel_write_cell(ch, cell); /* Check that it's queued */ - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)),1); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 1); q = TOR_SIMPLEQ_FIRST(&(ch->outgoing_queue)); - test_assert(q); + tt_assert(q); if (q) { - test_eq(q->type, CELL_QUEUE_FIXED); - test_eq(q->u.fixed.cell, cell); + tt_int_op(q->type, ==, CELL_QUEUE_FIXED); + tt_ptr_op(q->u.fixed.cell, ==, cell); } /* Clobber it, including the queue entry type */ tor_free(q->u.fixed.cell); @@ -1384,12 +1399,14 @@ test_channel_queue_impossible(void *arg) /* Let it drain and check that the bad entry is discarded */ test_chan_accept_cells = 1; channel_change_state(ch, CHANNEL_STATE_OPEN); - test_assert(test_cells_written == old_count); - test_eq(chan_cell_queue_len(&(ch->outgoing_queue)), 0); + tt_assert(test_cells_written == old_count); + tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); done: tor_free(ch); +#ifdef ENABLE_MEMPOOLS free_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ /* * Doing that meant that we couldn't correctly adjust the queue size @@ -1412,18 +1429,18 @@ test_channel_queue_size(void *arg) (void)arg; ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); /* Initial queue size update */ channel_update_xmit_queue_size(ch); - test_eq(ch->bytes_queued_for_xmit, 0); + tt_int_op(ch->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 0); + tt_int_op(global_queue_estimate, ==, 0); /* Test the call-through to our fake lower layer */ n = channel_num_cells_writeable(ch); /* chan_test_num_cells_writeable() always returns 32 */ - test_eq(n, 32); + tt_int_op(n, ==, 32); /* * Now we queue some cells and check that channel_num_cells_writeable() @@ -1442,32 +1459,32 @@ test_channel_queue_size(void *arg) old_count = test_cells_written; channel_write_cell(ch, cell); /* Assert that it got queued, not written through, correctly */ - test_eq(test_cells_written, old_count); + tt_int_op(test_cells_written, ==, old_count); /* Now check chan_test_num_cells_writeable() again */ n = channel_num_cells_writeable(ch); - test_eq(n, 0); /* Should return 0 since we're in CHANNEL_STATE_MAINT */ + tt_int_op(n, ==, 0); /* Should return 0 since we're in CHANNEL_STATE_MAINT */ /* Update queue size estimates */ channel_update_xmit_queue_size(ch); /* One cell, times an overhead factor of 1.0 */ - test_eq(ch->bytes_queued_for_xmit, 512); + tt_int_op(ch->bytes_queued_for_xmit, ==, 512); /* Try a different overhead factor */ test_overhead_estimate = 0.5f; /* This one should be ignored since it's below 1.0 */ channel_update_xmit_queue_size(ch); - test_eq(ch->bytes_queued_for_xmit, 512); + tt_int_op(ch->bytes_queued_for_xmit, ==, 512); /* Now try a larger one */ test_overhead_estimate = 2.0f; channel_update_xmit_queue_size(ch); - test_eq(ch->bytes_queued_for_xmit, 1024); + tt_int_op(ch->bytes_queued_for_xmit, ==, 1024); /* Go back to 1.0 */ test_overhead_estimate = 1.0f; channel_update_xmit_queue_size(ch); - test_eq(ch->bytes_queued_for_xmit, 512); + tt_int_op(ch->bytes_queued_for_xmit, ==, 512); /* Check the global estimate too */ global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 512); + tt_int_op(global_queue_estimate, ==, 512); /* Go to open */ old_count = test_cells_written; @@ -1477,37 +1494,37 @@ test_channel_queue_size(void *arg) * It should try to write, but we aren't accepting cells right now, so * it'll requeue */ - test_eq(test_cells_written, old_count); + tt_int_op(test_cells_written, ==, old_count); /* Check the queue size again */ channel_update_xmit_queue_size(ch); - test_eq(ch->bytes_queued_for_xmit, 512); + tt_int_op(ch->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 512); + tt_int_op(global_queue_estimate, ==, 512); /* * Now the cell is in the queue, and we're open, so we should get 31 * writeable cells. */ n = channel_num_cells_writeable(ch); - test_eq(n, 31); + tt_int_op(n, ==, 31); /* Accept cells again */ test_chan_accept_cells = 1; /* ...and re-process the queue */ old_count = test_cells_written; channel_flush_cells(ch); - test_eq(test_cells_written, old_count + 1); + tt_int_op(test_cells_written, ==, old_count + 1); /* Should have 32 writeable now */ n = channel_num_cells_writeable(ch); - test_eq(n, 32); + tt_int_op(n, ==, 32); /* Should have queue size estimate of zero */ channel_update_xmit_queue_size(ch); - test_eq(ch->bytes_queued_for_xmit, 0); + tt_int_op(ch->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - test_eq(global_queue_estimate, 0); + tt_int_op(global_queue_estimate, ==, 0); /* Okay, now we're done with this one */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); @@ -1532,13 +1549,15 @@ test_channel_write(void *arg) (void)arg; +#ifdef ENABLE_MEMPOOLS init_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ packed_cell = packed_cell_new(); - test_assert(packed_cell); + tt_assert(packed_cell); ch = new_fake_channel(); - test_assert(ch); + tt_assert(ch); make_fake_cell(cell); make_fake_var_cell(var_cell); @@ -1547,13 +1566,13 @@ test_channel_write(void *arg) old_count = test_cells_written; channel_write_cell(ch, cell); - test_assert(test_cells_written == old_count + 1); + tt_assert(test_cells_written == old_count + 1); channel_write_var_cell(ch, var_cell); - test_assert(test_cells_written == old_count + 2); + tt_assert(test_cells_written == old_count + 2); channel_write_packed_cell(ch, packed_cell); - test_assert(test_cells_written == old_count + 3); + tt_assert(test_cells_written == old_count + 3); /* Now we test queueing; tell it not to accept cells */ test_chan_accept_cells = 0; @@ -1566,7 +1585,7 @@ test_channel_write(void *arg) old_count = test_cells_written; channel_write_cell(ch, cell); - test_assert(test_cells_written == old_count); + tt_assert(test_cells_written == old_count); /* * Now change back to open with channel_change_state() and assert that it @@ -1574,7 +1593,7 @@ test_channel_write(void *arg) */ test_chan_accept_cells = 1; channel_change_state(ch, CHANNEL_STATE_OPEN); - test_assert(test_cells_written == old_count + 1); + tt_assert(test_cells_written == old_count + 1); /* * Check the note destroy case @@ -1589,13 +1608,13 @@ test_channel_write(void *arg) old_count = test_destroy_not_pending_calls; channel_write_cell(ch, cell); - test_assert(test_destroy_not_pending_calls == old_count + 1); + tt_assert(test_destroy_not_pending_calls == old_count + 1); /* Now send a non-destroy and check we don't call it */ cell = tor_malloc_zero(sizeof(cell_t)); make_fake_cell(cell); channel_write_cell(ch, cell); - test_assert(test_destroy_not_pending_calls == old_count + 1); + tt_assert(test_destroy_not_pending_calls == old_count + 1); UNMOCK(channel_note_destroy_not_pending); @@ -1613,18 +1632,20 @@ test_channel_write(void *arg) cell = tor_malloc_zero(sizeof(cell_t)); make_fake_cell(cell); channel_write_cell(ch, cell); - test_assert(test_cells_written == old_count); + tt_assert(test_cells_written == old_count); var_cell = tor_malloc_zero(sizeof(var_cell_t) + CELL_PAYLOAD_SIZE); make_fake_var_cell(var_cell); channel_write_var_cell(ch, var_cell); - test_assert(test_cells_written == old_count); + tt_assert(test_cells_written == old_count); packed_cell = packed_cell_new(); channel_write_packed_cell(ch, packed_cell); - test_assert(test_cells_written == old_count); + tt_assert(test_cells_written == old_count); +#ifdef ENABLE_MEMPOOLS free_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ done: tor_free(ch); From faea058baabec9eeb180a0e1812ca7857f3894e0 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 23 Sep 2014 07:18:57 -0700 Subject: [PATCH 092/184] Update test_channeltls.c for recent test suite changes and --enable-mempools support --- src/test/test_channeltls.c | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/test/test_channeltls.c b/src/test/test_channeltls.c index 4dcf4c5579..45e24dfbec 100644 --- a/src/test/test_channeltls.c +++ b/src/test/test_channeltls.c @@ -69,7 +69,7 @@ test_channeltls_create(void *arg) /* Try connecting */ ch = channel_tls_connect(&test_addr, 567, test_digest); - test_assert(ch != NULL); + tt_assert(ch != NULL); done: if (ch) { @@ -118,7 +118,7 @@ test_channeltls_num_bytes_queued(void *arg) /* Try connecting */ ch = channel_tls_connect(&test_addr, 567, test_digest); - test_assert(ch != NULL); + tt_assert(ch != NULL); /* * Next, we have to test ch->num_bytes_queued, which is @@ -128,9 +128,9 @@ test_channeltls_num_bytes_queued(void *arg) * if bufferevents ever work, this will break with them enabled. */ - test_assert(ch->num_bytes_queued != NULL); + tt_assert(ch->num_bytes_queued != NULL); tlschan = BASE_CHAN_TO_TLS(ch); - test_assert(tlschan != NULL); + tt_assert(tlschan != NULL); if (TO_CONN(tlschan->conn)->outbuf == NULL) { /* We need an outbuf to make sure buf_datalen() gets called */ fake_outbuf = 1; @@ -140,7 +140,7 @@ test_channeltls_num_bytes_queued(void *arg) tlschan_buf_datalen_mock_size = 1024; MOCK(buf_datalen, tlschan_buf_datalen_mock); len = ch->num_bytes_queued(ch); - test_eq(len, tlschan_buf_datalen_mock_size); + tt_int_op(len, ==, tlschan_buf_datalen_mock_size); /* * We also cover num_cells_writeable here; since wide_circ_ids = 0 on * the fake tlschans, cell_network_size returns 512, and so with @@ -149,7 +149,7 @@ test_channeltls_num_bytes_queued(void *arg) * - 2 cells. */ n = ch->num_cells_writeable(ch); - test_eq(n, CEIL_DIV(OR_CONN_HIGHWATER, 512) - 2); + tt_int_op(n, ==, CEIL_DIV(OR_CONN_HIGHWATER, 512) - 2); UNMOCK(buf_datalen); tlschan_buf_datalen_mock_target = NULL; tlschan_buf_datalen_mock_size = 0; @@ -204,33 +204,33 @@ test_channeltls_overhead_estimate(void *arg) /* Try connecting */ ch = channel_tls_connect(&test_addr, 567, test_digest); - test_assert(ch != NULL); + tt_assert(ch != NULL); /* First case: silly low ratios should get clamped to 1.0f */ tlschan = BASE_CHAN_TO_TLS(ch); - test_assert(tlschan != NULL); + tt_assert(tlschan != NULL); tlschan->conn->bytes_xmitted = 128; tlschan->conn->bytes_xmitted_by_tls = 64; r = ch->get_overhead_estimate(ch); - test_assert(fabsf(r - 1.0f) < 1E-12); + tt_assert(fabsf(r - 1.0f) < 1E-12); tlschan->conn->bytes_xmitted_by_tls = 127; r = ch->get_overhead_estimate(ch); - test_assert(fabsf(r - 1.0f) < 1E-12); + tt_assert(fabsf(r - 1.0f) < 1E-12); /* Now middle of the range */ tlschan->conn->bytes_xmitted_by_tls = 192; r = ch->get_overhead_estimate(ch); - test_assert(fabsf(r - 1.5f) < 1E-12); + tt_assert(fabsf(r - 1.5f) < 1E-12); /* Now above the 2.0f clamp */ tlschan->conn->bytes_xmitted_by_tls = 257; r = ch->get_overhead_estimate(ch); - test_assert(fabsf(r - 2.0f) < 1E-12); + tt_assert(fabsf(r - 2.0f) < 1E-12); tlschan->conn->bytes_xmitted_by_tls = 512; r = ch->get_overhead_estimate(ch); - test_assert(fabsf(r - 2.0f) < 1E-12); + tt_assert(fabsf(r - 2.0f) < 1E-12); done: if (ch) { @@ -256,7 +256,7 @@ tlschan_buf_datalen_mock(const buf_t *buf) { if (buf != NULL && buf == tlschan_buf_datalen_mock_target) { return tlschan_buf_datalen_mock_size; - }else { + } else { return buf_datalen__real(buf); } } @@ -269,10 +269,10 @@ tlschan_connection_or_connect_mock(const tor_addr_t *addr, { or_connection_t *result = NULL; - test_assert(addr != NULL); - test_assert(port != 0); - test_assert(digest != NULL); - test_assert(tlschan != NULL); + tt_assert(addr != NULL); + tt_assert(port != 0); + tt_assert(digest != NULL); + tt_assert(tlschan != NULL); /* Make a fake orconn */ result = tor_malloc_zero(sizeof(*result)); @@ -297,11 +297,11 @@ tlschan_fake_close_method(channel_t *chan) { channel_tls_t *tlschan = NULL; - test_assert(chan != NULL); - test_eq(chan->magic, TLS_CHAN_MAGIC); + tt_assert(chan != NULL); + tt_int_op(chan->magic, ==, TLS_CHAN_MAGIC); tlschan = BASE_CHAN_TO_TLS(chan); - test_assert(tlschan != NULL); + tt_assert(tlschan != NULL); /* Just free the fake orconn */ tor_free(tlschan->conn); @@ -315,7 +315,7 @@ tlschan_fake_close_method(channel_t *chan) static int tlschan_is_local_addr_mock(const tor_addr_t *addr) { - test_assert(addr != NULL); + tt_assert(addr != NULL); done: return tlschan_local; From 4d20c427b4874a3cb97e4567e4ae54830c5a79be Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 23 Sep 2014 07:22:26 -0700 Subject: [PATCH 093/184] Update test_relay.c for recent test suite changes and --enable-mempools support --- src/test/test_relay.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/test/test_relay.c b/src/test/test_relay.c index 6b9cb33ca3..6907597705 100644 --- a/src/test/test_relay.c +++ b/src/test/test_relay.c @@ -61,14 +61,16 @@ test_relay_append_cell_to_circuit_queue(void *arg) (void)arg; /* We'll need the cell pool for append_cell_to_circuit_queue() to work */ +#ifdef ENABLE_MEMPOOLS init_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ /* Make fake channels to be nchan and pchan for the circuit */ nchan = new_fake_channel(); - test_assert(nchan); + tt_assert(nchan); pchan = new_fake_channel(); - test_assert(pchan); + tt_assert(pchan); /* We'll need chans with working cmuxes */ nchan->cmux = circuitmux_alloc(); @@ -76,7 +78,7 @@ test_relay_append_cell_to_circuit_queue(void *arg) /* Make a fake orcirc */ orcirc = new_fake_orcirc(nchan, pchan); - test_assert(orcirc); + tt_assert(orcirc); /* Make a cell */ cell = tor_malloc_zero(sizeof(cell_t)); @@ -90,14 +92,14 @@ test_relay_append_cell_to_circuit_queue(void *arg) append_cell_to_circuit_queue(TO_CIRCUIT(orcirc), nchan, cell, CELL_DIRECTION_OUT, 0); new_count = get_mock_scheduler_has_waiting_cells_count(); - test_eq(new_count, old_count + 1); + tt_int_op(new_count, ==, old_count + 1); /* Now try the reverse direction */ old_count = get_mock_scheduler_has_waiting_cells_count(); append_cell_to_circuit_queue(TO_CIRCUIT(orcirc), pchan, cell, CELL_DIRECTION_IN, 0); new_count = get_mock_scheduler_has_waiting_cells_count(); - test_eq(new_count, old_count + 1); + tt_int_op(new_count, ==, old_count + 1); UNMOCK(scheduler_channel_has_waiting_cells); @@ -117,7 +119,9 @@ test_relay_append_cell_to_circuit_queue(void *arg) tor_free(nchan); if (pchan && pchan->cmux) circuitmux_free(pchan->cmux); tor_free(pchan); +#ifdef ENABLE_MEMPOOLS free_cell_pool(); +#endif /* ENABLE_MEMPOOLS */ return; } From a28cfa128f55c64cfd9562dff7e3b5515d1615ad Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 23 Sep 2014 21:03:09 -0700 Subject: [PATCH 094/184] Update test_relay.c for recent test suite changes and --enable-mempools support --- src/test/test_scheduler.c | 162 +++++++++++++++++++------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index 79fc453bd3..da5c4e8fa0 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -80,14 +80,14 @@ static void test_scheduler_queue_heuristic(void *arg); static void mock_event_free_all(void) { - test_assert(mock_event_base != NULL); + tt_assert(mock_event_base != NULL); if (mock_event_base) { event_base_free(mock_event_base); mock_event_base = NULL; } - test_eq(mock_event_base, NULL); + tt_ptr_op(mock_event_base, ==, NULL); done: return; @@ -100,7 +100,7 @@ mock_event_init(void) struct event_config *cfg = NULL; #endif - test_eq(mock_event_base, NULL); + tt_ptr_op(mock_event_base, ==, NULL); /* * Really cut down from tor_libevent_initialize of @@ -122,7 +122,7 @@ mock_event_init(void) #endif } - test_assert(mock_event_base != NULL); + tt_assert(mock_event_base != NULL); done: return; @@ -197,7 +197,7 @@ channel_flush_some_cells_mock(channel_t *chan, ssize_t num_cells) char unlimited = 0; flush_mock_channel_t *found = NULL; - test_assert(chan != NULL); + tt_assert(chan != NULL); if (chan) { if (num_cells < 0) { num_cells = 0; @@ -250,8 +250,8 @@ circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, { int result = 0; - test_assert(cmux_1 != NULL); - test_assert(cmux_2 != NULL); + tt_assert(cmux_1 != NULL); + tt_assert(cmux_2 != NULL); if (cmux_1 != cmux_2) { if (cmux_1 == mock_ccm_tgt_1 && cmux_2 == mock_ccm_tgt_2) result = -1; @@ -277,7 +277,7 @@ circuitmux_get_policy_mock(circuitmux_t *cmux) { const circuitmux_policy_t *result = NULL; - test_assert(cmux != NULL); + tt_assert(cmux != NULL); if (cmux) { if (cmux == mock_cgp_tgt_1) result = mock_cgp_val_1; else if (cmux == mock_cgp_tgt_2) result = mock_cgp_val_2; @@ -342,11 +342,11 @@ test_scheduler_channel_states(void *arg) */ MOCK(scheduler_run, scheduler_run_noop_mock); - test_eq(smartlist_len(channels_pending), 0); + tt_int_op(smartlist_len(channels_pending), ==, 0); /* Set up a fake channel */ ch1 = new_fake_channel(); - test_assert(ch1); + tt_assert(ch1); /* Start it off in OPENING */ ch1->state = CHANNEL_STATE_OPENING; @@ -354,70 +354,70 @@ test_scheduler_channel_states(void *arg) ch1->cmux = circuitmux_alloc(); /* Try to register it */ channel_register(ch1); - test_assert(ch1->registered); + tt_assert(ch1->registered); /* It should start off in SCHED_CHAN_IDLE */ - test_eq(ch1->scheduler_state, SCHED_CHAN_IDLE); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_IDLE); /* Now get another one */ ch2 = new_fake_channel(); - test_assert(ch2); + tt_assert(ch2); ch2->state = CHANNEL_STATE_OPENING; ch2->cmux = circuitmux_alloc(); channel_register(ch2); - test_assert(ch2->registered); + tt_assert(ch2->registered); /* Send it to SCHED_CHAN_WAITING_TO_WRITE */ scheduler_channel_has_waiting_cells(ch1); - test_eq(ch1->scheduler_state, SCHED_CHAN_WAITING_TO_WRITE); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_WAITING_TO_WRITE); /* This should send it to SCHED_CHAN_PENDING */ scheduler_channel_wants_writes(ch1); - test_eq(ch1->scheduler_state, SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 1); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 1); /* Now send ch2 to SCHED_CHAN_WAITING_FOR_CELLS */ scheduler_channel_wants_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_WAITING_FOR_CELLS); /* Drop ch2 back to idle */ scheduler_channel_doesnt_want_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_IDLE); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_IDLE); /* ...and back to SCHED_CHAN_WAITING_FOR_CELLS */ scheduler_channel_wants_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_WAITING_FOR_CELLS); /* ...and this should kick ch2 into SCHED_CHAN_PENDING */ scheduler_channel_has_waiting_cells(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 2); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 2); /* This should send ch2 to SCHED_CHAN_WAITING_TO_WRITE */ scheduler_channel_doesnt_want_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_TO_WRITE); - test_eq(smartlist_len(channels_pending), 1); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_WAITING_TO_WRITE); + tt_int_op(smartlist_len(channels_pending), ==, 1); /* ...and back to SCHED_CHAN_PENDING */ scheduler_channel_wants_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 2); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 2); /* Now we exercise scheduler_touch_channel */ old_count = scheduler_compare_channels_mock_ctr; scheduler_touch_channel(ch1); - test_assert(scheduler_compare_channels_mock_ctr > old_count); + tt_assert(scheduler_compare_channels_mock_ctr > old_count); /* Close */ channel_mark_for_close(ch1); - test_eq(ch1->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch1->state, ==, CHANNEL_STATE_CLOSING); channel_mark_for_close(ch2); - test_eq(ch2->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch2->state, ==, CHANNEL_STATE_CLOSING); channel_closed(ch1); - test_eq(ch1->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch1->state, ==, CHANNEL_STATE_CLOSED); ch1 = NULL; channel_closed(ch2); - test_eq(ch2->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch2->state, ==, CHANNEL_STATE_CLOSED); ch2 = NULL; /* Shut things down */ @@ -474,20 +474,20 @@ test_scheduler_compare_channels(void *arg) /* Equal-channel case */ result = scheduler_compare_channels(&c1, &c1); - test_eq(result, 0); + tt_int_op(result, ==, 0); /* Distinct channels, distinct policies */ result = scheduler_compare_channels(&c1, &c2); - test_eq(result, -1); + tt_int_op(result, ==, -1); result = scheduler_compare_channels(&c2, &c1); - test_eq(result, 1); + tt_int_op(result, ==, 1); /* Distinct channels, same policy */ mock_cgp_val_2 = mock_cgp_val_1; result = scheduler_compare_channels(&c1, &c2); - test_eq(result, -1); + tt_int_op(result, ==, -1); result = scheduler_compare_channels(&c2, &c1); - test_eq(result, 1); + tt_int_op(result, ==, 1); done: @@ -512,24 +512,24 @@ test_scheduler_initfree(void *arg) { (void)arg; - test_eq(channels_pending, NULL); - test_eq(run_sched_ev, NULL); + tt_ptr_op(channels_pending, ==, NULL); + tt_ptr_op(run_sched_ev, ==, NULL); mock_event_init(); MOCK(tor_libevent_get_base, tor_libevent_get_base_mock); scheduler_init(); - test_assert(channels_pending != NULL); - test_assert(run_sched_ev != NULL); + tt_assert(channels_pending != NULL); + tt_assert(run_sched_ev != NULL); scheduler_free_all(); UNMOCK(tor_libevent_get_base); mock_event_free_all(); - test_eq(channels_pending, NULL); - test_eq(run_sched_ev, NULL); + tt_ptr_op(channels_pending, ==, NULL); + tt_ptr_op(run_sched_ev, ==, NULL); done: return; @@ -558,11 +558,11 @@ test_scheduler_loop(void *arg) */ MOCK(scheduler_run, scheduler_run_noop_mock); - test_eq(smartlist_len(channels_pending), 0); + tt_int_op(smartlist_len(channels_pending), ==, 0); /* Set up a fake channel */ ch1 = new_fake_channel(); - test_assert(ch1); + tt_assert(ch1); /* Start it off in OPENING */ ch1->state = CHANNEL_STATE_OPENING; @@ -570,53 +570,53 @@ test_scheduler_loop(void *arg) ch1->cmux = circuitmux_alloc(); /* Try to register it */ channel_register(ch1); - test_assert(ch1->registered); + tt_assert(ch1->registered); /* Finish opening it */ channel_change_state(ch1, CHANNEL_STATE_OPEN); /* It should start off in SCHED_CHAN_IDLE */ - test_eq(ch1->scheduler_state, SCHED_CHAN_IDLE); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_IDLE); /* Now get another one */ ch2 = new_fake_channel(); - test_assert(ch2); + tt_assert(ch2); ch2->state = CHANNEL_STATE_OPENING; ch2->cmux = circuitmux_alloc(); channel_register(ch2); - test_assert(ch2->registered); + tt_assert(ch2->registered); /* * Don't open ch2; then channel_num_cells_writeable() will return * zero and we'll get coverage of that exception case in scheduler_run() */ - test_eq(ch1->state, CHANNEL_STATE_OPEN); - test_eq(ch2->state, CHANNEL_STATE_OPENING); + tt_int_op(ch1->state, ==, CHANNEL_STATE_OPEN); + tt_int_op(ch2->state, ==, CHANNEL_STATE_OPENING); /* Send it to SCHED_CHAN_WAITING_TO_WRITE */ scheduler_channel_has_waiting_cells(ch1); - test_eq(ch1->scheduler_state, SCHED_CHAN_WAITING_TO_WRITE); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_WAITING_TO_WRITE); /* This should send it to SCHED_CHAN_PENDING */ scheduler_channel_wants_writes(ch1); - test_eq(ch1->scheduler_state, SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 1); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 1); /* Now send ch2 to SCHED_CHAN_WAITING_FOR_CELLS */ scheduler_channel_wants_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_WAITING_FOR_CELLS); /* Drop ch2 back to idle */ scheduler_channel_doesnt_want_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_IDLE); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_IDLE); /* ...and back to SCHED_CHAN_WAITING_FOR_CELLS */ scheduler_channel_wants_writes(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_WAITING_FOR_CELLS); /* ...and this should kick ch2 into SCHED_CHAN_PENDING */ scheduler_channel_has_waiting_cells(ch2); - test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 2); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 2); /* * Now we've got two pending channels and need to fire off @@ -634,11 +634,11 @@ test_scheduler_loop(void *arg) * Assert that they're still in the states we left and aren't still * pending */ - test_eq(ch1->state, CHANNEL_STATE_OPEN); - test_eq(ch2->state, CHANNEL_STATE_OPENING); - test_assert(ch1->scheduler_state != SCHED_CHAN_PENDING); - test_assert(ch2->scheduler_state != SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 0); + tt_int_op(ch1->state, ==, CHANNEL_STATE_OPEN); + tt_int_op(ch2->state, ==, CHANNEL_STATE_OPENING); + tt_assert(ch1->scheduler_state != SCHED_CHAN_PENDING); + tt_assert(ch2->scheduler_state != SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 0); /* Now, finish opening ch2, and get both back to pending */ channel_change_state(ch2, CHANNEL_STATE_OPEN); @@ -646,11 +646,11 @@ test_scheduler_loop(void *arg) scheduler_channel_wants_writes(ch2); scheduler_channel_has_waiting_cells(ch1); scheduler_channel_has_waiting_cells(ch2); - test_eq(ch1->state, CHANNEL_STATE_OPEN); - test_eq(ch2->state, CHANNEL_STATE_OPEN); - test_eq(ch1->scheduler_state, SCHED_CHAN_PENDING); - test_eq(ch2->scheduler_state, SCHED_CHAN_PENDING); - test_eq(smartlist_len(channels_pending), 2); + tt_int_op(ch1->state, ==, CHANNEL_STATE_OPEN); + tt_int_op(ch2->state, ==, CHANNEL_STATE_OPEN); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_PENDING); + tt_int_op(smartlist_len(channels_pending), ==, 2); /* Now, set up the channel_flush_some_cells() mock */ MOCK(channel_flush_some_cells, channel_flush_some_cells_mock); @@ -680,24 +680,24 @@ test_scheduler_loop(void *arg) * ch1 should have gone to SCHED_CHAN_WAITING_FOR_CELLS, with 16 flushed * and 32 writeable. */ - test_eq(ch1->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + tt_int_op(ch1->scheduler_state, ==, SCHED_CHAN_WAITING_FOR_CELLS); /* * ...ch2 should also have gone to SCHED_CHAN_WAITING_FOR_CELLS, with * channel_more_to_flush() returning false and channel_num_cells_writeable() * > 0/ */ - test_eq(ch2->scheduler_state, SCHED_CHAN_WAITING_FOR_CELLS); + tt_int_op(ch2->scheduler_state, ==, SCHED_CHAN_WAITING_FOR_CELLS); /* Close */ channel_mark_for_close(ch1); - test_eq(ch1->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch1->state, ==, CHANNEL_STATE_CLOSING); channel_mark_for_close(ch2); - test_eq(ch2->state, CHANNEL_STATE_CLOSING); + tt_int_op(ch2->state, ==, CHANNEL_STATE_CLOSING); channel_closed(ch1); - test_eq(ch1->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch1->state, ==, CHANNEL_STATE_CLOSED); ch1 = NULL; channel_closed(ch2); - test_eq(ch2->state, CHANNEL_STATE_CLOSED); + tt_int_op(ch2->state, ==, CHANNEL_STATE_CLOSED); ch2 = NULL; /* Shut things down */ @@ -729,22 +729,22 @@ test_scheduler_queue_heuristic(void *arg) /* Not yet inited case */ scheduler_update_queue_heuristic(now - 180); - test_eq(queue_heuristic, 0); - test_eq(queue_heuristic_timestamp, now - 180); + tt_int_op(queue_heuristic, ==, 0); + tt_int_op(queue_heuristic_timestamp, ==, now - 180); queue_heuristic = 1000000000L; queue_heuristic_timestamp = now - 120; scheduler_update_queue_heuristic(now - 119); - test_eq(queue_heuristic, 500000000L); - test_eq(queue_heuristic_timestamp, now - 119); + tt_int_op(queue_heuristic, ==, 500000000L); + tt_int_op(queue_heuristic_timestamp, ==, now - 119); scheduler_update_queue_heuristic(now - 116); - test_eq(queue_heuristic, 62500000L); - test_eq(queue_heuristic_timestamp, now - 116); + tt_int_op(queue_heuristic, ==, 62500000L); + tt_int_op(queue_heuristic_timestamp, ==, now - 116); qh = scheduler_get_queue_heuristic(); - test_eq(qh, 0); + tt_int_op(qh, ==, 0); done: return; From 12b6c7df4aaf3224bc5649ef69a06dccc58ae961 Mon Sep 17 00:00:00 2001 From: Andrea Shepard Date: Tue, 7 Oct 2014 09:53:57 -0700 Subject: [PATCH 095/184] Make queue thresholds and flush size for global scheduler into config options --- src/or/config.c | 22 ++++++++++++++++++++++ src/or/or.h | 13 +++++++++++++ src/or/scheduler.c | 38 +++++++++++++++++++++++++++++--------- src/or/scheduler.h | 3 +++ 4 files changed, 67 insertions(+), 9 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 86d7c6e502..c12437232d 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -367,6 +367,9 @@ static config_var_t option_vars_[] = { V(ServerDNSSearchDomains, BOOL, "0"), V(ServerDNSTestAddresses, CSV, "www.google.com,www.mit.edu,www.yahoo.com,www.slashdot.org"), + V(SchedulerLowWaterMark, MEMUNIT, "16 kB"), + V(SchedulerHighWaterMark, MEMUNIT, "32 kB"), + V(SchedulerMaxFlushCells, UINT, "16"), V(ShutdownWaitLength, INTERVAL, "30 seconds"), V(SocksListenAddress, LINELIST, NULL), V(SocksPolicy, LINELIST, NULL), @@ -1522,6 +1525,25 @@ options_act(const or_options_t *old_options) return -1; } + /* Set up scheduler thresholds */ + if (options->SchedulerLowWaterMark > 0 && + options->SchedulerHighWaterMark > options->SchedulerLowWaterMark) { + scheduler_set_watermarks(options->SchedulerLowWaterMark, + options->SchedulerHighWaterMark, + (options->SchedulerMaxFlushCells > 0) ? + options->SchedulerMaxFlushCells : 16); + } else { + if (options->SchedulerLowWaterMark == 0) { + log_warn(LD_GENERAL, "Bad SchedulerLowWaterMark option"); + } + + if (options->SchedulerHighWaterMark <= options->SchedulerLowWaterMark) { + log_warn(LD_GENERAL, "Bad SchedulerHighWaterMark option"); + } + + return -1; + } + /* Set up accounting */ if (accounting_parse_options(options, 0)<0) { log_warn(LD_CONFIG,"Error in accounting options"); diff --git a/src/or/or.h b/src/or/or.h index 320931d471..25df54a669 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4229,6 +4229,19 @@ typedef struct { /** Should we send the timestamps that pre-023 hidden services want? */ int Support022HiddenServices; + + /** Low-water mark for global scheduler - start sending when estimated + * queued size falls below this threshold. + */ + uint32_t SchedulerLowWaterMark; + /** High-water mark for global scheduler - stop sending when estimated + * queued size exceeds this threshold. + */ + uint32_t SchedulerHighWaterMark; + /** Flush size for global scheduler - flush this many cells at a time + * when sending. + */ + unsigned int SchedulerMaxFlushCells; } or_options_t; /** Persistent state for an onion router, as saved to disk. */ diff --git a/src/or/scheduler.c b/src/or/scheduler.c index c161393b5a..c2ede846bf 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -21,16 +21,20 @@ #include #endif -#define SCHED_Q_LOW_WATER 16384 -#define SCHED_Q_HIGH_WATER (2 * SCHED_Q_LOW_WATER) +/* + * Scheduler high/low watermarks + */ + +static uint32_t sched_q_low_water = 16384; +static uint32_t sched_q_high_water = 32768; /* * Maximum cells to flush in a single call to channel_flush_some_cells(); * setting this low means more calls, but too high and we could overshoot - * SCHED_Q_HIGH_WATER. + * sched_q_high_water. */ -#define SCHED_MAX_FLUSH_CELLS 16 +static uint32_t sched_max_flush_cells = 16; /* * Write scheduling works by keeping track of which channels can @@ -343,7 +347,7 @@ scheduler_more_work(void) { tor_assert(channels_pending); - return ((scheduler_get_queue_heuristic() < SCHED_Q_LOW_WATER) && + return ((scheduler_get_queue_heuristic() < sched_q_low_water) && ((smartlist_len(channels_pending) > 0))) ? 1 : 0; } @@ -387,12 +391,12 @@ scheduler_run, (void)) log_debug(LD_SCHED, "We have a chance to run the scheduler"); - if (scheduler_get_queue_heuristic() < SCHED_Q_LOW_WATER) { + if (scheduler_get_queue_heuristic() < sched_q_low_water) { n_chans_before = smartlist_len(channels_pending); q_len_before = channel_get_global_queue_estimate(); q_heur_before = scheduler_get_queue_heuristic(); - while (scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER && + while (scheduler_get_queue_heuristic() <= sched_q_high_water && smartlist_len(channels_pending) > 0) { /* Pop off a channel */ chan = smartlist_pqueue_pop(channels_pending, @@ -410,10 +414,10 @@ scheduler_run, (void)) flushed = 0; while (flushed < n_cells && - scheduler_get_queue_heuristic() <= SCHED_Q_HIGH_WATER) { + scheduler_get_queue_heuristic() <= sched_q_high_water) { flushed_this_time = channel_flush_some_cells(chan, - MIN(SCHED_MAX_FLUSH_CELLS, + MIN(sched_max_flush_cells, n_cells - flushed)); if (flushed_this_time <= 0) break; flushed += flushed_this_time; @@ -686,3 +690,19 @@ scheduler_update_queue_heuristic(time_t now) /* else no update needed, or time went backward */ } +/** + * Set scheduler watermarks and flush size + */ + +void +scheduler_set_watermarks(uint32_t lo, uint32_t hi, uint32_t max_flush) +{ + /* Sanity assertions - caller should ensure these are true */ + tor_assert(lo > 0); + tor_assert(hi > lo); + tor_assert(max_flush > 0); + + sched_q_low_water = lo; + sched_q_high_water = hi; + sched_max_flush_cells = max_flush; +} diff --git a/src/or/scheduler.h b/src/or/scheduler.h index 8854d5a508..404776b18b 100644 --- a/src/or/scheduler.h +++ b/src/or/scheduler.h @@ -34,6 +34,9 @@ void scheduler_adjust_queue_size(channel_t *chan, char dir, uint64_t adj); /* Notify scheduler that a channel's queue position may have changed */ void scheduler_touch_channel(channel_t *chan); +/* Adjust the watermarks from config file*/ +void scheduler_set_watermarks(uint32_t lo, uint32_t hi, uint32_t max_flush); + /* Things only scheduler.c and its test suite should see */ #ifdef SCHEDULER_PRIVATE_ From 3d0d49be230a8720ebdadf668b993f8ba2c5b2ca Mon Sep 17 00:00:00 2001 From: meejah Date: Wed, 15 Oct 2014 02:17:54 -0600 Subject: [PATCH 096/184] Additional test for error-case This error-case was already fixed by previous changes, this is to cover it in case there's a regression. --- src/test/test_checkdir.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 1580e6271d..7bf735e061 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -43,6 +43,14 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); + /* test: should get an error on existing dir with + wrong perms */ + testdir = get_datadir_fname("checkdir_new_groupok_err"); + tt_int_op(0, ==, mkdir(testdir, 027)); + cpd_chkopts = CPD_CHECK_MODE_ONLY|CPD_CREATE|CPD_GROUP_OK; + tt_int_op(-1, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tor_free(testdir); + /* test: create new dir, CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_new_groupread"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; From dc05b8549a73064337020eb3f0d8d91c8149518a Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 31 Oct 2014 11:32:32 -0400 Subject: [PATCH 097/184] Use digest256map for computing microdescriptor downloads --- changes/bug13399 | 7 +++++++ src/or/microdesc.c | 36 ++++++++++++++++++------------------ src/or/microdesc.h | 2 +- src/or/routerlist.c | 30 ++++++++++++++++++------------ src/or/routerlist.h | 2 +- 5 files changed, 45 insertions(+), 32 deletions(-) create mode 100644 changes/bug13399 diff --git a/changes/bug13399 b/changes/bug13399 new file mode 100644 index 0000000000..bbd0b2376b --- /dev/null +++ b/changes/bug13399 @@ -0,0 +1,7 @@ + o Minor bugfixes: + - Use a full 256 bits of the SHA256 digest of a microdescriptor when + computing which microdescriptors to download. This keeps us from + erroneous download behavior if two microdescriptor digests ever have + the same first 160 bits. Fixes part of bug 13399; bugfix on + 0.2.3.1-alpha. + diff --git a/src/or/microdesc.c b/src/or/microdesc.c index e8c11a90c2..7b826008b5 100644 --- a/src/or/microdesc.c +++ b/src/or/microdesc.c @@ -163,19 +163,18 @@ microdescs_add_to_cache(microdesc_cache_t *cache, md->last_listed = listed_at); } if (requested_digests256) { - digestmap_t *requested; /* XXXX actually we should just use a - digest256map */ - requested = digestmap_new(); + digest256map_t *requested; + requested = digest256map_new(); /* Set requested[d] to DIGEST_REQUESTED for every md we requested. */ - SMARTLIST_FOREACH(requested_digests256, const char *, cp, - digestmap_set(requested, cp, DIGEST_REQUESTED)); + SMARTLIST_FOREACH(requested_digests256, const uint8_t *, cp, + digest256map_set(requested, cp, DIGEST_REQUESTED)); /* Set requested[d] to DIGEST_INVALID for every md we requested which we * will never be able to parse. Remove the ones we didn't request from * invalid_digests. */ - SMARTLIST_FOREACH_BEGIN(invalid_digests, char *, cp) { - if (digestmap_get(requested, cp)) { - digestmap_set(requested, cp, DIGEST_INVALID); + SMARTLIST_FOREACH_BEGIN(invalid_digests, uint8_t *, cp) { + if (digest256map_get(requested, cp)) { + digest256map_set(requested, cp, DIGEST_INVALID); } else { tor_free(cp); SMARTLIST_DEL_CURRENT(invalid_digests, cp); @@ -185,8 +184,9 @@ microdescs_add_to_cache(microdesc_cache_t *cache, * ones we never requested from the 'descriptors' smartlist. */ SMARTLIST_FOREACH_BEGIN(descriptors, microdesc_t *, md) { - if (digestmap_get(requested, md->digest)) { - digestmap_set(requested, md->digest, DIGEST_RECEIVED); + if (digest256map_get(requested, (const uint8_t*)md->digest)) { + digest256map_set(requested, (const uint8_t*)md->digest, + DIGEST_RECEIVED); } else { log_fn(LOG_PROTOCOL_WARN, LD_DIR, "Received non-requested microdesc"); microdesc_free(md); @@ -195,14 +195,14 @@ microdescs_add_to_cache(microdesc_cache_t *cache, } SMARTLIST_FOREACH_END(md); /* Remove the ones we got or the invalid ones from requested_digests256. */ - SMARTLIST_FOREACH_BEGIN(requested_digests256, char *, cp) { - void *status = digestmap_get(requested, cp); + SMARTLIST_FOREACH_BEGIN(requested_digests256, uint8_t *, cp) { + void *status = digest256map_get(requested, cp); if (status == DIGEST_RECEIVED || status == DIGEST_INVALID) { tor_free(cp); SMARTLIST_DEL_CURRENT(requested_digests256, cp); } } SMARTLIST_FOREACH_END(cp); - digestmap_free(requested, NULL); + digest256map_free(requested, NULL); } /* For every requested microdescriptor that was unparseable, mark it @@ -794,7 +794,7 @@ microdesc_average_size(microdesc_cache_t *cache) * smartlist. Omit all microdescriptors whose digest appear in skip. */ smartlist_t * microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache, - int downloadable_only, digestmap_t *skip) + int downloadable_only, digest256map_t *skip) { smartlist_t *result = smartlist_new(); time_t now = time(NULL); @@ -806,7 +806,7 @@ microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache, !download_status_is_ready(&rs->dl_status, now, get_options()->TestingMicrodescMaxDownloadTries)) continue; - if (skip && digestmap_get(skip, rs->descriptor_digest)) + if (skip && digest256map_get(skip, (const uint8_t*)rs->descriptor_digest)) continue; if (tor_mem_is_zero(rs->descriptor_digest, DIGEST256_LEN)) continue; @@ -831,7 +831,7 @@ update_microdesc_downloads(time_t now) const or_options_t *options = get_options(); networkstatus_t *consensus; smartlist_t *missing; - digestmap_t *pending; + digest256map_t *pending; if (should_delay_dir_fetches(options, NULL)) return; @@ -845,14 +845,14 @@ update_microdesc_downloads(time_t now) if (!we_fetch_microdescriptors(options)) return; - pending = digestmap_new(); + pending = digest256map_new(); list_pending_microdesc_downloads(pending); missing = microdesc_list_missing_digest256(consensus, get_microdesc_cache(), 1, pending); - digestmap_free(pending, NULL); + digest256map_free(pending, NULL); launch_descriptor_downloads(DIR_PURPOSE_FETCH_MICRODESC, missing, NULL, now); diff --git a/src/or/microdesc.h b/src/or/microdesc.h index f858d9ffd7..fdfe8922ab 100644 --- a/src/or/microdesc.h +++ b/src/or/microdesc.h @@ -37,7 +37,7 @@ size_t microdesc_average_size(microdesc_cache_t *cache); smartlist_t *microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache, int downloadable_only, - digestmap_t *skip); + digest256map_t *skip); void microdesc_free_(microdesc_t *md, const char *fname, int line); #define microdesc_free(md) \ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 00994863f0..214b7c483f 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -79,6 +79,7 @@ static const char *signed_descriptor_get_body_impl( const signed_descriptor_t *desc, int with_annotations); static void list_pending_downloads(digestmap_t *result, + digest256map_t *result256, int purpose, const char *prefix); static void list_pending_fpsk_downloads(fp_pair_map_t *result); static void launch_dummy_descriptor_download_as_needed(time_t now, @@ -717,7 +718,8 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now) * First, we get the lists of already pending downloads so we don't * duplicate effort. */ - list_pending_downloads(pending_id, DIR_PURPOSE_FETCH_CERTIFICATE, "fp/"); + list_pending_downloads(pending_id, NULL, + DIR_PURPOSE_FETCH_CERTIFICATE, "fp/"); list_pending_fpsk_downloads(pending_cert); /* @@ -4268,7 +4270,7 @@ clear_dir_servers(void) * corresponding elements of result to a nonzero value. */ static void -list_pending_downloads(digestmap_t *result, +list_pending_downloads(digestmap_t *result, digest256map_t *result256, int purpose, const char *prefix) { const size_t p_len = strlen(prefix); @@ -4278,7 +4280,7 @@ list_pending_downloads(digestmap_t *result, if (purpose == DIR_PURPOSE_FETCH_MICRODESC) flags = DSR_DIGEST256|DSR_BASE64; - tor_assert(result); + tor_assert(result || result256); SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) { if (conn->type == CONN_TYPE_DIR && @@ -4291,11 +4293,19 @@ list_pending_downloads(digestmap_t *result, } } SMARTLIST_FOREACH_END(conn); - SMARTLIST_FOREACH(tmp, char *, d, + if (result) { + SMARTLIST_FOREACH(tmp, char *, d, { digestmap_set(result, d, (void*)1); tor_free(d); }); + } else if (result256) { + SMARTLIST_FOREACH(tmp, uint8_t *, d, + { + digest256map_set(result256, d, (void*)1); + tor_free(d); + }); + } smartlist_free(tmp); } @@ -4307,20 +4317,16 @@ list_pending_descriptor_downloads(digestmap_t *result, int extrainfo) { int purpose = extrainfo ? DIR_PURPOSE_FETCH_EXTRAINFO : DIR_PURPOSE_FETCH_SERVERDESC; - list_pending_downloads(result, purpose, "d/"); + list_pending_downloads(result, NULL, purpose, "d/"); } /** For every microdescriptor we are currently downloading by descriptor - * digest, set result[d] to (void*)1. (Note that microdescriptor digests - * are 256-bit, and digestmap_t only holds 160-bit digests, so we're only - * getting the first 20 bytes of each digest here.) - * - * XXXX Let there be a digestmap256_t, and use that instead. + * digest, set result[d] to (void*)1. */ void -list_pending_microdesc_downloads(digestmap_t *result) +list_pending_microdesc_downloads(digest256map_t *result) { - list_pending_downloads(result, DIR_PURPOSE_FETCH_MICRODESC, "d/"); + list_pending_downloads(NULL, result, DIR_PURPOSE_FETCH_MICRODESC, "d/"); } /** For every certificate we are currently downloading by (identity digest, diff --git a/src/or/routerlist.h b/src/or/routerlist.h index ac6f95b3ef..c6151deb49 100644 --- a/src/or/routerlist.h +++ b/src/or/routerlist.h @@ -196,7 +196,7 @@ int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs, int hid_serv_acting_as_directory(void); int hid_serv_responsible_for_desc_id(const char *id); -void list_pending_microdesc_downloads(digestmap_t *result); +void list_pending_microdesc_downloads(digest256map_t *result); void launch_descriptor_downloads(int purpose, smartlist_t *downloadable, const routerstatus_t *source, From efd5001c3b94c633850d7ae9b9f5b6e1ee45ab4e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 31 Oct 2014 11:36:31 -0400 Subject: [PATCH 098/184] Use digest256_len in networkstatus_copy_old_consensus_info() Now, if a router ever changes its microdescriptor, but the new microdescriptor SHA256 hash has the same 160-bit prefix as the old one, we treat it as a new microdescriptor when deciding whether to copy status information. (This function also is used to compare SHA1 digests of router descriptors, but don't worry: the descriptor_digest field either holds a SHA256 hash, or a SHA1 hash padded with 0 bytes.) --- changes/bug13399 | 5 +++++ src/or/networkstatus.c | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/changes/bug13399 b/changes/bug13399 index bbd0b2376b..fcaf58a53c 100644 --- a/changes/bug13399 +++ b/changes/bug13399 @@ -5,3 +5,8 @@ the same first 160 bits. Fixes part of bug 13399; bugfix on 0.2.3.1-alpha. + - Reset a router's status if its microdescriptor digest changes, + even if the first 160 bits remain the same. Fixes part of bug + 13399; bugfix on 0.2.3.1-alpha. + + diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 351b20c3af..21efdd129d 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -1123,7 +1123,7 @@ networkstatus_copy_old_consensus_info(networkstatus_t *new_c, rs_new->last_dir_503_at = rs_old->last_dir_503_at; if (tor_memeq(rs_old->descriptor_digest, rs_new->descriptor_digest, - DIGEST_LEN)) { /* XXXX Change this to digest256_len */ + DIGEST256_LEN)) { /* And the same descriptor too! */ memcpy(&rs_new->dl_status, &rs_old->dl_status,sizeof(download_status_t)); } From aff6fa0b59510471a87a8618ee22327acddf8f86 Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 12:04:26 -0400 Subject: [PATCH 099/184] Refactor the tor_calloc_ overflow check. --- src/common/util.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 2371ad3649..929eb5ffb2 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -195,16 +195,19 @@ tor_malloc_zero_(size_t size DMALLOC_PARAMS) return result; } +#define SQRT_SIZE_MAX (((size_t) SIZE_MAX) >> (sizeof(size_t) * 8 / 2)) + +static INLINE int +size_mul_check(const size_t x, const size_t y) +{ + return ((x <= SQRT_SIZE_MAX && y <= SQRT_SIZE_MAX) || + y == 0 || x <= SIZE_MAX / y); +} + /** Allocate a chunk of nmemb*size bytes of memory, fill * the memory with zero bytes, and return a pointer to the result. * Log and terminate the process on error. (Same as * calloc(nmemb,size), but never returns NULL.) - * - * XXXX This implementation probably asserts in cases where it could - * work, because it only tries dividing SIZE_MAX by size (according to - * the calloc(3) man page, the size of an element of the nmemb-element - * array to be allocated), not by nmemb (which could in theory be - * smaller than size). Don't do that then. */ void * tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) @@ -215,13 +218,8 @@ tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) * we're allocating something very big (it knows if it just got the memory * from the OS in a pre-zeroed state). We don't want to use tor_malloc_zero * for big stuff, so we don't bother with calloc. */ - void *result; - size_t max_nmemb = (size == 0) ? SIZE_MAX : SIZE_MAX/size; - - tor_assert(nmemb < max_nmemb); - - result = tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS); - return result; + tor_assert(size_mul_check(nmemb, size)); + return tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS); } /** Change the size of the memory block pointed to by ptr to size From 3206dbdce1d055e30d84f9f5dd433c733fee3d8a Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 12:11:53 -0400 Subject: [PATCH 100/184] Refactor the tor_reallocarray_ overflow check. --- src/common/util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/util.c b/src/common/util.c index 929eb5ffb2..6e30c47bf9 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -262,7 +262,7 @@ tor_reallocarray_(void *ptr, size_t sz1, size_t sz2 DMALLOC_PARAMS) { /* XXXX we can make this return 0, but we would need to check all the * reallocarray users. */ - tor_assert(sz2 == 0 || sz1 < SIZE_T_CEILING / sz2); + tor_assert(size_mul_check(sz1, sz2)); return tor_realloc(ptr, (sz1 * sz2) DMALLOC_FN_ARGS); } From a746081f385e20422a314f57ac21ad95b7fd0b09 Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 12:18:31 -0400 Subject: [PATCH 101/184] Refactor the calloc semantic patch. This does not change its effects. --- scripts/coccinelle/calloc.cocci | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/scripts/coccinelle/calloc.cocci b/scripts/coccinelle/calloc.cocci index 8a295eb4fd..f7d7ec0dc3 100644 --- a/scripts/coccinelle/calloc.cocci +++ b/scripts/coccinelle/calloc.cocci @@ -1,15 +1,10 @@ // Use calloc or realloc as appropriate instead of multiply-and-alloc @malloc_to_calloc@ -expression a,b; -@@ -- tor_malloc(a * b) -+ tor_calloc(a, b) - -@malloc_zero_to_calloc@ +identifier f =~ "(tor_malloc|tor_malloc_zero)"; expression a, b; @@ -- tor_malloc_zero(a * b) +- f(a * b) + tor_calloc(a, b) @realloc_to_reallocarray@ From 533790ca7727d6112ab6d6b80a284fcbe8709712 Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 12:20:36 -0400 Subject: [PATCH 102/184] The second argument to tor_calloc should be a constant. Just like the conventional calloc. --- scripts/coccinelle/calloc.cocci | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/coccinelle/calloc.cocci b/scripts/coccinelle/calloc.cocci index f7d7ec0dc3..df0b61de06 100644 --- a/scripts/coccinelle/calloc.cocci +++ b/scripts/coccinelle/calloc.cocci @@ -2,7 +2,8 @@ @malloc_to_calloc@ identifier f =~ "(tor_malloc|tor_malloc_zero)"; -expression a, b; +expression a; +constant b; @@ - f(a * b) + tor_calloc(a, b) From 3ab2c865bfb78e50f7c67c71144fbed37a7b4478 Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 12:36:46 -0400 Subject: [PATCH 103/184] Add a rule to the calloc semantic patch for argument ordering. --- scripts/coccinelle/calloc.cocci | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/coccinelle/calloc.cocci b/scripts/coccinelle/calloc.cocci index df0b61de06..fbda88e538 100644 --- a/scripts/coccinelle/calloc.cocci +++ b/scripts/coccinelle/calloc.cocci @@ -8,6 +8,13 @@ constant b; - f(a * b) + tor_calloc(a, b) +@calloc_arg_order@ +expression a; +type t; +@@ +- tor_calloc(sizeof(t), a) ++ tor_calloc(a, sizeof(t)) + @realloc_to_reallocarray@ expression a, b; expression p; From 06b1ef7b76feb93243affd0ac7b62b03caf9a27d Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 12:59:28 -0400 Subject: [PATCH 104/184] Remove a duplicate comment. --- src/common/util.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 6e30c47bf9..013a501dbc 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -212,12 +212,6 @@ size_mul_check(const size_t x, const size_t y) void * tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) { - /* You may ask yourself, "wouldn't it be smart to use calloc instead of - * malloc+memset? Perhaps libc's calloc knows some nifty optimization trick - * we don't!" Indeed it does, but its optimizations are only a big win when - * we're allocating something very big (it knows if it just got the memory - * from the OS in a pre-zeroed state). We don't want to use tor_malloc_zero - * for big stuff, so we don't bother with calloc. */ tor_assert(size_mul_check(nmemb, size)); return tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS); } From 81b452d245c19e9a16681567b9dbcf0f7a71ac78 Mon Sep 17 00:00:00 2001 From: Mansour Moufid Date: Sun, 19 Oct 2014 13:12:11 -0400 Subject: [PATCH 105/184] Document the calloc function overflow check. --- src/common/util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/util.c b/src/common/util.c index 013a501dbc..74a538ed2f 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -195,8 +195,10 @@ tor_malloc_zero_(size_t size DMALLOC_PARAMS) return result; } +/* Estimate the square root of SIZE_MAX. */ #define SQRT_SIZE_MAX (((size_t) SIZE_MAX) >> (sizeof(size_t) * 8 / 2)) +/** Return non-zero if and only if the product of the arguments is exact. */ static INLINE int size_mul_check(const size_t x, const size_t y) { @@ -208,6 +210,8 @@ size_mul_check(const size_t x, const size_t y) * the memory with zero bytes, and return a pointer to the result. * Log and terminate the process on error. (Same as * calloc(nmemb,size), but never returns NULL.) + * The second argument (size) should preferably be non-zero + * and a compile-time constant. */ void * tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) From 0d8abf5365cc39e7ea91bddfeb207e8d4d233544 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 2 Nov 2014 11:42:33 -0500 Subject: [PATCH 106/184] Switch to a < comparison for our calloc check; explain how it works --- src/common/util.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 74a538ed2f..006fd804b1 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -195,14 +195,18 @@ tor_malloc_zero_(size_t size DMALLOC_PARAMS) return result; } -/* Estimate the square root of SIZE_MAX. */ -#define SQRT_SIZE_MAX (((size_t) SIZE_MAX) >> (sizeof(size_t) * 8 / 2)) +/* The square root of SIZE_MAX + 1. If a is less than this, and b is less + * than this, then a*b is less than SIZE_MAX. (For example, if size_t is + * 32 bits, then SIZE_MAX is 0xffffffff and this value is 0x10000. If a and + * b are less than this, then their product is at most (65535*65535) == + * 0xfffe0001. */ +#define SQRT_SIZE_MAX_P1 (((size_t)1) << (sizeof(size_t)*4)) /** Return non-zero if and only if the product of the arguments is exact. */ static INLINE int size_mul_check(const size_t x, const size_t y) { - return ((x <= SQRT_SIZE_MAX && y <= SQRT_SIZE_MAX) || + return ((x < SQRT_SIZE_MAX_P1 && y < SQRT_SIZE_MAX_P1) || y == 0 || x <= SIZE_MAX / y); } From ded33cb2c73151e2f02a8a1d520b54e4f1c14072 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 2 Nov 2014 11:48:08 -0500 Subject: [PATCH 107/184] Use the | trick to save a comparison in our calloc check. --- src/common/util.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 006fd804b1..3d81f2b530 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -206,8 +206,15 @@ tor_malloc_zero_(size_t size DMALLOC_PARAMS) static INLINE int size_mul_check(const size_t x, const size_t y) { - return ((x < SQRT_SIZE_MAX_P1 && y < SQRT_SIZE_MAX_P1) || - y == 0 || x <= SIZE_MAX / y); + /* This first check is equivalent to + (x < SQRT_SIZE_MAX_P1 && y < SQRT_SIZE_MAX_P1) + + Rationale: if either one of x or y is >= SQRT_SIZE_MAX_P1, then it + will have some bit set in its most significant half. + */ + return ((x|y) < SQRT_SIZE_MAX_P1 || + y == 0 || + x <= SIZE_MAX / y); } /** Allocate a chunk of nmemb*size bytes of memory, fill From bbd8d071675c278571c804fd0a71b51e7dfa8d7e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 2 Nov 2014 11:56:02 -0500 Subject: [PATCH 108/184] Apply new calloc coccinelle patch --- src/common/compat.c | 2 +- src/common/util.c | 6 +++--- src/or/circuitbuild.c | 2 +- src/or/circuitstats.c | 6 +++--- src/or/config.c | 4 ++-- src/or/cpuworker.c | 2 +- src/or/dirserv.c | 12 ++++++------ src/or/dirvote.c | 30 +++++++++++++++--------------- src/or/geoip.c | 4 ++-- src/or/routerlist.c | 12 ++++++------ src/test/test_pt.c | 2 +- 11 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/common/compat.c b/src/common/compat.c index e4758aaf88..8574bd04c9 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -1697,7 +1697,7 @@ log_credential_status(void) /* log supplementary groups */ sup_gids_size = 64; - sup_gids = tor_calloc(sizeof(gid_t), 64); + sup_gids = tor_calloc(64, sizeof(gid_t)); while ((ngids = getgroups(sup_gids_size, sup_gids)) < 0 && errno == EINVAL && sup_gids_size < NGROUPS_MAX) { diff --git a/src/common/util.c b/src/common/util.c index 3d81f2b530..77102837db 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -3465,8 +3465,8 @@ format_win_cmdline_argument(const char *arg) smartlist_add(arg_chars, (void*)&backslash); /* Allocate space for argument, quotes (if needed), and terminator */ - formatted_arg = tor_calloc(sizeof(char), - (smartlist_len(arg_chars) + (need_quotes ? 2 : 0) + 1)); + formatted_arg = tor_calloc((smartlist_len(arg_chars) + (need_quotes ? 2 : 0) + 1), + sizeof(char)); /* Add leading quote */ i=0; @@ -5104,7 +5104,7 @@ tor_check_port_forwarding(const char *filename, for each smartlist element (one for "-p" and one for the ports), and one for the final NULL. */ args_n = 1 + 2*smartlist_len(ports_to_forward) + 1; - argv = tor_calloc(sizeof(char *), args_n); + argv = tor_calloc(args_n, sizeof(char *)); argv[argv_index++] = filename; SMARTLIST_FOREACH_BEGIN(ports_to_forward, const char *, port) { diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 44946d389c..42c4870e87 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1548,7 +1548,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity) * -1 means "Don't use this router at all." */ the_nodes = nodelist_get_list(); - n_supported = tor_calloc(sizeof(int), smartlist_len(the_nodes)); + n_supported = tor_calloc(smartlist_len(the_nodes), sizeof(int)); SMARTLIST_FOREACH_BEGIN(the_nodes, const node_t *, node) { const int i = node_sl_idx; if (router_digest_is_me(node->identity)) { diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c index 956c969db6..a136278e58 100644 --- a/src/or/circuitstats.c +++ b/src/or/circuitstats.c @@ -404,7 +404,7 @@ circuit_build_times_new_consensus_params(circuit_build_times_t *cbt, * distress anyway, so memory correctness here is paramount over * doing acrobatics to preserve the array. */ - recent_circs = tor_calloc(sizeof(int8_t), num); + recent_circs = tor_calloc(num, sizeof(int8_t)); if (cbt->liveness.timeouts_after_firsthop && cbt->liveness.num_recent_circs > 0) { memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop, @@ -508,7 +508,7 @@ circuit_build_times_init(circuit_build_times_t *cbt) cbt->liveness.num_recent_circs = circuit_build_times_recent_circuit_count(NULL); cbt->liveness.timeouts_after_firsthop = - tor_calloc(sizeof(int8_t), cbt->liveness.num_recent_circs); + tor_calloc(cbt->liveness.num_recent_circs, sizeof(int8_t)); } else { cbt->liveness.num_recent_circs = 0; cbt->liveness.timeouts_after_firsthop = NULL; @@ -873,7 +873,7 @@ circuit_build_times_parse_state(circuit_build_times_t *cbt, } /* build_time_t 0 means uninitialized */ - loaded_times = tor_calloc(sizeof(build_time_t), state->TotalBuildTimes); + loaded_times = tor_calloc(state->TotalBuildTimes, sizeof(build_time_t)); for (line = state->BuildtimeHistogram; line; line = line->next) { smartlist_t *args = smartlist_new(); diff --git a/src/or/config.c b/src/or/config.c index 3f31e876dd..681955e7eb 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -4856,7 +4856,7 @@ parse_client_transport_line(const or_options_t *options, if (!validate_only && !is_useless_proxy) { proxy_argc = line_length-2; tor_assert(proxy_argc > 0); - proxy_argv = tor_calloc(sizeof(char *), (proxy_argc + 1)); + proxy_argv = tor_calloc((proxy_argc + 1), sizeof(char *)); tmp = proxy_argv; for (i=0;i 0); - proxy_argv = tor_calloc(sizeof(char *), (proxy_argc + 1)); + proxy_argv = tor_calloc((proxy_argc + 1), sizeof(char *)); tmp = proxy_argv; for (i=0;irouters)); + uptimes = tor_calloc(smartlist_len(rl->routers), sizeof(uint32_t)); /* Bandwidth for every active router. */ - bandwidths_kb = tor_calloc(sizeof(uint32_t), smartlist_len(rl->routers)); + bandwidths_kb = tor_calloc(smartlist_len(rl->routers), sizeof(uint32_t)); /* Bandwidth for every active non-exit router. */ bandwidths_excluding_exits_kb = - tor_calloc(sizeof(uint32_t), smartlist_len(rl->routers)); + tor_calloc(smartlist_len(rl->routers), sizeof(uint32_t)); /* Weighted mean time between failure for each active router. */ - mtbfs = tor_calloc(sizeof(double), smartlist_len(rl->routers)); + mtbfs = tor_calloc(smartlist_len(rl->routers), sizeof(double)); /* Time-known for each active router. */ - tks = tor_calloc(sizeof(long), smartlist_len(rl->routers)); + tks = tor_calloc(smartlist_len(rl->routers), sizeof(long)); /* Weighted fractional uptime for each active router. */ - wfus = tor_calloc(sizeof(double), smartlist_len(rl->routers)); + wfus = tor_calloc(smartlist_len(rl->routers), sizeof(double)); nodelist_assert_ok(); diff --git a/src/or/dirvote.c b/src/or/dirvote.c index 76dce6c6be..39505a4f9e 100644 --- a/src/or/dirvote.c +++ b/src/or/dirvote.c @@ -611,7 +611,7 @@ dirvote_compute_params(smartlist_t *votes, int method, int total_authorities) between INT32_MIN and INT32_MAX inclusive. This should be guaranteed by the parsing code. */ - vals = tor_calloc(sizeof(int), n_votes); + vals = tor_calloc(n_votes, sizeof(int)); SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) { if (!v->net_params) @@ -1258,10 +1258,10 @@ networkstatus_compute_consensus(smartlist_t *votes, smartlist_t *chosen_flags = smartlist_new(); smartlist_t *versions = smartlist_new(); smartlist_t *exitsummaries = smartlist_new(); - uint32_t *bandwidths_kb = tor_calloc(sizeof(uint32_t), - smartlist_len(votes)); - uint32_t *measured_bws_kb = tor_calloc(sizeof(uint32_t), - smartlist_len(votes)); + uint32_t *bandwidths_kb = tor_calloc(smartlist_len(votes), + sizeof(uint32_t)); + uint32_t *measured_bws_kb = tor_calloc(smartlist_len(votes), + sizeof(uint32_t)); int num_bandwidths; int num_mbws; @@ -1281,13 +1281,13 @@ networkstatus_compute_consensus(smartlist_t *votes, memset(conflict, 0, sizeof(conflict)); memset(unknown, 0xff, sizeof(conflict)); - index = tor_calloc(sizeof(int), smartlist_len(votes)); - size = tor_calloc(sizeof(int), smartlist_len(votes)); - n_voter_flags = tor_calloc(sizeof(int), smartlist_len(votes)); - n_flag_voters = tor_calloc(sizeof(int), smartlist_len(flags)); - flag_map = tor_calloc(sizeof(int *), smartlist_len(votes)); - named_flag = tor_calloc(sizeof(int), smartlist_len(votes)); - unnamed_flag = tor_calloc(sizeof(int), smartlist_len(votes)); + index = tor_calloc(smartlist_len(votes), sizeof(int)); + size = tor_calloc(smartlist_len(votes), sizeof(int)); + n_voter_flags = tor_calloc(smartlist_len(votes), sizeof(int)); + n_flag_voters = tor_calloc(smartlist_len(flags), sizeof(int)); + flag_map = tor_calloc(smartlist_len(votes), sizeof(int *)); + named_flag = tor_calloc(smartlist_len(votes), sizeof(int)); + unnamed_flag = tor_calloc(smartlist_len(votes), sizeof(int)); for (i = 0; i < smartlist_len(votes); ++i) unnamed_flag[i] = named_flag[i] = -1; @@ -1298,8 +1298,8 @@ networkstatus_compute_consensus(smartlist_t *votes, * that they're actually set before doing U64_LITERAL(1) << index with * them.*/ SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) { - flag_map[v_sl_idx] = tor_calloc(sizeof(int), - smartlist_len(v->known_flags)); + flag_map[v_sl_idx] = tor_calloc(smartlist_len(v->known_flags), + sizeof(int)); if (smartlist_len(v->known_flags) > MAX_KNOWN_FLAGS_IN_VOTE) { log_warn(LD_BUG, "Somehow, a vote has %d entries in known_flags", smartlist_len(v->known_flags)); @@ -1379,7 +1379,7 @@ networkstatus_compute_consensus(smartlist_t *votes, ); /* Now go through all the votes */ - flag_counts = tor_calloc(sizeof(int), smartlist_len(flags)); + flag_counts = tor_calloc(smartlist_len(flags), sizeof(int)); while (1) { vote_routerstatus_t *rs; routerstatus_t rs_out; diff --git a/src/or/geoip.c b/src/or/geoip.c index 75b26212d0..c02343d489 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -963,7 +963,7 @@ geoip_get_dirreq_history(dirreq_type_t type) /* We may have rounded 'completed' up. Here we want to use the * real value. */ complete = smartlist_len(dirreq_completed); - dltimes = tor_calloc(sizeof(uint32_t), complete); + dltimes = tor_calloc(complete, sizeof(uint32_t)); SMARTLIST_FOREACH_BEGIN(dirreq_completed, dirreq_map_entry_t *, ent) { uint32_t bytes_per_second; uint32_t time_diff = (uint32_t) tv_mdiff(&ent->request_time, @@ -1033,7 +1033,7 @@ geoip_get_client_history(geoip_client_action_t action, if (!geoip_is_loaded(AF_INET) && !geoip_is_loaded(AF_INET6)) return -1; - counts = tor_calloc(sizeof(unsigned), n_countries); + counts = tor_calloc(n_countries, sizeof(unsigned)); HT_FOREACH(ent, clientmap, &client_history) { int country; if ((*ent)->action != (int)action) diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 214b7c483f..d81dae4676 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1536,7 +1536,7 @@ dirserver_choose_by_weight(const smartlist_t *servers, double authority_weight) u64_dbl_t *weights; const dir_server_t *ds; - weights = tor_calloc(sizeof(u64_dbl_t), n); + weights = tor_calloc(n, sizeof(u64_dbl_t)); for (i = 0; i < n; ++i) { ds = smartlist_get(servers, i); weights[i].dbl = ds->weight; @@ -2045,7 +2045,7 @@ compute_weighted_bandwidths(const smartlist_t *sl, Web /= weight_scale; Wdb /= weight_scale; - bandwidths = tor_calloc(sizeof(u64_dbl_t), smartlist_len(sl)); + bandwidths = tor_calloc(smartlist_len(sl), sizeof(u64_dbl_t)); // Cycle through smartlist and total the bandwidth. SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) { @@ -2192,7 +2192,7 @@ smartlist_choose_node_by_bandwidth(const smartlist_t *sl, /* First count the total bandwidth weight, and make a list * of each value. We use UINT64_MAX to indicate "unknown". */ - bandwidths = tor_calloc(sizeof(u64_dbl_t), smartlist_len(sl)); + bandwidths = tor_calloc(smartlist_len(sl), sizeof(u64_dbl_t)); fast_bits = bitarray_init_zero(smartlist_len(sl)); exit_bits = bitarray_init_zero(smartlist_len(sl)); guard_bits = bitarray_init_zero(smartlist_len(sl)); @@ -3584,9 +3584,9 @@ routerlist_remove_old_cached_routers_with_id(time_t now, n_extra = n - mdpr; } - lifespans = tor_calloc(sizeof(struct duration_idx_t), n); - rmv = tor_calloc(sizeof(uint8_t), n); - must_keep = tor_calloc(sizeof(uint8_t), n); + lifespans = tor_calloc(n, sizeof(struct duration_idx_t)); + rmv = tor_calloc(n, sizeof(uint8_t)); + must_keep = tor_calloc(n, sizeof(uint8_t)); /* Set lifespans to contain the lifespan and index of each server. */ /* Set rmv[i-lo]=1 if we're going to remove a server for being too old. */ for (i = lo; i <= hi; ++i) { diff --git a/src/test/test_pt.c b/src/test/test_pt.c index 4ca2e32b7b..1be52ee5bd 100644 --- a/src/test/test_pt.c +++ b/src/test/test_pt.c @@ -196,7 +196,7 @@ test_pt_protocol(void *arg) (void)arg; mp->conf_state = PT_PROTO_LAUNCHED; mp->transports = smartlist_new(); - mp->argv = tor_calloc(sizeof(char *), 2); + mp->argv = tor_calloc(2, sizeof(char *)); mp->argv[0] = tor_strdup(""); /* various wrong protocol runs: */ From a142fc29aff4b47640a1a4f59032e25b7360e847 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Sun, 2 Nov 2014 12:08:51 -0500 Subject: [PATCH 109/184] Use tor_malloc_zero(x), not tor_calloc(x,sizeof(char)) (Also, fixes a wide line.) --- src/common/util.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 77102837db..27cc9df878 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -3465,8 +3465,9 @@ format_win_cmdline_argument(const char *arg) smartlist_add(arg_chars, (void*)&backslash); /* Allocate space for argument, quotes (if needed), and terminator */ - formatted_arg = tor_calloc((smartlist_len(arg_chars) + (need_quotes ? 2 : 0) + 1), - sizeof(char)); + const size_t formatted_arg_len = smartlist_len(arg_chars) + + (need_quotes ? 2 : 0) + 1; + formatted_arg = tor_malloc_zero(formatted_arg_len); /* Add leading quote */ i=0; From 415a841378db2489c525ea0c55b169bd2894e992 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 3 Nov 2014 13:30:19 -0500 Subject: [PATCH 110/184] Remove smartlist_choose_node_by_bandwidth() We were only using it when smartlist_choose_node_by_bandwidth_weights failed. But that function could only fail in the presence of buggy/ancient authorities or in the absence of a consensus. Either way, it's better to use sensible defaults and a nicer algorithm. --- changes/bug13126 | 10 ++ src/or/or.h | 2 +- src/or/routerlist.c | 236 +++----------------------------------------- 3 files changed, 25 insertions(+), 223 deletions(-) create mode 100644 changes/bug13126 diff --git a/changes/bug13126 b/changes/bug13126 new file mode 100644 index 0000000000..45d22ee3f3 --- /dev/null +++ b/changes/bug13126 @@ -0,0 +1,10 @@ + o Code simplification and refactoring: + + - Remove our old, non-weighted bandwidth-based node selection code. + Previously, we used it as a fallback when we couldn't perform + weighted bandwidth-based node selection. But that would only + happen in the cases where we had no consensus, or when we had a + consensus generated by buggy or ancient directory authorities. In + either case, it's better to use the more modern, better maintained + algorithm, with reasonable defaults for the weights. Closes + ticket 13126. \ No newline at end of file diff --git a/src/or/or.h b/src/or/or.h index 6170c2119c..a681def37c 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -5006,7 +5006,7 @@ typedef enum was_router_added_t { ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS = -4, ROUTER_AUTHDIR_REJECTS = -5, ROUTER_WAS_NOT_WANTED = -6, - ROUTER_WAS_TOO_OLD = -7, + ROUTER_WAS_TOO_OLD = -7, /* note contrast with 'NOT_NEW' */ } was_router_added_t; /********************************* routerparse.c ************************/ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index d81dae4676..46010eaba4 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -2030,9 +2030,10 @@ compute_weighted_bandwidths(const smartlist_t *sl, if (Wg < 0 || Wm < 0 || We < 0 || Wd < 0 || Wgb < 0 || Wmb < 0 || Wdb < 0 || Web < 0) { log_debug(LD_CIRC, - "Got negative bandwidth weights. Defaulting to old selection" + "Got negative bandwidth weights. Defaulting to naive selection" " algorithm."); - return -1; // Use old algorithm. + Wg = Wm = We = Wd = weight_scale; + Wgb = Wmb = Web = Wdb = weight_scale; } Wg /= weight_scale; @@ -2048,6 +2049,7 @@ compute_weighted_bandwidths(const smartlist_t *sl, bandwidths = tor_calloc(smartlist_len(sl), sizeof(u64_dbl_t)); // Cycle through smartlist and total the bandwidth. + static int warned_missing_bw = 0; SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) { int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0; double weight = 1; @@ -2056,15 +2058,18 @@ compute_weighted_bandwidths(const smartlist_t *sl, is_dir = node_is_dir(node); if (node->rs) { if (!node->rs->has_bandwidth) { - tor_free(bandwidths); /* This should never happen, unless all the authorites downgrade * to 0.2.0 or rogue routerstatuses get inserted into our consensus. */ - log_warn(LD_BUG, - "Consensus is not listing bandwidths. Defaulting back to " - "old router selection algorithm."); - return -1; + if (! warned_missing_bw) { + log_warn(LD_BUG, + "Consensus is missing some bandwidths. Using a naive " + "router selection algorithm"); + warned_missing_bw = 1; + } + this_bw = 30000; /* Chosen arbitrarily */ + } else { + this_bw = kb_to_bytes(node->rs->bandwidth_kb); } - this_bw = kb_to_bytes(node->rs->bandwidth_kb); } else if (node->ri) { /* bridge or other descriptor not in our consensus */ this_bw = bridge_get_advertised_bandwidth_bounded(node->ri); @@ -2141,226 +2146,13 @@ frac_nodes_with_descriptors(const smartlist_t *sl, return present / total; } -/** Helper function: - * choose a random node_t element of smartlist sl, weighted by - * the advertised bandwidth of each element. - * - * If rule==WEIGHT_FOR_EXIT. we're picking an exit node: consider all - * nodes' bandwidth equally regardless of their Exit status, since there may - * be some in the list because they exit to obscure ports. If - * rule==NO_WEIGHTING, we're picking a non-exit node: weight - * exit-node's bandwidth less depending on the smallness of the fraction of - * Exit-to-total bandwidth. If rule==WEIGHT_FOR_GUARD, we're picking a - * guard node: consider all guard's bandwidth equally. Otherwise, weight - * guards proportionally less. - */ -static const node_t * -smartlist_choose_node_by_bandwidth(const smartlist_t *sl, - bandwidth_weight_rule_t rule) -{ - unsigned int i; - u64_dbl_t *bandwidths; - int is_exit; - int is_guard; - int is_fast; - double total_nonexit_bw = 0, total_exit_bw = 0; - double total_nonguard_bw = 0, total_guard_bw = 0; - double exit_weight; - double guard_weight; - int n_unknown = 0; - bitarray_t *fast_bits; - bitarray_t *exit_bits; - bitarray_t *guard_bits; - - // This function does not support WEIGHT_FOR_DIR - // or WEIGHT_FOR_MID - if (rule == WEIGHT_FOR_DIR || rule == WEIGHT_FOR_MID) { - rule = NO_WEIGHTING; - } - - /* Can't choose exit and guard at same time */ - tor_assert(rule == NO_WEIGHTING || - rule == WEIGHT_FOR_EXIT || - rule == WEIGHT_FOR_GUARD); - - if (smartlist_len(sl) == 0) { - log_info(LD_CIRC, - "Empty routerlist passed in to old node selection for rule %s", - bandwidth_weight_rule_to_string(rule)); - return NULL; - } - - /* First count the total bandwidth weight, and make a list - * of each value. We use UINT64_MAX to indicate "unknown". */ - bandwidths = tor_calloc(smartlist_len(sl), sizeof(u64_dbl_t)); - fast_bits = bitarray_init_zero(smartlist_len(sl)); - exit_bits = bitarray_init_zero(smartlist_len(sl)); - guard_bits = bitarray_init_zero(smartlist_len(sl)); - - /* Iterate over all the routerinfo_t or routerstatus_t, and */ - SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) { - /* first, learn what bandwidth we think i has */ - int is_known = 1; - uint32_t this_bw = 0; - i = node_sl_idx; - - is_exit = node_is_good_exit(node); - is_guard = node->is_possible_guard; - if (node->rs) { - if (node->rs->has_bandwidth) { - this_bw = kb_to_bytes(node->rs->bandwidth_kb); - } else { /* guess */ - is_known = 0; - } - } else if (node->ri) { - /* Must be a bridge if we're willing to use it */ - this_bw = bridge_get_advertised_bandwidth_bounded(node->ri); - } - - if (is_exit) - bitarray_set(exit_bits, i); - if (is_guard) - bitarray_set(guard_bits, i); - if (node->is_fast) - bitarray_set(fast_bits, i); - - if (is_known) { - bandwidths[i].dbl = this_bw; - if (is_guard) - total_guard_bw += this_bw; - else - total_nonguard_bw += this_bw; - if (is_exit) - total_exit_bw += this_bw; - else - total_nonexit_bw += this_bw; - } else { - ++n_unknown; - bandwidths[i].dbl = -1.0; - } - } SMARTLIST_FOREACH_END(node); - -#define EPSILON .1 - - /* Now, fill in the unknown values. */ - if (n_unknown) { - int32_t avg_fast, avg_slow; - if (total_exit_bw+total_nonexit_bw < EPSILON) { - /* if there's some bandwidth, there's at least one known router, - * so no worries about div by 0 here */ - int n_known = smartlist_len(sl)-n_unknown; - avg_fast = avg_slow = (int32_t) - ((total_exit_bw+total_nonexit_bw)/((uint64_t) n_known)); - } else { - avg_fast = 40000; - avg_slow = 20000; - } - for (i=0; i<(unsigned)smartlist_len(sl); ++i) { - if (bandwidths[i].dbl >= 0.0) - continue; - is_fast = bitarray_is_set(fast_bits, i); - is_exit = bitarray_is_set(exit_bits, i); - is_guard = bitarray_is_set(guard_bits, i); - bandwidths[i].dbl = is_fast ? avg_fast : avg_slow; - if (is_exit) - total_exit_bw += bandwidths[i].dbl; - else - total_nonexit_bw += bandwidths[i].dbl; - if (is_guard) - total_guard_bw += bandwidths[i].dbl; - else - total_nonguard_bw += bandwidths[i].dbl; - } - } - - /* If there's no bandwidth at all, pick at random. */ - if (total_exit_bw+total_nonexit_bw < EPSILON) { - tor_free(bandwidths); - tor_free(fast_bits); - tor_free(exit_bits); - tor_free(guard_bits); - return smartlist_choose(sl); - } - - /* Figure out how to weight exits and guards */ - { - double all_bw = U64_TO_DBL(total_exit_bw+total_nonexit_bw); - double exit_bw = U64_TO_DBL(total_exit_bw); - double guard_bw = U64_TO_DBL(total_guard_bw); - /* - * For detailed derivation of this formula, see - * http://archives.seul.org/or/dev/Jul-2007/msg00056.html - */ - if (rule == WEIGHT_FOR_EXIT || total_exit_bw= 0.0); - - is_exit = bitarray_is_set(exit_bits, i); - is_guard = bitarray_is_set(guard_bits, i); - if (is_exit && is_guard) - bandwidths[i].dbl *= exit_weight * guard_weight; - else if (is_guard) - bandwidths[i].dbl *= guard_weight; - else if (is_exit) - bandwidths[i].dbl *= exit_weight; - } - } - -#if 0 - log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT - ", exit bw = "U64_FORMAT - ", nonexit bw = "U64_FORMAT", exit weight = %f " - "(for exit == %d)" - ", guard bw = "U64_FORMAT - ", nonguard bw = "U64_FORMAT", guard weight = %f " - "(for guard == %d)", - U64_PRINTF_ARG(total_bw), - U64_PRINTF_ARG(total_exit_bw), U64_PRINTF_ARG(total_nonexit_bw), - exit_weight, (int)(rule == WEIGHT_FOR_EXIT), - U64_PRINTF_ARG(total_guard_bw), U64_PRINTF_ARG(total_nonguard_bw), - guard_weight, (int)(rule == WEIGHT_FOR_GUARD)); -#endif - - scale_array_elements_to_u64(bandwidths, smartlist_len(sl), NULL); - - { - int idx = choose_array_element_by_weight(bandwidths, - smartlist_len(sl)); - tor_free(bandwidths); - tor_free(fast_bits); - tor_free(exit_bits); - tor_free(guard_bits); - return idx < 0 ? NULL : smartlist_get(sl, idx); - } -} - /** Choose a random element of status list sl, weighted by * the advertised bandwidth of each node */ const node_t * node_sl_choose_by_bandwidth(const smartlist_t *sl, bandwidth_weight_rule_t rule) { /*XXXX MOVE */ - const node_t *ret; - if ((ret = smartlist_choose_node_by_bandwidth_weights(sl, rule))) { - return ret; - } else { - return smartlist_choose_node_by_bandwidth(sl, rule); - } + return smartlist_choose_node_by_bandwidth_weights(sl, rule); } /** Return a random running node from the nodelist. Never From 71355e1db937b0b940bb9510c927e3e500cabc22 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Tue, 4 Nov 2014 00:19:31 -0500 Subject: [PATCH 111/184] Add comments and rename intro_nodes list in rend_services_introduce() (No changes file needed: this patch just adds comments and renames variables. This is ticket 13646. message taken from the ticket. -Nick) --- src/or/rendservice.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 392f393317..c586132995 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3028,15 +3028,16 @@ rend_services_introduce(void) int intro_point_set_changed, prev_intro_nodes; unsigned int n_intro_points_unexpired; unsigned int n_intro_points_to_open; - smartlist_t *intro_nodes; time_t now; const or_options_t *options = get_options(); + /* List of nodes we need to _exclude_ when choosing a new node to establish + * an intro point to. */ + smartlist_t *exclude_nodes = smartlist_new(); - intro_nodes = smartlist_new(); now = time(NULL); for (i=0; i < smartlist_len(rend_service_list); ++i) { - smartlist_clear(intro_nodes); + smartlist_clear(exclude_nodes); service = smartlist_get(rend_service_list, i); tor_assert(service); @@ -3135,8 +3136,10 @@ rend_services_introduce(void) if (intro != NULL && intro->time_expiring == -1) ++n_intro_points_unexpired; + /* Add the valid node to the exclusion list so we don't try to establish + * an introduction point to it again. */ if (node) - smartlist_add(intro_nodes, (void*)node); + smartlist_add(exclude_nodes, (void*)node); } SMARTLIST_FOREACH_END(intro); if (!intro_point_set_changed && @@ -3172,7 +3175,7 @@ rend_services_introduce(void) router_crn_flags_t flags = CRN_NEED_UPTIME|CRN_NEED_DESC; if (get_options()->AllowInvalid_ & ALLOW_INVALID_INTRODUCTION) flags |= CRN_ALLOW_INVALID; - node = router_choose_random_node(intro_nodes, + node = router_choose_random_node(exclude_nodes, options->ExcludeNodes, flags); if (!node) { log_warn(LD_REND, @@ -3183,7 +3186,9 @@ rend_services_introduce(void) break; } intro_point_set_changed = 1; - smartlist_add(intro_nodes, (void*)node); + /* Add the choosen node to the exclusion list in order to avoid to pick + * it again in the next iteration. */ + smartlist_add(exclude_nodes, (void*)node); intro = tor_malloc_zero(sizeof(rend_intro_point_t)); intro->extend_info = extend_info_from_node(node, 0); intro->intro_key = crypto_pk_new(); @@ -3212,7 +3217,7 @@ rend_services_introduce(void) } } } - smartlist_free(intro_nodes); + smartlist_free(exclude_nodes); } /** Regenerate and upload rendezvous service descriptors for all From b10e5ac7b86c459a62cfc316c8be87143d2a87e4 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 3 Nov 2014 14:02:47 -0500 Subject: [PATCH 112/184] Check descriptor ID in addition to HS ID when saving a v2 hs descriptor Fixes bug 13214; reported by 'special'. --- changes/bug13214 | 7 +++++++ src/or/directory.c | 3 ++- src/or/rendcommon.c | 19 +++++++++++++++++++ src/or/rendcommon.h | 1 + 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 changes/bug13214 diff --git a/changes/bug13214 b/changes/bug13214 new file mode 100644 index 0000000000..5b9758b388 --- /dev/null +++ b/changes/bug13214 @@ -0,0 +1,7 @@ + o Minor bugfixes (hidden services): + - When fetching hidden service descriptors, check not only for + whether we got the hidden service we had in mind, but also + whether we got the particular descriptors we wanted. This + prevents a class of inefficient but annoying DoS attacks by + hidden service directories. Fixes bug 13214; bugfix on + 0.2.1.6-alpha. Reported by "special". diff --git a/src/or/directory.c b/src/or/directory.c index 298271f366..d429b7bc28 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2082,7 +2082,8 @@ connection_dir_client_reached_eof(dir_connection_t *conn) (int)body_len, status_code, escaped(reason)); switch (status_code) { case 200: - switch (rend_cache_store_v2_desc_as_client(body, conn->rend_data)) { + switch (rend_cache_store_v2_desc_as_client(body, + conn->requested_resource, conn->rend_data)) { case RCS_BADDESC: case RCS_NOTDIR: /* Impossible */ log_warn(LD_REND,"Fetching v2 rendezvous descriptor failed. " diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index a664b5d501..e95cf48522 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -1034,10 +1034,14 @@ rend_cache_store_v2_desc_as_dir(const char *desc) * If the descriptor's service ID does not match * rend_query-\>onion_address, reject it. * + * If the descriptor's descriptor ID doesn't match desc_id_base32, + * reject it. + * * Return an appropriate rend_cache_store_status_t. */ rend_cache_store_status_t rend_cache_store_v2_desc_as_client(const char *desc, + const char *desc_id_base32, const rend_data_t *rend_query) { /*XXXX this seems to have a bit of duplicate code with @@ -1064,10 +1068,19 @@ rend_cache_store_v2_desc_as_client(const char *desc, time_t now = time(NULL); char key[REND_SERVICE_ID_LEN_BASE32+2]; char service_id[REND_SERVICE_ID_LEN_BASE32+1]; + char want_desc_id[DIGEST_LEN]; rend_cache_entry_t *e; rend_cache_store_status_t retval = RCS_BADDESC; tor_assert(rend_cache); tor_assert(desc); + tor_assert(desc_id_base32); + memset(want_desc_id, 0, sizeof(want_desc_id)); + if (base32_decode(want_desc_id, sizeof(want_desc_id), + desc_id_base32, strlen(desc_id_base32)) != 0) { + log_warn(LD_BUG, "Couldn't decode base32 %s for descriptor id.", + escaped_safe_str_client(desc_id_base32)); + goto err; + } /* Parse the descriptor. */ if (rend_parse_v2_service_descriptor(&parsed, desc_id, &intro_content, &intro_size, &encoded_size, @@ -1086,6 +1099,12 @@ rend_cache_store_v2_desc_as_client(const char *desc, service_id, safe_str(rend_query->onion_address)); goto err; } + if (tor_memneq(desc_id, want_desc_id, DIGEST_LEN)) { + log_warn(LD_REND, "Received service descriptor for %s with incorrect " + "descriptor ID.", service_id); + goto err; + } + /* Decode/decrypt introduction points. */ if (intro_content) { int n_intro_points; diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h index 07a47accfe..42a089a2fb 100644 --- a/src/or/rendcommon.h +++ b/src/or/rendcommon.h @@ -49,6 +49,7 @@ typedef enum { rend_cache_store_status_t rend_cache_store_v2_desc_as_dir(const char *desc); rend_cache_store_status_t rend_cache_store_v2_desc_as_client(const char *desc, + const char *desc_id_base32, const rend_data_t *rend_query); int rend_encode_v2_descriptors(smartlist_t *descs_out, From 1ea9a6fd72b66ec634446cbd2119641a5ed1e703 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 12 Oct 2014 19:33:08 +0300 Subject: [PATCH 113/184] Introducing helper function to validate DNS name strings. --- src/common/util.c | 36 ++++++++++++++++++++++++++++++++++++ src/common/util.h | 1 + src/test/test_util.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/src/common/util.c b/src/common/util.c index f4d293c838..606b9e1ea0 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -957,6 +957,42 @@ string_is_key_value(int severity, const char *string) return 1; } +/** Return true iff string is valid DNS name, as defined in + * RFC 1035 Section 2.3.1. + */ +int +string_is_valid_hostname(const char *string) +{ + int result = 1; + smartlist_t *components; + + components = smartlist_new(); + + smartlist_split_string(components,string,".",0,0); + + SMARTLIST_FOREACH_BEGIN(components, char *, c) { + if (c[0] == '-') { + result = 0; + break; + } + + do { + if ((*c >= 'a' && *c <= 'z') || + (*c >= 'A' && *c <= 'Z') || + (*c >= '0' && *c <= '9') || + (*c == '-')) + c++; + else + result = 0; + } while (result && *c); + + } SMARTLIST_FOREACH_END(c); + + smartlist_free(components); + + return result; +} + /** Return true iff the DIGEST256_LEN bytes in digest are all zero. */ int tor_digest256_is_zero(const char *digest) diff --git a/src/common/util.h b/src/common/util.h index 61bb05f016..2634adc62b 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -227,6 +227,7 @@ const char *find_str_at_start_of_line(const char *haystack, const char *needle); int string_is_C_identifier(const char *string); int string_is_key_value(int severity, const char *string); +int string_is_valid_hostname(const char *string); int tor_mem_is_zero(const char *mem, size_t len); int tor_digest_is_zero(const char *digest); diff --git a/src/test/test_util.c b/src/test/test_util.c index c67aa71b02..fb3ce7d941 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -4122,6 +4122,36 @@ test_util_max_mem(void *arg) ; } +static void +test_util_hostname_validation(void *arg) +{ + (void)arg; + + // Lets try valid hostnames first. + tt_assert(string_is_valid_hostname("torproject.org")); + tt_assert(string_is_valid_hostname("ocw.mit.edu")); + tt_assert(string_is_valid_hostname("i.4cdn.org")); + tt_assert(string_is_valid_hostname("stanford.edu")); + tt_assert(string_is_valid_hostname("multiple-words-with-hypens.jp")); + + // Subdomain name cannot start with '-'. + tt_assert(!string_is_valid_hostname("-torproject.org")); + tt_assert(!string_is_valid_hostname("subdomain.-domain.org")); + tt_assert(!string_is_valid_hostname("-subdomain.domain.org")); + + // Hostnames cannot contain non-alphanumeric characters. + tt_assert(!string_is_valid_hostname("%%domain.\\org.")); + tt_assert(!string_is_valid_hostname("***x.net")); + tt_assert(!string_is_valid_hostname("___abc.org")); + tt_assert(!string_is_valid_hostname("\xff\xffxyz.org")); + tt_assert(!string_is_valid_hostname("word1 word2.net")); + + // XXX: do we allow single-label DNS names? + + done: + return; +} + struct testcase_t util_tests[] = { UTIL_LEGACY(time), UTIL_TEST(parse_http_time, 0), @@ -4194,6 +4224,7 @@ struct testcase_t util_tests[] = { { "socketpair_ersatz", test_util_socketpair, TT_FORK, &socketpair_setup, (void*)"1" }, UTIL_TEST(max_mem, 0), + UTIL_TEST(hostname_validation, 0), END_OF_TESTCASES }; From e8e45ff13ed86d8851bab77d65d899d0ca6e3b89 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 12 Oct 2014 20:39:00 +0300 Subject: [PATCH 114/184] Introducing helper function to validate IPv4 address strings. --- src/common/util.c | 19 +++++++++++++++++-- src/common/util.h | 1 + src/test/test_util.c | 21 +++++++++++++++++++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 606b9e1ea0..ba9d78afac 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -957,8 +957,19 @@ string_is_key_value(int severity, const char *string) return 1; } -/** Return true iff string is valid DNS name, as defined in - * RFC 1035 Section 2.3.1. +/** Return true if string represents a valid IPv4 adddress in + * 'a.b.c.d' form. + */ +int +string_is_valid_ipv4_address(const char *string) +{ + struct sockaddr_in sockaddr; + + return (tor_inet_pton(AF_INET,string,&sockaddr) == 1); +} + +/** Return true iff string matches a pattern of DNS names + * that we allow Tor clients to connect to. */ int string_is_valid_hostname(const char *string) @@ -988,6 +999,10 @@ string_is_valid_hostname(const char *string) } SMARTLIST_FOREACH_END(c); + SMARTLIST_FOREACH_BEGIN(components, char *, c) { + tor_free(c); + } SMARTLIST_FOREACH_END(c); + smartlist_free(components); return result; diff --git a/src/common/util.h b/src/common/util.h index 2634adc62b..dcb54f0aea 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -228,6 +228,7 @@ const char *find_str_at_start_of_line(const char *haystack, int string_is_C_identifier(const char *string); int string_is_key_value(int severity, const char *string); int string_is_valid_hostname(const char *string); +int string_is_valid_ipv4_address(const char *string); int tor_mem_is_zero(const char *mem, size_t len); int tor_digest_is_zero(const char *digest); diff --git a/src/test/test_util.c b/src/test/test_util.c index fb3ce7d941..fba90da492 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -4138,9 +4138,9 @@ test_util_hostname_validation(void *arg) tt_assert(!string_is_valid_hostname("-torproject.org")); tt_assert(!string_is_valid_hostname("subdomain.-domain.org")); tt_assert(!string_is_valid_hostname("-subdomain.domain.org")); - + // Hostnames cannot contain non-alphanumeric characters. - tt_assert(!string_is_valid_hostname("%%domain.\\org.")); + tt_assert(!string_is_valid_hostname("%%domain.\\org.")); tt_assert(!string_is_valid_hostname("***x.net")); tt_assert(!string_is_valid_hostname("___abc.org")); tt_assert(!string_is_valid_hostname("\xff\xffxyz.org")); @@ -4152,6 +4152,22 @@ test_util_hostname_validation(void *arg) return; } +static void +test_util_ipv4_validation(void *arg) +{ + (void)arg; + + tt_assert(string_is_valid_ipv4_address("192.168.0.1")); + tt_assert(string_is_valid_ipv4_address("8.8.8.8")); + + tt_assert(!string_is_valid_ipv4_address("abcd")); + tt_assert(!string_is_valid_ipv4_address("300.300.300.300")); + tt_assert(!string_is_valid_ipv4_address("8.8.")); + + done: + return; +} + struct testcase_t util_tests[] = { UTIL_LEGACY(time), UTIL_TEST(parse_http_time, 0), @@ -4225,6 +4241,7 @@ struct testcase_t util_tests[] = { &socketpair_setup, (void*)"1" }, UTIL_TEST(max_mem, 0), UTIL_TEST(hostname_validation, 0), + UTIL_TEST(ipv4_validation, 0), END_OF_TESTCASES }; From 2862b769deaaaa40347ffe808349c4e139e7eb45 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 12 Oct 2014 21:04:15 +0300 Subject: [PATCH 115/184] Validating SOCKS5 hostname more correctly. --- src/or/buffers.c | 10 +++++++++- src/test/test_socks.c | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/or/buffers.c b/src/or/buffers.c index d174f8147a..e98f56932d 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -2048,7 +2048,15 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, req->address[len] = 0; req->port = ntohs(get_uint16(data+5+len)); *drain_out = 5+len+2; - if (!tor_strisprint(req->address) || strchr(req->address,'\"')) { + + if (string_is_valid_ipv4_address(req->address)) { + log_unsafe_socks_warning(5,req->address,req->port,safe_socks); + + if (safe_socks) + return -1; + } + + if (!string_is_valid_hostname(req->address)) { log_warn(LD_PROTOCOL, "Your application (using socks5 to port %d) gave Tor " "a malformed hostname: %s. Rejecting the connection.", diff --git a/src/test/test_socks.c b/src/test/test_socks.c index 2b8f824b50..b9520b5c5c 100644 --- a/src/test/test_socks.c +++ b/src/test/test_socks.c @@ -229,6 +229,17 @@ test_socks_5_supported_commands(void *ptr) tt_int_op(0,==, buf_datalen(buf)); socks_request_clear(socks); + /* SOCKS 5 Should reject RESOLVE [F0] request for IPv4 address + * string if SafeSocks is enabled. */ + + ADD_DATA(buf, "\x05\x01\x00"); + ADD_DATA(buf, "\x05\xF0\x00\x03\x07"); + ADD_DATA(buf, "8.8.8.8"); + ADD_DATA(buf, "\x01\x02"); + tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1) + == -1); + socks_request_clear(socks); + /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */ ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03"); From 2f1068e68a95a2ad9ba058297b54622323b216c6 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 14 Oct 2014 21:53:48 +0300 Subject: [PATCH 116/184] Adding helper function that checks if string is a valid IPv6 address. --- src/common/util.c | 11 +++++++++++ src/common/util.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/common/util.c b/src/common/util.c index ba9d78afac..e9ee437190 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -968,6 +968,17 @@ string_is_valid_ipv4_address(const char *string) return (tor_inet_pton(AF_INET,string,&sockaddr) == 1); } +/** Return true if string represents a valid IPv6 address in + * a form that inet_pton() can parse. + */ +int +string_is_valid_ipv6_address(const char *string) +{ + struct sockaddr_in sockaddr_dummy; + + return (inet_pton(AF_INET6,string,&sockaddr_dummy) == 1); +} + /** Return true iff string matches a pattern of DNS names * that we allow Tor clients to connect to. */ diff --git a/src/common/util.h b/src/common/util.h index dcb54f0aea..5eecfada28 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -229,6 +229,7 @@ int string_is_C_identifier(const char *string); int string_is_key_value(int severity, const char *string); int string_is_valid_hostname(const char *string); int string_is_valid_ipv4_address(const char *string); +int string_is_valid_ipv6_address(const char *string); int tor_mem_is_zero(const char *mem, size_t len); int tor_digest_is_zero(const char *digest); From 0da4ddda4f8f1c3c931349e45acbdcae2b7cc750 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 14 Oct 2014 21:56:04 +0300 Subject: [PATCH 117/184] Checking if FQDN is actually IPv6 address string and handling that case. --- src/common/util.c | 2 +- src/or/buffers.c | 3 ++- src/test/test_socks.c | 11 +++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index e9ee437190..c292c798cc 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -976,7 +976,7 @@ string_is_valid_ipv6_address(const char *string) { struct sockaddr_in sockaddr_dummy; - return (inet_pton(AF_INET6,string,&sockaddr_dummy) == 1); + return (tor_inet_pton(AF_INET6,string,&sockaddr_dummy) == 1); } /** Return true iff string matches a pattern of DNS names diff --git a/src/or/buffers.c b/src/or/buffers.c index e98f56932d..354bec64bc 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -2049,7 +2049,8 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, req->port = ntohs(get_uint16(data+5+len)); *drain_out = 5+len+2; - if (string_is_valid_ipv4_address(req->address)) { + if (string_is_valid_ipv4_address(req->address) || + string_is_valid_ipv6_address(req->address)) { log_unsafe_socks_warning(5,req->address,req->port,safe_socks); if (safe_socks) diff --git a/src/test/test_socks.c b/src/test/test_socks.c index b9520b5c5c..ba6b9a9771 100644 --- a/src/test/test_socks.c +++ b/src/test/test_socks.c @@ -240,6 +240,17 @@ test_socks_5_supported_commands(void *ptr) == -1); socks_request_clear(socks); + /* SOCKS 5 should reject RESOLVE [F0] reject for IPv6 address + * string if SafeSocks is enabled. */ + + ADD_DATA(buf, "\x05\x01\x00"); + ADD_DATA(buf, "\x05\xF0\x00\x03\x27"); + ADD_DATA(buf, "2001:0db8:85a3:0000:0000:8a2e:0370:7334"); + ADD_DATA(buf, "\x01\x02"); + tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1) + == -1); + socks_request_clear(socks); + /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */ ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03"); From fc9591da727817923e1084d1a73d5dd8a52e6948 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 14 Oct 2014 22:09:44 +0300 Subject: [PATCH 118/184] Adding changes file for 13315. --- changes/bug13315 | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changes/bug13315 diff --git a/changes/bug13315 b/changes/bug13315 new file mode 100644 index 0000000000..c2ae5ff1f8 --- /dev/null +++ b/changes/bug13315 @@ -0,0 +1,5 @@ + o Minor features: + - Validate hostnames in SOCKS5 requests more strictly. If SafeSocks + is enabled, reject requests with IP addresses as hostnames. Resolves + ticket 13315. + From 51e247361824fa64f4322fb59e9d2cffd9d72cba Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 21 Oct 2014 20:50:32 +0300 Subject: [PATCH 119/184] Sending 'Not allowed' error message before closing the connection. --- src/or/buffers.c | 4 +++- src/test/test_socks.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/or/buffers.c b/src/or/buffers.c index 354bec64bc..691845ec10 100644 --- a/src/or/buffers.c +++ b/src/or/buffers.c @@ -2053,8 +2053,10 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req, string_is_valid_ipv6_address(req->address)) { log_unsafe_socks_warning(5,req->address,req->port,safe_socks); - if (safe_socks) + if (safe_socks) { + socks_request_set_socks5_error(req, SOCKS5_NOT_ALLOWED); return -1; + } } if (!string_is_valid_hostname(req->address)) { diff --git a/src/test/test_socks.c b/src/test/test_socks.c index ba6b9a9771..a3fe07fdc5 100644 --- a/src/test/test_socks.c +++ b/src/test/test_socks.c @@ -238,6 +238,13 @@ test_socks_5_supported_commands(void *ptr) ADD_DATA(buf, "\x01\x02"); tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1) == -1); + + tt_int_op(5,==,socks->socks_version); + tt_int_op(10,==,socks->replylen); + tt_int_op(5,==,socks->reply[0]); + tt_int_op(SOCKS5_NOT_ALLOWED,==,socks->reply[1]); + tt_int_op(1,==,socks->reply[3]); + socks_request_clear(socks); /* SOCKS 5 should reject RESOLVE [F0] reject for IPv6 address @@ -249,6 +256,13 @@ test_socks_5_supported_commands(void *ptr) ADD_DATA(buf, "\x01\x02"); tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1) == -1); + + tt_int_op(5,==,socks->socks_version); + tt_int_op(10,==,socks->replylen); + tt_int_op(5,==,socks->reply[0]); + tt_int_op(SOCKS5_NOT_ALLOWED,==,socks->reply[1]); + tt_int_op(1,==,socks->reply[3]); + socks_request_clear(socks); /* SOCKS 5 Send RESOLVE_PTR [F1] for IP address 2.2.2.5 */ From 254ab5a8deb9ed5fb571016f402ffd7243208d73 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Nov 2014 00:45:14 -0500 Subject: [PATCH 120/184] Use correct argument types for inet_pton. (I blame whoever decided that using a void* for a union was a good idea.) --- src/common/util.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index c292c798cc..83002997ef 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -963,9 +963,9 @@ string_is_key_value(int severity, const char *string) int string_is_valid_ipv4_address(const char *string) { - struct sockaddr_in sockaddr; + struct in_addr addr; - return (tor_inet_pton(AF_INET,string,&sockaddr) == 1); + return (tor_inet_pton(AF_INET,string,&addr) == 1); } /** Return true if string represents a valid IPv6 address in @@ -974,9 +974,9 @@ string_is_valid_ipv4_address(const char *string) int string_is_valid_ipv6_address(const char *string) { - struct sockaddr_in sockaddr_dummy; + struct in6_addr addr; - return (tor_inet_pton(AF_INET6,string,&sockaddr_dummy) == 1); + return (tor_inet_pton(AF_INET6,string,&addr) == 1); } /** Return true iff string matches a pattern of DNS names From 74cbd8d55953969c15c60f025889b1e07a185a79 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Nov 2014 00:46:32 -0500 Subject: [PATCH 121/184] fix indentation --- src/common/util.c | 56 +++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/common/util.c b/src/common/util.c index 83002997ef..c6a39898d9 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -963,9 +963,9 @@ string_is_key_value(int severity, const char *string) int string_is_valid_ipv4_address(const char *string) { - struct in_addr addr; + struct in_addr addr; - return (tor_inet_pton(AF_INET,string,&addr) == 1); + return (tor_inet_pton(AF_INET,string,&addr) == 1); } /** Return true if string represents a valid IPv6 address in @@ -974,9 +974,9 @@ string_is_valid_ipv4_address(const char *string) int string_is_valid_ipv6_address(const char *string) { - struct in6_addr addr; + struct in6_addr addr; - return (tor_inet_pton(AF_INET6,string,&addr) == 1); + return (tor_inet_pton(AF_INET6,string,&addr) == 1); } /** Return true iff string matches a pattern of DNS names @@ -985,38 +985,38 @@ string_is_valid_ipv6_address(const char *string) int string_is_valid_hostname(const char *string) { - int result = 1; - smartlist_t *components; + int result = 1; + smartlist_t *components; - components = smartlist_new(); + components = smartlist_new(); - smartlist_split_string(components,string,".",0,0); + smartlist_split_string(components,string,".",0,0); - SMARTLIST_FOREACH_BEGIN(components, char *, c) { - if (c[0] == '-') { - result = 0; - break; - } + SMARTLIST_FOREACH_BEGIN(components, char *, c) { + if (c[0] == '-') { + result = 0; + break; + } - do { - if ((*c >= 'a' && *c <= 'z') || - (*c >= 'A' && *c <= 'Z') || - (*c >= '0' && *c <= '9') || - (*c == '-')) - c++; - else - result = 0; - } while (result && *c); + do { + if ((*c >= 'a' && *c <= 'z') || + (*c >= 'A' && *c <= 'Z') || + (*c >= '0' && *c <= '9') || + (*c == '-')) + c++; + else + result = 0; + } while (result && *c); - } SMARTLIST_FOREACH_END(c); + } SMARTLIST_FOREACH_END(c); - SMARTLIST_FOREACH_BEGIN(components, char *, c) { - tor_free(c); - } SMARTLIST_FOREACH_END(c); + SMARTLIST_FOREACH_BEGIN(components, char *, c) { + tor_free(c); + } SMARTLIST_FOREACH_END(c); - smartlist_free(components); + smartlist_free(components); - return result; + return result; } /** Return true iff the DIGEST256_LEN bytes in digest are all zero. */ From b1ca05d273eaef7477528c059ab0d1deb0dc9dab Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Nov 2014 09:01:46 -0500 Subject: [PATCH 122/184] Update verbiage in README to mention autogen.sh Closes ticket 13190 --- README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README b/README index e878476aa6..342376faf4 100644 --- a/README +++ b/README @@ -6,6 +6,9 @@ configure it properly. To build Tor from source: ./configure && make && make install +To build Tor from a just-cloned git repository: + sh autogen.sh && ./configure && make && make install + Home page: https://www.torproject.org/ From 07e06b335d8e044062818d2c5ae3e36a4834640f Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Nov 2014 09:54:51 -0500 Subject: [PATCH 123/184] Fix unused-argument warnings --- src/test/test_config.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/test_config.c b/src/test/test_config.c index 1ecb816352..71c338e5f8 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -572,6 +572,11 @@ static void pt_kickstart_proxy_mock(const smartlist_t *transport_list, char **proxy_argv, int is_server) { + (void) transport_list; + (void) proxy_argv; + (void) is_server; + /* XXXX check that args are as expected. */ + ++pt_kickstart_proxy_mock_call_count; } @@ -580,6 +585,12 @@ transport_add_from_config_mock(const tor_addr_t *addr, uint16_t port, const char *name, int socks_ver) { + (void) addr; + (void) port; + (void) name; + (void) socks_ver; + /* XXXX check that args are as expected. */ + ++transport_add_from_config_mock_call_count; return 0; @@ -588,6 +599,9 @@ transport_add_from_config_mock(const tor_addr_t *addr, static int transport_is_needed_mock(const char *transport_name) { + (void) transport_name; + /* XXXX check that arg is as expected. */ + ++transport_is_needed_mock_call_count; return transport_is_needed_mock_return; @@ -601,6 +615,8 @@ transport_is_needed_mock(const char *transport_name) static void test_config_parse_transport_plugin_line(void *arg) { + (void)arg; + or_options_t *options = get_options_mutable(); int r, tmp; int old_pt_kickstart_proxy_mock_call_count; From ce147d33f5c029fc74756dda8f9986cb4b8f2673 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Nov 2014 09:56:46 -0500 Subject: [PATCH 124/184] Fix a wide line I introduced --- src/or/config.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index cb27dac3c0..d7c1c5c435 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -4892,8 +4892,8 @@ parse_transport_line(const or_options_t *options, /* external */ /* ClientTransportPlugins connecting through a proxy is managed only. */ - if (!server && - (options->Socks4Proxy || options->Socks5Proxy || options->HTTPSProxy)) { + if (!server && (options->Socks4Proxy || options->Socks5Proxy || + options->HTTPSProxy)) { log_warn(LD_CONFIG, "You have configured an external proxy with another " "proxy type. (Socks4Proxy|Socks5Proxy|HTTPSProxy)"); goto err; From 3d8cb107323fa5d9cc375087e69a9940b947d0e3 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 4 Nov 2014 09:59:25 -0500 Subject: [PATCH 125/184] Changes file for Andrea's work on 6456 --- changes/tickets6456 | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 changes/tickets6456 diff --git a/changes/tickets6456 b/changes/tickets6456 new file mode 100644 index 0000000000..68ce2c7dd9 --- /dev/null +++ b/changes/tickets6456 @@ -0,0 +1,6 @@ + o Code simplification and refactoring: + - Combine the functions used to parse ClientTransportPlugin and + ServerTransportPlugin into a single function. Closes ticket 6456. + + o Testing: + - New tests for parse_transport_line(). Part of ticket 6456. From 8f645befba4c1c5df9c6f4ef832d217b1fdfed76 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 5 Nov 2014 14:09:59 -0500 Subject: [PATCH 126/184] 11291: Fix warnings, add changes file, rename 'mask'. --- changes/ticket-11291 | 4 ++++ src/common/util.c | 11 +++++------ src/test/test_checkdir.c | 1 + 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 changes/ticket-11291 diff --git a/changes/ticket-11291 b/changes/ticket-11291 new file mode 100644 index 0000000000..4c19f3cd0e --- /dev/null +++ b/changes/ticket-11291 @@ -0,0 +1,4 @@ + o Minor features (hidden services): + - New HiddenServiceDirGroupReadable option to cause hidden service + directories and hostname files to be created group-readable. + Patch from "anon", David Stainton, and "meejah". diff --git a/src/common/util.c b/src/common/util.c index b616d1f389..50097dac93 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -2012,8 +2012,7 @@ check_private_dir(const char *dirname, cpd_check_t check, struct stat st; char *f; #ifndef _WIN32 - int mask = 0; - int perm = 0; + unsigned unwanted_bits = 0; const struct passwd *pw = NULL; uid_t running_uid; gid_t running_gid; @@ -2112,11 +2111,11 @@ check_private_dir(const char *dirname, cpd_check_t check, return -1; } if (check & (CPD_GROUP_OK|CPD_GROUP_READ)) { - mask = 0027; + unwanted_bits = 0027; } else { - mask = 0077; + unwanted_bits = 0077; } - if (st.st_mode & mask) { + if ((st.st_mode & unwanted_bits) != 0) { unsigned new_mode; if (check & CPD_CHECK_MODE_ONLY) { log_warn(LD_FS, "Permissions on directory %s are too permissive.", @@ -2129,7 +2128,7 @@ check_private_dir(const char *dirname, cpd_check_t check, if (check & CPD_GROUP_READ) { new_mode |= 0050; /* Group should have rx */ } - new_mode &= ~mask; /* Clear the other bits that we didn't want set...*/ + new_mode &= ~unwanted_bits; /* Clear the bits that we didn't want set...*/ if (chmod(dirname, new_mode)) { log_warn(LD_FS, "Could not chmod directory %s: %s", dirname, strerror(errno)); diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 7bf735e061..409ba80004 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -12,6 +12,7 @@ static void test_checkdir_perms(void *testdata) { + (void)testdata; or_options_t *options = get_options_mutable(); const char *subdir = "test_checkdir"; char *testdir; From 1dcc49229563192cd43258af5eab97d233146f90 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 5 Nov 2014 14:27:05 -0500 Subject: [PATCH 127/184] chgrp the testing tempdir to ourself to clear the sticky bit Closes 13678. Doesn't actually matter for older tors. --- changes/bug13678 | 6 ++++++ src/test/test.c | 4 ++++ 2 files changed, 10 insertions(+) create mode 100644 changes/bug13678 diff --git a/changes/bug13678 b/changes/bug13678 new file mode 100644 index 0000000000..d71b88a003 --- /dev/null +++ b/changes/bug13678 @@ -0,0 +1,6 @@ + + o Testing: + - In the unit tests, use 'chgrp' to change the group of the unit test + temporary directory to the current user, so that the sticky bit doesn't + interfere with tests that check directory groups. Closes 13678. + diff --git a/src/test/test.c b/src/test/test.c index 203b7489df..8b74c0a87a 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -123,6 +123,10 @@ setup_directory(void) tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d_%s", (int) getpid(), rnd32); r = mkdir(temp_dir, 0700); + if (!r) { + /* undo sticky bit so tests don't get confused. */ + r = chown(temp_dir, getuid(), getgid()); + } #endif if (r) { fprintf(stderr, "Can't create directory %s:", temp_dir); From bb54d008c25206f5746aba5b522460e90d641a91 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 5 Nov 2014 14:39:09 -0500 Subject: [PATCH 128/184] Try to fix test_checkdir windows compilation --- src/test/test_checkdir.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 409ba80004..b694fd3b9d 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -8,6 +8,10 @@ #include "test.h" #include "util.h" +#ifdef _WIN32 +#define mkdir(a,b) mkdir(a) +#endif + /** Run unit tests for private dir permission enforcement logic. */ static void test_checkdir_perms(void *testdata) From 4ae729683d3ddd904993f0ecd663922b26594b79 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 5 Nov 2014 14:51:17 -0500 Subject: [PATCH 129/184] Try to fix test_checkdir windows compilation more --- src/test/test_checkdir.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index b694fd3b9d..185e5fbef1 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -70,6 +70,7 @@ test_checkdir_perms(void *testdata) testdir = get_datadir_fname("checkdir_exists_none"); cpd_chkopts = CPD_CREATE; unix_create_opts = 0700; + (void)unix_create_opts; unix_verify_optsmask = 0077; tt_int_op(0, ==, mkdir(testdir, unix_create_opts)); tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); From 68af1e7e9be8bef82b4574ac0934310af71a764b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 6 Nov 2014 11:10:58 -0500 Subject: [PATCH 130/184] Throw identify-node-by-nickname down the memory hole Authorities are no longer voting on Named, so specifying nodes by nickname isn't a clever thing to do. (Not that it ever was!) So remove the documentation that suggests that you should do it. Additionally, add proper cross-references to our __node__ lists, and explain about the optional $ before identity digests. Also, the oxford comma: endorsed by Steven Pinker, my spouse, and my 11th grade English teacher. Closes 13381. --- changes/doc13381 | 5 +++++ doc/tor.1.txt | 40 ++++++++++++++++++++++++---------------- 2 files changed, 29 insertions(+), 16 deletions(-) create mode 100644 changes/doc13381 diff --git a/changes/doc13381 b/changes/doc13381 new file mode 100644 index 0000000000..acc4bb8a0f --- /dev/null +++ b/changes/doc13381 @@ -0,0 +1,5 @@ + o Documentation: + - Stop suggesting that users specify nodes by nickname: it isn't a + good idea. Also, properly cross-reference how to specify nodes + in all parts of the manual for options that take a list of + nodes. Closes ticket 13381. diff --git a/doc/tor.1.txt b/doc/tor.1.txt index 84070da8ef..1c3be8c9c7 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -711,10 +711,11 @@ The following options are useful only for clients (that is, if unless ORPort, ExtORPort, or DirPort are configured.) (Default: 0) [[ExcludeNodes]] **ExcludeNodes** __node__,__node__,__...__:: - A list of identity fingerprints, nicknames, country codes and address - patterns of nodes to avoid when building a circuit. + A list of identity fingerprints, country codes, and address + patterns of nodes to avoid when building a circuit. Country codes must + be wrapped in braces; fingerprints may be preceded by a dollar sign. (Example: - ExcludeNodes SlowServer, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) + + ExcludeNodes ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) + + By default, this option is treated as a preference that Tor is allowed to override in order to keep working. @@ -734,11 +735,13 @@ The following options are useful only for clients (that is, if [[ExcludeExitNodes]] **ExcludeExitNodes** __node__,__node__,__...__:: - A list of identity fingerprints, nicknames, country codes and address + A list of identity fingerprints, country codes, and address patterns of nodes to never use when picking an exit node---that is, a node that delivers traffic for you outside the Tor network. Note that any node listed in ExcludeNodes is automatically considered to be part of this - list too. See also the caveats on the "ExitNodes" option below. + list too. See + the **ExcludeNodes** option for more information on how to specify + nodes. See also the caveats on the "ExitNodes" option below. [[GeoIPExcludeUnknown]] **GeoIPExcludeUnknown** **0**|**1**|**auto**:: If this option is set to 'auto', then whenever any country code is set in @@ -749,9 +752,10 @@ The following options are useful only for clients (that is, if configured or can't be found. (Default: auto) [[ExitNodes]] **ExitNodes** __node__,__node__,__...__:: - A list of identity fingerprints, nicknames, country codes and address + A list of identity fingerprints, country codes, and address patterns of nodes to use as exit node---that is, a - node that delivers traffic for you outside the Tor network. + + node that delivers traffic for you outside the Tor network. See + the **ExcludeNodes** option for more information on how to specify nodes. + + Note that if you list too few nodes here, or if you exclude too many exit nodes with ExcludeExitNodes, you can degrade functionality. For example, @@ -772,7 +776,7 @@ The following options are useful only for clients (that is, if this option. [[EntryNodes]] **EntryNodes** __node__,__node__,__...__:: - A list of identity fingerprints, nicknames, and country codes of nodes + A list of identity fingerprints and country codes of nodes to use for the first hop in your normal circuits. Normal circuits include all circuits except for direct connections to directory servers. The Bridge @@ -780,7 +784,8 @@ The following options are useful only for clients (that is, if UseBridges is 1, the Bridges are used as your entry nodes. + + The ExcludeNodes option overrides this option: any node listed in both - EntryNodes and ExcludeNodes is treated as excluded. + EntryNodes and ExcludeNodes is treated as excluded. See + the **ExcludeNodes** option for more information on how to specify nodes. [[StrictNodes]] **StrictNodes** **0**|**1**:: If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a @@ -929,12 +934,14 @@ The following options are useful only for clients (that is, if but it has not yet been completely constructed. (Default: 32) [[NodeFamily]] **NodeFamily** __node__,__node__,__...__:: - The Tor servers, defined by their identity fingerprints or nicknames, + The Tor servers, defined by their identity fingerprints, constitute a "family" of similar or co-administered servers, so never use any two of them in the same circuit. Defining a NodeFamily is only needed when a server doesn't list the family itself (with MyFamily). This option - can be used multiple times. In addition to nodes, you can also list - IP address and ranges and country codes in {curly braces}. + can be used multiple times; each instance defines a separate family. In + addition to nodes, you can also list IP address and ranges and country + codes in {curly braces}. See the **ExcludeNodes** option for more + information on how to specify nodes. [[EnforceDistinctSubnets]] **EnforceDistinctSubnets** **0**|**1**:: If 1, Tor will not put two servers whose IP addresses are "too close" on @@ -1538,7 +1545,7 @@ is non-zero): [[MyFamily]] **MyFamily** __node__,__node__,__...__:: Declare that this Tor server is controlled or administered by a group or organization identical or similar to that of the other servers, defined by - their identity fingerprints or nicknames. When two servers both declare + their identity fingerprints. When two servers both declare that they are in the same \'family', Tor clients will not use them in the same circuit. (Each server only needs to list the other servers in its family; it doesn't need to list itself, but it won't hurt.) Do not list @@ -2204,16 +2211,17 @@ The following options are used for running a testing Tor network. Changing this requires that **TestingTorNetwork** is set. (Default: 8) [[TestingDirAuthVoteExit]] **TestingDirAuthVoteExit** __node__,__node__,__...__:: - A list of identity fingerprints, nicknames, country codes and + A list of identity fingerprints, country codes, and address patterns of nodes to vote Exit for regardless of their uptime, bandwidth, or exit policy. See the **ExcludeNodes** option for more information on how to specify nodes. + In order for this option to have any effect, **TestingTorNetwork** - has to be set. + has to be set. See the **ExcludeNodes** option for more + information on how to specify nodes. [[TestingDirAuthVoteGuard]] **TestingDirAuthVoteGuard** __node__,__node__,__...__:: - A list of identity fingerprints, nicknames, country codes and + A list of identity fingerprints and country codes and address patterns of nodes to vote Guard for regardless of their uptime and bandwidth. See the **ExcludeNodes** option for more information on how to specify nodes. From 00f59098767766cc594c89837781c28a1ec67682 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 6 Nov 2014 11:19:31 -0500 Subject: [PATCH 131/184] Define macros meaning <,>,==,!=,<=,>= This lets us avoid putting operators directly in macro arguments, and thus will help us unconfuse coccinelle. For ticket 13172. --- changes/ticket13172 | 4 ++++ src/common/compat.h | 9 +++++++++ 2 files changed, 13 insertions(+) create mode 100644 changes/ticket13172 diff --git a/changes/ticket13172 b/changes/ticket13172 new file mode 100644 index 0000000000..a1d47fd9cf --- /dev/null +++ b/changes/ticket13172 @@ -0,0 +1,4 @@ + o Code simplification and refactoring: + - Avoid using operators directly as macro arguments: this lets us + apply coccinelle transformations to our codebase more + directly. Closes ticket 13172. \ No newline at end of file diff --git a/src/common/compat.h b/src/common/compat.h index f2eef5b6e7..7001361af3 100644 --- a/src/common/compat.h +++ b/src/common/compat.h @@ -203,6 +203,15 @@ extern INLINE double U64_TO_DBL(uint64_t x) { #define STMT_END } while (0) #endif +/* Some tools (like coccinelle) don't like to see operators as macro + * arguments. */ +#define OP_LT < +#define OP_GT > +#define OP_GE >= +#define OP_LE <= +#define OP_EQ == +#define OP_NE != + /* ===== String compatibility */ #ifdef _WIN32 /* Windows names string functions differently from most other platforms. */ From 85a76cd4ebdb8f7face1e5deb5fa0d9f8612f31b Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 7 Nov 2014 08:54:03 -0500 Subject: [PATCH 132/184] test_checkdir.c: try to make it pass on windows also fix memory-leak on failing tests. --- src/test/test_checkdir.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 185e5fbef1..4bbccfc88b 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -10,6 +10,9 @@ #ifdef _WIN32 #define mkdir(a,b) mkdir(a) +#define tt_int_op_nowin(a,op,b) do { (void)(a); (void)(b); } while (0) +#else +#define tt_int_op_nowin(a,op,b) tt_int_op((a),op,(b)) #endif /** Run unit tests for private dir permission enforcement logic. */ @@ -19,7 +22,7 @@ test_checkdir_perms(void *testdata) (void)testdata; or_options_t *options = get_options_mutable(); const char *subdir = "test_checkdir"; - char *testdir; + char *testdir = NULL; cpd_check_t cpd_chkopts; cpd_check_t unix_create_opts; cpd_check_t unix_verify_optsmask; @@ -36,7 +39,7 @@ test_checkdir_perms(void *testdata) unix_verify_optsmask = 0077; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: create new dir, CPD_GROUP_OK option set. */ @@ -45,7 +48,7 @@ test_checkdir_perms(void *testdata) unix_verify_optsmask = 0077; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: should get an error on existing dir with @@ -62,7 +65,7 @@ test_checkdir_perms(void *testdata) unix_verify_optsmask = 0027; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with defaults, @@ -75,7 +78,7 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, mkdir(testdir, unix_create_opts)); tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with defaults, @@ -87,7 +90,7 @@ test_checkdir_perms(void *testdata) cpd_chkopts = CPD_GROUP_OK; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with defaults, @@ -99,7 +102,7 @@ test_checkdir_perms(void *testdata) cpd_chkopts = CPD_GROUP_READ; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with CPD_GROUP_READ, @@ -111,7 +114,7 @@ test_checkdir_perms(void *testdata) cpd_chkopts = CPD_GROUP_OK; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with CPD_GROUP_READ, @@ -121,11 +124,11 @@ test_checkdir_perms(void *testdata) unix_verify_optsmask = 0027; tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op(0, ==, (st.st_mode & unix_verify_optsmask)); - tor_free(testdir); + tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); done: - ; + tor_free(testdir); + } #define CHECKDIR(name,flags) \ From 5b1971c7f337371efbab17b88070a7e6f3a11cc8 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 7 Nov 2014 09:28:49 -0500 Subject: [PATCH 133/184] test_checkdir.c: Perhaps this is what will make this test pass on windows? --- src/test/test_checkdir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 4bbccfc88b..bece24e93e 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -56,7 +56,7 @@ test_checkdir_perms(void *testdata) testdir = get_datadir_fname("checkdir_new_groupok_err"); tt_int_op(0, ==, mkdir(testdir, 027)); cpd_chkopts = CPD_CHECK_MODE_ONLY|CPD_CREATE|CPD_GROUP_OK; - tt_int_op(-1, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op_nowin(-1, ==, check_private_dir(testdir, cpd_chkopts, NULL)); tor_free(testdir); /* test: create new dir, CPD_GROUP_READ option set. */ From 151f5f90b8a103a35dfbf62426257dc918df4816 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Fri, 7 Nov 2014 11:40:41 -0500 Subject: [PATCH 134/184] Wrong format in log statement Fixes bug 13701. --- changes/bug13701 | 4 ++++ src/or/circuituse.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changes/bug13701 diff --git a/changes/bug13701 b/changes/bug13701 new file mode 100644 index 0000000000..23a08afa47 --- /dev/null +++ b/changes/bug13701 @@ -0,0 +1,4 @@ + o Minor bugfixes (logging): + - Log the circuit identifier correctly in + connection_ap_handshake_attach_circuit(). Fixes bug 13701; + bugfix on 0.0.6. diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 441a8fcbb5..10bc45f172 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -2324,7 +2324,7 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn) tor_assert(rendcirc); /* one is already established, attach */ log_info(LD_REND, - "rend joined circ %d already here. attaching. " + "rend joined circ %u already here. attaching. " "(stream %d sec old)", (unsigned)rendcirc->base_.n_circ_id, conn_age); /* Mark rendezvous circuits as 'newly dirty' every time you use From 7f7df97579ba1035594c1d7589b890360ee93033 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 9 Nov 2014 16:34:34 +0200 Subject: [PATCH 135/184] Fixing typo in manpage. --- changes/bug13707 | 4 ++++ doc/tor.1.txt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 changes/bug13707 diff --git a/changes/bug13707 b/changes/bug13707 new file mode 100644 index 0000000000..349495c9c7 --- /dev/null +++ b/changes/bug13707 @@ -0,0 +1,4 @@ + o Documentation: + - Fix typo in PredictedPortsRelevanceTime option description in + manpage. Resolves issue 13707. + diff --git a/doc/tor.1.txt b/doc/tor.1.txt index 1c3be8c9c7..58107130a6 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -550,7 +550,7 @@ GENERAL OPTIONS \'info'. (Default: 0) [[PredictedPortsRelevanceTime]] **PredictedPortsRelevanceTime** __NUM__:: - Set how long, after the client has mad an anonymized connection to a + Set how long, after the client has made an anonymized connection to a given port, we will try to make sure that we build circuits to exits that support that port. The maximum value for this option is 1 hour. (Default: 1 hour) From 4b18d8931b0c719b52ce0e2ac39a03dbf2b0adb0 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 9 Nov 2014 17:39:23 +0200 Subject: [PATCH 136/184] Downgrade RSA signature verification failure error message to info loglevel. --- src/common/crypto.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/crypto.c b/src/common/crypto.c index 90a16fab1a..7138ba003e 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -1012,7 +1012,7 @@ crypto_pk_public_checksig(crypto_pk_t *env, char *to, env->key, RSA_PKCS1_PADDING); if (r<0) { - crypto_log_errors(LOG_WARN, "checking RSA signature"); + crypto_log_errors(LOG_INFO, "checking RSA signature"); return -1; } return r; From 7025f2dc5928050d4b6659d6d7341549be974094 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 9 Nov 2014 17:41:18 +0200 Subject: [PATCH 137/184] Print a warning when extra info document is found incompatible with router descriptor. --- src/or/routerlist.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/or/routerlist.c b/src/or/routerlist.c index d81dae4676..fb39b6ea64 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -2945,6 +2945,7 @@ MOCK_IMPL(STATIC was_router_added_t, extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei)) { was_router_added_t r; + const char *compatibility_error_msg; routerinfo_t *ri = rimap_get(rl->identity_map, ei->cache_info.identity_digest); signed_descriptor_t *sd = @@ -2961,9 +2962,14 @@ extrainfo_insert,(routerlist_t *rl, extrainfo_t *ei)) r = ROUTER_NOT_IN_CONSENSUS; goto done; } - if (routerinfo_incompatible_with_extrainfo(ri, ei, sd, NULL)) { + if (routerinfo_incompatible_with_extrainfo(ri, ei, sd, + &compatibility_error_msg)) { r = (ri->cache_info.extrainfo_is_bogus) ? ROUTER_BAD_EI : ROUTER_NOT_IN_CONSENSUS; + + log_warn(LD_DIR,"router info incompatible with extra info (reason: %s)", + compatibility_error_msg); + goto done; } From e395783f23f58db7f27617014b7a3b4576251ada Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 9 Nov 2014 17:55:35 +0200 Subject: [PATCH 138/184] Adding changes file for 9812. --- changes/bug9812 | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 changes/bug9812 diff --git a/changes/bug9812 b/changes/bug9812 new file mode 100644 index 0000000000..308af8c18f --- /dev/null +++ b/changes/bug9812 @@ -0,0 +1,6 @@ + o Minor bugfixes (logging): + - Downgrade warnings about RSA signature failures to info log + level. Emit a warning when extra info document is found + incompatible with a corresponding router descriptor. Fixes bug + 9812. + From 26e7e519dc72aba1f00b9f0179f58e10fafda3d2 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 10 Nov 2014 09:03:11 -0500 Subject: [PATCH 139/184] Document networkstatus-bridges Closes 13713; patch from 'tom' --- changes/bug13713 | 3 +++ doc/tor.1.txt | 5 +++++ 2 files changed, 8 insertions(+) create mode 100644 changes/bug13713 diff --git a/changes/bug13713 b/changes/bug13713 new file mode 100644 index 0000000000..412b406c53 --- /dev/null +++ b/changes/bug13713 @@ -0,0 +1,3 @@ + o Documentation: + - Document the bridge-authority-only 'networkstatus-bridges' + file. Closes ticket 13713; patch from "tom". diff --git a/doc/tor.1.txt b/doc/tor.1.txt index 58107130a6..eb406e7cb7 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -2409,6 +2409,11 @@ __DataDirectory__**/stats/conn-stats**:: Only used by servers. This file is used to collect approximate connection history (number of active connections over time). +__DataDirectory__**/networkstatus-bridges**:: + Only used by authoritative bridge directories. Contains information + about bridges that have self-reported themselves to the bridge + authority. + __HiddenServiceDirectory__**/hostname**:: The .onion domain name for this hidden service. If the hidden service is restricted to authorized clients only, this file From 34eb007d2201bad44bd6b72681f2c3552445dfc4 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Mon, 10 Nov 2014 14:38:53 -0500 Subject: [PATCH 140/184] Fix: don't report timeout when closing parallel intro points When closing parallel introduction points, the given reason (timeout) was actually changed to "no reason" thus when the circuit purpose was CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT, we were reporting an introduction point failure and flagging it "unreachable". After three times, that intro point gets removed from the rend cache object. In the case of CIRCUIT_PURPOSE_C_INTRODUCING, the intro point was flagged has "timed out" and thus not used until the connection to the HS is closed where that flag gets reset. This commit adds an internal circuit reason called END_CIRC_REASON_IP_NOW_REDUNDANT which tells the closing circuit mechanism to not report any intro point failure. This has been observed while opening hundreds of connections to an HS on different circuit for each connection. This fix makes this use case to work like a charm. Fixes #13698. Signed-off-by: David Goulet --- changes/bug13698 | 4 ++++ src/or/circuitlist.c | 41 +++++++++++++++++++++++------------------ src/or/or.h | 4 ++++ src/or/rendclient.c | 5 ++--- 4 files changed, 33 insertions(+), 21 deletions(-) create mode 100644 changes/bug13698 diff --git a/changes/bug13698 b/changes/bug13698 new file mode 100644 index 0000000000..71e018b6ed --- /dev/null +++ b/changes/bug13698 @@ -0,0 +1,4 @@ + o Bugfixes: + - When closing an introduction circuit that was opened in parallel, don't + mark it unreachable which can causes it to be removed from the rend cache + object thus not usable anymore. diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index c7b15e40ba..6f12df8778 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -1417,30 +1417,35 @@ circuit_mark_for_close_(circuit_t *circ, int reason, int line, tor_assert(circ->state == CIRCUIT_STATE_OPEN); tor_assert(ocirc->build_state->chosen_exit); tor_assert(ocirc->rend_data); - /* treat this like getting a nack from it */ - log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s", - safe_str_client(ocirc->rend_data->onion_address), - safe_str_client(build_state_get_exit_nickname(ocirc->build_state)), - timed_out ? "Recording timeout." : "Removing from descriptor."); - rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, - ocirc->rend_data, - timed_out ? - INTRO_POINT_FAILURE_TIMEOUT : - INTRO_POINT_FAILURE_GENERIC); + if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) { + /* treat this like getting a nack from it */ + log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s", + safe_str_client(ocirc->rend_data->onion_address), + safe_str_client(build_state_get_exit_nickname(ocirc->build_state)), + timed_out ? "Recording timeout." : "Removing from descriptor."); + rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, + ocirc->rend_data, + timed_out ? + INTRO_POINT_FAILURE_TIMEOUT : + INTRO_POINT_FAILURE_GENERIC); + } } else if (circ->purpose == CIRCUIT_PURPOSE_C_INTRODUCING && reason != END_CIRC_REASON_TIMEOUT) { origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); if (ocirc->build_state->chosen_exit && ocirc->rend_data) { - log_info(LD_REND, "Failed intro circ %s to %s " - "(building circuit to intro point). " - "Marking intro point as possibly unreachable.", - safe_str_client(ocirc->rend_data->onion_address), - safe_str_client(build_state_get_exit_nickname(ocirc->build_state))); - rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, - ocirc->rend_data, - INTRO_POINT_FAILURE_UNREACHABLE); + if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) { + log_info(LD_REND, "Failed intro circ %s to %s " + "(building circuit to intro point). " + "Marking intro point as possibly unreachable.", + safe_str_client(ocirc->rend_data->onion_address), + safe_str_client(build_state_get_exit_nickname(ocirc->build_state))); + rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, + ocirc->rend_data, + INTRO_POINT_FAILURE_UNREACHABLE); + } } } + if (circ->n_chan) { circuit_clear_cell_queue(circ, circ->n_chan); /* Only send destroy if the channel isn't closing anyway */ diff --git a/src/or/or.h b/src/or/or.h index 34f055cf06..f3e7b80fbd 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -659,6 +659,10 @@ typedef enum { /* Negative reasons are internal: we never send them in a DESTROY or TRUNCATE * call; they only go to the controller for tracking */ + +/* Closing introduction point that were opened in parallel. */ +#define END_CIRC_REASON_IP_NOW_REDUNDANT -4 + /** Our post-timeout circuit time measurement period expired. * We must give up now */ #define END_CIRC_REASON_MEASUREMENT_EXPIRED -3 diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 7abbfd6fc5..4ff000d3ed 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -368,8 +368,7 @@ rend_client_rendcirc_has_opened(origin_circuit_t *circ) } /** - * Called to close other intro circuits we launched in parallel - * due to timeout. + * Called to close other intro circuits we launched in parallel. */ static void rend_client_close_other_intros(const char *onion_address) @@ -387,7 +386,7 @@ rend_client_close_other_intros(const char *onion_address) log_info(LD_REND|LD_CIRC, "Closing introduction circuit %d that we " "built in parallel (Purpose %d).", oc->global_identifier, c->purpose); - circuit_mark_for_close(c, END_CIRC_REASON_TIMEOUT); + circuit_mark_for_close(c, END_CIRC_REASON_IP_NOW_REDUNDANT); } } } From f9d73eea9c2a17638ca55fc6fcc3a125c85c2619 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 11 Nov 2014 20:37:39 +0200 Subject: [PATCH 141/184] Comment possible values of was_router_added_t. --- src/or/or.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/or/or.h b/src/or/or.h index b95bfb15a9..371ca4f47c 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4999,14 +4999,30 @@ typedef enum { /** Return value for router_add_to_routerlist() and dirserv_add_descriptor() */ typedef enum was_router_added_t { + /* Router was added successfully. */ ROUTER_ADDED_SUCCESSFULLY = 1, + /* Router descriptor was added with warnings to submitter. */ ROUTER_ADDED_NOTIFY_GENERATOR = 0, + /* Extrainfo document was rejected because no corresponding router + * descriptor was found OR router descriptor was rejected because + * it was incompatible with its extrainfo document. */ ROUTER_BAD_EI = -1, + /* Router descriptor was rejected because it is already known. */ ROUTER_WAS_NOT_NEW = -2, + /* General purpose router was rejected, because it was not listed + * in consensus. */ ROUTER_NOT_IN_CONSENSUS = -3, + /* Router was neither in directory consensus nor in any of + * networkstatus documents. Caching it to access later. + * (Applies to fetched descriptors only.) */ ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS = -4, + /* Router was rejected by directory authority. */ ROUTER_AUTHDIR_REJECTS = -5, + /* Bridge descriptor was rejected because such bridge was not one + * of the bridges we have listed in our configuration. */ ROUTER_WAS_NOT_WANTED = -6, + /* Router descriptor was rejected because it was older than + * OLD_ROUTER_DESC_MAX_AGE. */ ROUTER_WAS_TOO_OLD = -7, } was_router_added_t; From a6520ed5379aa7cd29900eac11c483787f13d4df Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 11 Nov 2014 20:56:40 +0200 Subject: [PATCH 142/184] Renaming ROUTER_WAS_NOT_NEW to ROUTER_IS_ALREADY_KNOWN. --- src/or/dirserv.c | 6 +++--- src/or/or.h | 2 +- src/or/routerlist.c | 4 ++-- src/or/routerlist.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 730f005a96..d31bb72361 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -512,7 +512,7 @@ dirserv_add_multiple_descriptors(const char *desc, uint8_t purpose, if (!n_parsed) { *msg = "No descriptors found in your POST."; if (WRA_WAS_ADDED(r)) - r = ROUTER_WAS_NOT_NEW; + r = ROUTER_IS_ALREADY_KNOWN; } else { *msg = "(no message)"; } @@ -574,7 +574,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source) ri->cache_info.signed_descriptor_body, ri->cache_info.signed_descriptor_len, *msg); routerinfo_free(ri); - return ROUTER_WAS_NOT_NEW; + return ROUTER_IS_ALREADY_KNOWN; } /* Make a copy of desc, since router_add_to_routerlist might free @@ -646,7 +646,7 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg) if ((r = routerinfo_incompatible_with_extrainfo(ri, ei, NULL, msg))) { extrainfo_free(ei); - return r < 0 ? ROUTER_WAS_NOT_NEW : ROUTER_BAD_EI; + return r < 0 ? ROUTER_IS_ALREADY_KNOWN : ROUTER_BAD_EI; } router_add_extrainfo_to_routerlist(ei, msg, 0, 0); return ROUTER_ADDED_SUCCESSFULLY; diff --git a/src/or/or.h b/src/or/or.h index 371ca4f47c..a6c7f6666b 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -5008,7 +5008,7 @@ typedef enum was_router_added_t { * it was incompatible with its extrainfo document. */ ROUTER_BAD_EI = -1, /* Router descriptor was rejected because it is already known. */ - ROUTER_WAS_NOT_NEW = -2, + ROUTER_IS_ALREADY_KNOWN = -2, /* General purpose router was rejected, because it was not listed * in consensus. */ ROUTER_NOT_IN_CONSENSUS = -3, diff --git a/src/or/routerlist.c b/src/or/routerlist.c index d81dae4676..81c3717c92 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -3376,7 +3376,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg, router_describe(router)); *msg = "Router descriptor was not new."; routerinfo_free(router); - return ROUTER_WAS_NOT_NEW; + return ROUTER_IS_ALREADY_KNOWN; } } @@ -3461,7 +3461,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg, &routerlist->desc_store); routerlist_insert_old(routerlist, router); *msg = "Router descriptor was not new."; - return ROUTER_WAS_NOT_NEW; + return ROUTER_IS_ALREADY_KNOWN; } else { /* Same key, and either new, or listed in the consensus. */ log_debug(LD_DIR, "Replacing entry for router %s", diff --git a/src/or/routerlist.h b/src/or/routerlist.h index c6151deb49..e73e69b63a 100644 --- a/src/or/routerlist.h +++ b/src/or/routerlist.h @@ -118,7 +118,7 @@ WRA_WAS_ADDED(was_router_added_t s) { static INLINE int WRA_WAS_OUTDATED(was_router_added_t s) { return (s == ROUTER_WAS_TOO_OLD || - s == ROUTER_WAS_NOT_NEW || + s == ROUTER_IS_ALREADY_KNOWN || s == ROUTER_NOT_IN_CONSENSUS || s == ROUTER_NOT_IN_CONSENSUS_OR_NETWORKSTATUS); } From 032560fc750811ba361143d99cb61ab4abb26b36 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 11 Nov 2014 21:01:30 +0200 Subject: [PATCH 143/184] Adding changes file for 13644. --- changes/bug13644 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changes/bug13644 diff --git a/changes/bug13644 b/changes/bug13644 new file mode 100644 index 0000000000..959ce65fc9 --- /dev/null +++ b/changes/bug13644 @@ -0,0 +1,4 @@ + o Code simplifications and refactoring: + - Document all members of was_router_added_t enum and rename + ROUTER_WAS_NOT_NEW to ROUTER_IS_ALREADY_KNOWN to make it less + confusable with ROUTER_WAS_TOO_OLD. Fixes issue 13644. From 5e4174f3b45d65999e97c32dcce0b86b056b5957 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 12 Nov 2014 10:23:24 -0500 Subject: [PATCH 144/184] Revise changes file --- changes/bug13698 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/changes/bug13698 b/changes/bug13698 index 71e018b6ed..9af22345b8 100644 --- a/changes/bug13698 +++ b/changes/bug13698 @@ -1,4 +1,6 @@ - o Bugfixes: - - When closing an introduction circuit that was opened in parallel, don't - mark it unreachable which can causes it to be removed from the rend cache - object thus not usable anymore. + o Major bugfixes: + - When closing an introduction circuit that was opened in + parallel, don't mark the introduction point as + unreachable. Previously, the first successful connection to an + introduction point would make the other uintroduction points get + marked as having timed out. Fixes bug 13698; bugfix on 0.0.6rc2. From ccc54d545ec15205d3ed3a92ad4c783adbdc97d1 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 12 Nov 2014 10:28:33 -0500 Subject: [PATCH 145/184] tweak 9812 changes file --- changes/bug9812 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changes/bug9812 b/changes/bug9812 index 308af8c18f..8791589faf 100644 --- a/changes/bug9812 +++ b/changes/bug9812 @@ -2,5 +2,5 @@ - Downgrade warnings about RSA signature failures to info log level. Emit a warning when extra info document is found incompatible with a corresponding router descriptor. Fixes bug - 9812. + 9812; bugfix on 0.0.6rc3. From d85270e13c74bbfb9d2a2f2f7f73736a07b57046 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 12 Nov 2014 13:15:10 -0500 Subject: [PATCH 146/184] Reenhappy make check-spaces --- src/or/circuitlist.c | 7 ++++--- src/test/test_checkdir.c | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index 1b4582ad95..c7287f921d 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -1740,10 +1740,11 @@ circuit_mark_for_close_, (circuit_t *circ, int reason, int line, "(building circuit to intro point). " "Marking intro point as possibly unreachable.", safe_str_client(ocirc->rend_data->onion_address), - safe_str_client(build_state_get_exit_nickname(ocirc->build_state))); + safe_str_client(build_state_get_exit_nickname( + ocirc->build_state))); rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, - ocirc->rend_data, - INTRO_POINT_FAILURE_UNREACHABLE); + ocirc->rend_data, + INTRO_POINT_FAILURE_UNREACHABLE); } } } diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index bece24e93e..5135816270 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -126,9 +126,8 @@ test_checkdir_perms(void *testdata) tt_int_op(0, ==, stat(testdir, &st)); tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); - done: + done: tor_free(testdir); - } #define CHECKDIR(name,flags) \ From a3dafd3f58bb3122b9de919e931c02b5e12373b2 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 12 Nov 2014 13:28:07 -0500 Subject: [PATCH 147/184] Replace operators used as macro arguments with OP_XX macros Part of fix for 13172 --- src/common/compat_libevent.c | 2 +- src/ext/tinytest_demo.c | 16 +- src/or/circuituse.c | 10 +- src/test/test.c | 156 +- src/test/test.h | 2 +- src/test/test_addr.c | 456 +++--- src/test/test_buffers.c | 336 ++--- src/test/test_cell_formats.c | 774 +++++----- src/test/test_cell_queue.c | 58 +- src/test/test_checkdir.c | 62 +- src/test/test_circuitlist.c | 128 +- src/test/test_circuitmux.c | 8 +- src/test/test_config.c | 50 +- src/test/test_containers.c | 386 ++--- src/test/test_controller_events.c | 52 +- src/test/test_crypto.c | 536 +++---- src/test/test_dir.c | 698 ++++----- src/test/test_entrynodes.c | 106 +- src/test/test_extorport.c | 184 +-- src/test/test_hs.c | 8 +- src/test/test_introduce.c | 2 +- src/test/test_logging.c | 30 +- src/test/test_microdesc.c | 156 +- src/test/test_nodelist.c | 4 +- src/test/test_oom.c | 80 +- src/test/test_options.c | 6 +- src/test/test_policy.c | 40 +- src/test/test_pt.c | 70 +- src/test/test_relaycell.c | 54 +- src/test/test_replay.c | 52 +- src/test/test_routerkeys.c | 16 +- src/test/test_routerset.c | 276 ++-- src/test/test_socks.c | 302 ++-- src/test/test_status.c | 242 ++-- src/test/test_util.c | 2186 ++++++++++++++--------------- 35 files changed, 3772 insertions(+), 3772 deletions(-) diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c index 33672f07d8..4cfe5cc93b 100644 --- a/src/common/compat_libevent.c +++ b/src/common/compat_libevent.c @@ -717,7 +717,7 @@ tor_gettimeofday_cached_monotonic(struct timeval *tv) struct timeval last_tv = { 0, 0 }; tor_gettimeofday_cached(tv); - if (timercmp(tv, &last_tv, <)) { + if (timercmp(tv, &last_tv, OP_LT)) { memcpy(tv, &last_tv, sizeof(struct timeval)); } else { memcpy(&last_tv, tv, sizeof(struct timeval)); diff --git a/src/ext/tinytest_demo.c b/src/ext/tinytest_demo.c index 634e112cb8..c07f099791 100644 --- a/src/ext/tinytest_demo.c +++ b/src/ext/tinytest_demo.c @@ -74,13 +74,13 @@ test_strcmp(void *data) values of the failing things. Fail unless strcmp("abc, "abc") == 0 */ - tt_int_op(strcmp("abc", "abc"), ==, 0); + tt_int_op(strcmp("abc", "abc"), OP_EQ, 0); /* Fail unless strcmp("abc, "abcd") is less than 0 */ - tt_int_op(strcmp("abc", "abcd"), < , 0); + tt_int_op(strcmp("abc", "abcd"), OP_LT, 0); /* Incidentally, there's a test_str_op that uses strcmp internally. */ - tt_str_op("abc", <, "abcd"); + tt_str_op("abc", OP_LT, "abcd"); /* Every test-case function needs to finish with an "end:" @@ -153,11 +153,11 @@ test_memcpy(void *ptr) /* Let's make sure that memcpy does what we'd like. */ strcpy(db->buffer1, "String 0"); memcpy(db->buffer2, db->buffer1, sizeof(db->buffer1)); - tt_str_op(db->buffer1, ==, db->buffer2); + tt_str_op(db->buffer1, OP_EQ, db->buffer2); /* tt_mem_op() does a memcmp, as opposed to the strcmp in tt_str_op() */ db->buffer2[100] = 3; /* Make the buffers unequal */ - tt_mem_op(db->buffer1, <, db->buffer2, sizeof(db->buffer1)); + tt_mem_op(db->buffer1, OP_LT, db->buffer2, sizeof(db->buffer1)); /* Now we've allocated memory that's referenced by a local variable. The end block of the function will clean it up. */ @@ -165,7 +165,7 @@ test_memcpy(void *ptr) tt_assert(mem); /* Another rather trivial test. */ - tt_str_op(db->buffer1, !=, mem); + tt_str_op(db->buffer1, OP_NE, mem); end: /* This time our end block has something to do. */ @@ -186,9 +186,9 @@ test_timeout(void *ptr) #endif t2 = time(NULL); - tt_int_op(t2-t1, >=, 4); + tt_int_op(t2-t1, OP_GE, 4); - tt_int_op(t2-t1, <=, 6); + tt_int_op(t2-t1, OP_LE, 6); end: ; diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 10bc45f172..ad4a3a546d 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -200,7 +200,7 @@ circuit_is_better(const origin_circuit_t *oa, const origin_circuit_t *ob, return 1; } else { if (a->timestamp_dirty || - timercmp(&a->timestamp_began, &b->timestamp_began, >)) + timercmp(&a->timestamp_began, &b->timestamp_began, OP_GT)) return 1; if (ob->build_state->is_internal) /* XXX023 what the heck is this internal thing doing here. I @@ -514,7 +514,7 @@ circuit_expire_building(void) if (TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out) cutoff = hs_extremely_old_cutoff; - if (timercmp(&victim->timestamp_began, &cutoff, >)) + if (timercmp(&victim->timestamp_began, &cutoff, OP_GT)) continue; /* it's still young, leave it alone */ /* We need to double-check the opened state here because @@ -524,7 +524,7 @@ circuit_expire_building(void) * aren't either. */ if (!any_opened_circs && victim->state != CIRCUIT_STATE_OPEN) { /* It's still young enough that we wouldn't close it, right? */ - if (timercmp(&victim->timestamp_began, &close_cutoff, >)) { + if (timercmp(&victim->timestamp_began, &close_cutoff, OP_GT)) { if (!TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout) { int first_hop_succeeded = TO_ORIGIN_CIRCUIT(victim)->cpath->state == CPATH_STATE_OPEN; @@ -672,7 +672,7 @@ circuit_expire_building(void) * it off at, we probably had a suspend event along this codepath, * and we should discard the value. */ - if (timercmp(&victim->timestamp_began, &extremely_old_cutoff, <)) { + if (timercmp(&victim->timestamp_began, &extremely_old_cutoff, OP_LT)) { log_notice(LD_CIRC, "Extremely large value for circuit build timeout: %lds. " "Assuming clock jump. Purpose %d (%s)", @@ -1255,7 +1255,7 @@ circuit_expire_old_circuits_clientside(void) if (circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING) circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); } else if (!circ->timestamp_dirty && circ->state == CIRCUIT_STATE_OPEN) { - if (timercmp(&circ->timestamp_began, &cutoff, <)) { + if (timercmp(&circ->timestamp_began, &cutoff, OP_LT)) { if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL || circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT || circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO || diff --git a/src/test/test.c b/src/test/test.c index 8b74c0a87a..8227176f24 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -277,9 +277,9 @@ test_onion_handshake(void *arg) memset(c_keys, 0, 40); tt_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); - tt_mem_op(c_keys,==, s_keys, 40); + tt_mem_op(c_keys,OP_EQ, s_keys, 40); memset(s_buf, 0, 40); - tt_mem_op(c_keys,!=, s_buf, 40); + tt_mem_op(c_keys,OP_NE, s_buf, 40); } done: crypto_dh_free(c_dh); @@ -311,7 +311,7 @@ test_bad_onion_handshake(void *arg) memset(junk_buf, 0, sizeof(junk_buf)); crypto_pk_public_hybrid_encrypt(pk, junk_buf2, TAP_ONIONSKIN_CHALLENGE_LEN, junk_buf, DH_KEY_LEN, PK_PKCS1_OAEP_PADDING, 1); - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, onion_skin_TAP_server_handshake(junk_buf2, pk, NULL, s_buf, s_keys, 40)); @@ -320,7 +320,7 @@ test_bad_onion_handshake(void *arg) memset(junk_buf2, 0, sizeof(junk_buf2)); crypto_pk_public_encrypt(pk, junk_buf2, sizeof(junk_buf2), junk_buf, 48, PK_PKCS1_OAEP_PADDING); - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, onion_skin_TAP_server_handshake(junk_buf2, pk, NULL, s_buf, s_keys, 40)); @@ -329,36 +329,36 @@ test_bad_onion_handshake(void *arg) tt_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf)); /* Server: Case 3: we just don't have the right key. */ - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, onion_skin_TAP_server_handshake(c_buf, pk2, NULL, s_buf, s_keys, 40)); /* Server: Case 4: The RSA-encrypted portion is corrupt. */ c_buf[64] ^= 33; - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, onion_skin_TAP_server_handshake(c_buf, pk, NULL, s_buf, s_keys, 40)); c_buf[64] ^= 33; /* (Let the server procede) */ - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, onion_skin_TAP_server_handshake(c_buf, pk, NULL, s_buf, s_keys, 40)); /* Client: Case 1: The server sent back junk. */ s_buf[64] ^= 33; - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); s_buf[64] ^= 33; /* Let the client finish; make sure it can. */ - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); - tt_mem_op(s_keys,==, c_keys, 40); + tt_mem_op(s_keys,OP_EQ, c_keys, 40); /* Client: Case 2: The server sent back a degenerate DH. */ memset(s_buf, 0, sizeof(s_buf)); - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40)); done: @@ -395,24 +395,24 @@ test_ntor_handshake(void *arg) /* client handshake 1. */ memset(c_buf, 0, NTOR_ONIONSKIN_LEN); - tt_int_op(0, ==, onion_skin_ntor_create(node_id, server_pubkey, + tt_int_op(0, OP_EQ, onion_skin_ntor_create(node_id, server_pubkey, &c_state, c_buf)); /* server handshake */ memset(s_buf, 0, NTOR_REPLY_LEN); memset(s_keys, 0, 40); - tt_int_op(0, ==, onion_skin_ntor_server_handshake(c_buf, s_keymap, NULL, + tt_int_op(0, OP_EQ, onion_skin_ntor_server_handshake(c_buf, s_keymap, NULL, node_id, s_buf, s_keys, 400)); /* client handshake 2 */ memset(c_keys, 0, 40); - tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf, + tt_int_op(0, OP_EQ, onion_skin_ntor_client_handshake(c_state, s_buf, c_keys, 400)); - tt_mem_op(c_keys,==, s_keys, 400); + tt_mem_op(c_keys,OP_EQ, s_keys, 400); memset(s_buf, 0, 40); - tt_mem_op(c_keys,!=, s_buf, 40); + tt_mem_op(c_keys,OP_NE, s_buf, 40); done: ntor_handshake_state_free(c_state); @@ -440,24 +440,24 @@ test_onion_queues(void *arg) create_cell_init(create2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR, NTOR_ONIONSKIN_LEN, buf2); - tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); - tt_int_op(0,==, onion_pending_add(circ1, create1)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_pending_add(circ1, create1)); create1 = NULL; - tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); - tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); - tt_int_op(0,==, onion_pending_add(circ2, create2)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(0,OP_EQ, onion_pending_add(circ2, create2)); create2 = NULL; - tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); - tt_ptr_op(circ2,==, onion_next_task(&onionskin)); - tt_int_op(1,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); - tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); - tt_ptr_op(onionskin, ==, create2_ptr); + tt_ptr_op(circ2,OP_EQ, onion_next_task(&onionskin)); + tt_int_op(1,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_ptr_op(onionskin, OP_EQ, create2_ptr); clear_pending_onions(); - tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); - tt_int_op(0,==, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP)); + tt_int_op(0,OP_EQ, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR)); done: circuit_free(TO_CIRCUIT(circ1)); @@ -648,13 +648,13 @@ test_rend_fns(void *arg) (void)arg; tt_assert(BAD_HOSTNAME == parse_extended_hostname(address1)); tt_assert(ONION_HOSTNAME == parse_extended_hostname(address2)); - tt_str_op(address2,==, "aaaaaaaaaaaaaaaa"); + tt_str_op(address2,OP_EQ, "aaaaaaaaaaaaaaaa"); tt_assert(EXIT_HOSTNAME == parse_extended_hostname(address3)); tt_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4)); tt_assert(ONION_HOSTNAME == parse_extended_hostname(address5)); - tt_str_op(address5,==, "abcdefghijklmnop"); + tt_str_op(address5,OP_EQ, "abcdefghijklmnop"); tt_assert(ONION_HOSTNAME == parse_extended_hostname(address6)); - tt_str_op(address6,==, "abcdefghijklmnop"); + tt_str_op(address6,OP_EQ, "abcdefghijklmnop"); tt_assert(BAD_HOSTNAME == parse_extended_hostname(address7)); pk1 = pk_generate(0); @@ -693,7 +693,7 @@ test_rend_fns(void *arg) tt_assert(rend_compute_v2_desc_id(computed_desc_id, service_id_base32, NULL, now, 0) == 0); tt_mem_op(((rend_encoded_v2_service_descriptor_t *) - smartlist_get(descs, 0))->desc_id, ==, + smartlist_get(descs, 0))->desc_id, OP_EQ, computed_desc_id, DIGEST_LEN); tt_assert(rend_parse_v2_service_descriptor(&parsed, parsed_desc_id, &intro_points_encrypted, @@ -704,25 +704,25 @@ test_rend_fns(void *arg) smartlist_get(descs, 0))->desc_str) == 0); tt_assert(parsed); tt_mem_op(((rend_encoded_v2_service_descriptor_t *) - smartlist_get(descs, 0))->desc_id,==, parsed_desc_id, DIGEST_LEN); + smartlist_get(descs, 0))->desc_id,OP_EQ, parsed_desc_id, DIGEST_LEN); tt_int_op(rend_parse_introduction_points(parsed, intro_points_encrypted, - intro_points_size),==, 3); + intro_points_size),OP_EQ, 3); tt_assert(!crypto_pk_cmp_keys(generated->pk, parsed->pk)); - tt_int_op(parsed->timestamp,==, now); - tt_int_op(parsed->version,==, 2); - tt_int_op(parsed->protocols,==, 42); - tt_int_op(smartlist_len(parsed->intro_nodes),==, 3); + tt_int_op(parsed->timestamp,OP_EQ, now); + tt_int_op(parsed->version,OP_EQ, 2); + tt_int_op(parsed->protocols,OP_EQ, 42); + tt_int_op(smartlist_len(parsed->intro_nodes),OP_EQ, 3); for (i = 0; i < smartlist_len(parsed->intro_nodes); i++) { rend_intro_point_t *par_intro = smartlist_get(parsed->intro_nodes, i), *gen_intro = smartlist_get(generated->intro_nodes, i); extend_info_t *par_info = par_intro->extend_info; extend_info_t *gen_info = gen_intro->extend_info; tt_assert(!crypto_pk_cmp_keys(gen_info->onion_key, par_info->onion_key)); - tt_mem_op(gen_info->identity_digest,==, par_info->identity_digest, + tt_mem_op(gen_info->identity_digest,OP_EQ, par_info->identity_digest, DIGEST_LEN); - tt_str_op(gen_info->nickname,==, par_info->nickname); + tt_str_op(gen_info->nickname,OP_EQ, par_info->nickname); tt_assert(tor_addr_eq(&gen_info->addr, &par_info->addr)); - tt_int_op(gen_info->port,==, par_info->port); + tt_int_op(gen_info->port,OP_EQ, par_info->port); } rend_service_descriptor_free(parsed); @@ -766,11 +766,11 @@ test_rend_fns(void *arg) } while (0) #define CHECK_COUNTRY(country, val) do { \ /* test ipv4 country lookup */ \ - tt_str_op(country, ==, \ + tt_str_op(country, OP_EQ, \ geoip_get_country_name(geoip_get_country_by_ipv4(val))); \ /* test ipv6 country lookup */ \ SET_TEST_IPV6(val); \ - tt_str_op(country, ==, \ + tt_str_op(country, OP_EQ, \ geoip_get_country_name(geoip_get_country_by_ipv6(&in6))); \ } while (0) @@ -831,23 +831,23 @@ test_geoip(void *arg) * 'sort' step. These aren't very good IP addresses, but they're perfectly * fine uint32_t values. */ (void)arg; - tt_int_op(0,==, geoip_parse_entry("10,50,AB", AF_INET)); - tt_int_op(0,==, geoip_parse_entry("52,90,XY", AF_INET)); - tt_int_op(0,==, geoip_parse_entry("95,100,AB", AF_INET)); - tt_int_op(0,==, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET)); - tt_int_op(0,==, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET)); - tt_int_op(0,==, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET)); + tt_int_op(0,OP_EQ, geoip_parse_entry("10,50,AB", AF_INET)); + tt_int_op(0,OP_EQ, geoip_parse_entry("52,90,XY", AF_INET)); + tt_int_op(0,OP_EQ, geoip_parse_entry("95,100,AB", AF_INET)); + tt_int_op(0,OP_EQ, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET)); + tt_int_op(0,OP_EQ, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET)); + tt_int_op(0,OP_EQ, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET)); /* Populate the IPv6 DB equivalently with fake IPs in the same range */ - tt_int_op(0,==, geoip_parse_entry("::a,::32,AB", AF_INET6)); - tt_int_op(0,==, geoip_parse_entry("::34,::5a,XY", AF_INET6)); - tt_int_op(0,==, geoip_parse_entry("::5f,::64,AB", AF_INET6)); - tt_int_op(0,==, geoip_parse_entry("::69,::8c,ZZ", AF_INET6)); - tt_int_op(0,==, geoip_parse_entry("::96,::be,XY", AF_INET6)); - tt_int_op(0,==, geoip_parse_entry("::c8,::fa,AB", AF_INET6)); + tt_int_op(0,OP_EQ, geoip_parse_entry("::a,::32,AB", AF_INET6)); + tt_int_op(0,OP_EQ, geoip_parse_entry("::34,::5a,XY", AF_INET6)); + tt_int_op(0,OP_EQ, geoip_parse_entry("::5f,::64,AB", AF_INET6)); + tt_int_op(0,OP_EQ, geoip_parse_entry("::69,::8c,ZZ", AF_INET6)); + tt_int_op(0,OP_EQ, geoip_parse_entry("::96,::be,XY", AF_INET6)); + tt_int_op(0,OP_EQ, geoip_parse_entry("::c8,::fa,AB", AF_INET6)); /* We should have 4 countries: ??, ab, xy, zz. */ - tt_int_op(4,==, geoip_get_n_countries()); + tt_int_op(4,OP_EQ, geoip_get_n_countries()); memset(&in6, 0, sizeof(in6)); CHECK_COUNTRY("??", 3); @@ -858,9 +858,9 @@ test_geoip(void *arg) CHECK_COUNTRY("xy", 190); CHECK_COUNTRY("??", 2000); - tt_int_op(0,==, geoip_get_country_by_ipv4(3)); + tt_int_op(0,OP_EQ, geoip_get_country_by_ipv4(3)); SET_TEST_IPV6(3); - tt_int_op(0,==, geoip_get_country_by_ipv6(&in6)); + tt_int_op(0,OP_EQ, geoip_get_country_by_ipv6(&in6)); get_options_mutable()->BridgeRelay = 1; get_options_mutable()->BridgeRecordUsageByCountry = 1; @@ -885,8 +885,8 @@ test_geoip(void *arg) geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v); tt_assert(s); tt_assert(v); - tt_str_op("zz=24,ab=16,xy=8",==, s); - tt_str_op("v4=16,v6=16",==, v); + tt_str_op("zz=24,ab=16,xy=8",OP_EQ, s); + tt_str_op("v4=16,v6=16",OP_EQ, v); tor_free(s); tor_free(v); @@ -895,8 +895,8 @@ test_geoip(void *arg) geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v); tt_assert(s); tt_assert(v); - tt_str_op("zz=24,xy=8",==, s); - tt_str_op("v4=16,v6=16",==, v); + tt_str_op("zz=24,xy=8",OP_EQ, s); + tt_str_op("v4=16,v6=16",OP_EQ, v); tor_free(s); tor_free(v); @@ -910,7 +910,7 @@ test_geoip(void *arg) geoip_bridge_stats_init(now); s = geoip_format_bridge_stats(now + 86400); tt_assert(s); - tt_str_op(bridge_stats_1,==, s); + tt_str_op(bridge_stats_1,OP_EQ, s); tor_free(s); /* Stop collecting bridge stats and make sure we don't write a history @@ -939,7 +939,7 @@ test_geoip(void *arg) SET_TEST_ADDRESS(100); geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now); s = geoip_format_dirreq_stats(now + 86400); - tt_str_op(dirreq_stats_1,==, s); + tt_str_op(dirreq_stats_1,OP_EQ, s); tor_free(s); /* Stop collecting stats, add another connecting client, and ensure we @@ -957,20 +957,20 @@ test_geoip(void *arg) geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now); geoip_reset_dirreq_stats(now); s = geoip_format_dirreq_stats(now + 86400); - tt_str_op(dirreq_stats_2,==, s); + tt_str_op(dirreq_stats_2,OP_EQ, s); tor_free(s); /* Note a successful network status response and make sure that it * appears in the history string. */ geoip_note_ns_response(GEOIP_SUCCESS); s = geoip_format_dirreq_stats(now + 86400); - tt_str_op(dirreq_stats_3,==, s); + tt_str_op(dirreq_stats_3,OP_EQ, s); tor_free(s); /* Start a tunneled directory request. */ geoip_start_dirreq((uint64_t) 1, 1024, DIRREQ_TUNNELED); s = geoip_format_dirreq_stats(now + 86400); - tt_str_op(dirreq_stats_4,==, s); + tt_str_op(dirreq_stats_4,OP_EQ, s); tor_free(s); /* Stop collecting directory request statistics and start gathering @@ -992,7 +992,7 @@ test_geoip(void *arg) SET_TEST_ADDRESS(100); geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); s = geoip_format_entry_stats(now + 86400); - tt_str_op(entry_stats_1,==, s); + tt_str_op(entry_stats_1,OP_EQ, s); tor_free(s); /* Stop collecting stats, add another connecting client, and ensure we @@ -1010,7 +1010,7 @@ test_geoip(void *arg) geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now); geoip_reset_entry_stats(now); s = geoip_format_entry_stats(now + 86400); - tt_str_op(entry_stats_2,==, s); + tt_str_op(entry_stats_2,OP_EQ, s); tor_free(s); /* Stop collecting entry statistics. */ @@ -1083,7 +1083,7 @@ test_geoip_with_pt(void *arg) /* Test the transport history string. */ s = geoip_get_transport_history(); tor_assert(s); - tt_str_op(s,==, "=8,alpha=16,beta=8,charlie=16,ddr=136," + tt_str_op(s,OP_EQ, "=8,alpha=16,beta=8,charlie=16,ddr=136," "entropy=8,fire=8,google=8"); /* Stop collecting entry statistics. */ @@ -1126,7 +1126,7 @@ test_stats(void *arg) tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n" "exit-kibibytes-written 80=1,443=1,other=0\n" "exit-kibibytes-read 80=10,443=20,other=0\n" - "exit-streams-opened 80=4,443=4,other=0\n",==, s); + "exit-streams-opened 80=4,443=4,other=0\n",OP_EQ, s); tor_free(s); /* Add a few bytes on 10 more ports and ensure that only the top 10 @@ -1142,7 +1142,7 @@ test_stats(void *arg) "exit-kibibytes-read 52=1,53=1,54=1,55=1,56=1,57=1,58=1," "59=1,80=10,443=20,other=1\n" "exit-streams-opened 52=4,53=4,54=4,55=4,56=4,57=4,58=4," - "59=4,80=4,443=4,other=4\n",==, s); + "59=4,80=4,443=4,other=4\n",OP_EQ, s); tor_free(s); /* Stop collecting stats, add some bytes, and ensure we don't generate @@ -1162,7 +1162,7 @@ test_stats(void *arg) tt_str_op("exit-stats-end 2010-08-12 13:27:30 (86400 s)\n" "exit-kibibytes-written other=0\n" "exit-kibibytes-read other=0\n" - "exit-streams-opened other=0\n",==, s); + "exit-streams-opened other=0\n",OP_EQ, s); tor_free(s); /* Continue with testing connection statistics; we shouldn't collect @@ -1178,7 +1178,7 @@ test_stats(void *arg) rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 10); rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15); s = rep_hist_format_conn_stats(now + 86400); - tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,1,0\n",==, s); + tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,1,0\n",OP_EQ, s); tor_free(s); /* Stop collecting stats, add some bytes, and ensure we don't generate @@ -1197,7 +1197,7 @@ test_stats(void *arg) rep_hist_note_or_conn_bytes(2, 400000, 30000, now + 15); rep_hist_reset_conn_stats(now); s = rep_hist_format_conn_stats(now + 86400); - tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n",==, s); + tt_str_op("conn-bi-direct 2010-08-12 13:27:30 (86400 s) 0,0,0,0\n",OP_EQ, s); tor_free(s); /* Continue with testing buffer statistics; we shouldn't collect buffer @@ -1216,7 +1216,7 @@ test_stats(void *arg) "cell-queued-cells 2.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00," "0.00,0.00\n" "cell-time-in-queue 2,0,0,0,0,0,0,0,0,0\n" - "cell-circuits-per-decile 1\n",==, s); + "cell-circuits-per-decile 1\n",OP_EQ, s); tor_free(s); /* Add nineteen more circuit statistics to the one that's already in the @@ -1231,7 +1231,7 @@ test_stats(void *arg) "cell-queued-cells 2.75,2.75,2.75,2.75,2.75,2.75,2.75,2.75," "2.75,2.75\n" "cell-time-in-queue 3,3,3,3,3,3,3,3,3,3\n" - "cell-circuits-per-decile 2\n",==, s); + "cell-circuits-per-decile 2\n",OP_EQ, s); tor_free(s); /* Stop collecting stats, add statistics for one circuit, and ensure we @@ -1252,7 +1252,7 @@ test_stats(void *arg) "cell-queued-cells 0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00," "0.00,0.00\n" "cell-time-in-queue 0,0,0,0,0,0,0,0,0,0\n" - "cell-circuits-per-decile 0\n",==, s); + "cell-circuits-per-decile 0\n",OP_EQ, s); done: tor_free(s); diff --git a/src/test/test.h b/src/test/test.h index db07e4b706..5518ca3f60 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -34,7 +34,7 @@ tt_mem_op(expr1, op, mem_op_hex_tmp, length/2); \ STMT_END -#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, ==, hex) +#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, OP_EQ, hex) #define tt_double_op(a,op,b) \ tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%f", \ diff --git a/src/test/test_addr.c b/src/test/test_addr.c index e9fe3038b8..b7fe2c47fc 100644 --- a/src/test/test_addr.c +++ b/src/test/test_addr.c @@ -20,40 +20,40 @@ test_addr_basic(void *arg) (void)arg; cp = NULL; u32 = 3; u16 = 3; tt_assert(!addr_port_lookup(LOG_WARN, "1.2.3.4", &cp, &u32, &u16)); - tt_str_op(cp,==, "1.2.3.4"); - tt_int_op(u32,==, 0x01020304u); - tt_int_op(u16,==, 0); + tt_str_op(cp,OP_EQ, "1.2.3.4"); + tt_int_op(u32,OP_EQ, 0x01020304u); + tt_int_op(u16,OP_EQ, 0); tor_free(cp); tt_assert(!addr_port_lookup(LOG_WARN, "4.3.2.1:99", &cp, &u32, &u16)); - tt_str_op(cp,==, "4.3.2.1"); - tt_int_op(u32,==, 0x04030201u); - tt_int_op(u16,==, 99); + tt_str_op(cp,OP_EQ, "4.3.2.1"); + tt_int_op(u32,OP_EQ, 0x04030201u); + tt_int_op(u16,OP_EQ, 99); tor_free(cp); tt_assert(!addr_port_lookup(LOG_WARN, "nonexistent.address:4040", &cp, NULL, &u16)); - tt_str_op(cp,==, "nonexistent.address"); - tt_int_op(u16,==, 4040); + tt_str_op(cp,OP_EQ, "nonexistent.address"); + tt_int_op(u16,OP_EQ, 4040); tor_free(cp); tt_assert(!addr_port_lookup(LOG_WARN, "localhost:9999", &cp, &u32, &u16)); - tt_str_op(cp,==, "localhost"); - tt_int_op(u32,==, 0x7f000001u); - tt_int_op(u16,==, 9999); + tt_str_op(cp,OP_EQ, "localhost"); + tt_int_op(u32,OP_EQ, 0x7f000001u); + tt_int_op(u16,OP_EQ, 9999); tor_free(cp); u32 = 3; tt_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16)); - tt_ptr_op(cp,==, NULL); - tt_int_op(u32,==, 0x7f000001u); - tt_int_op(u16,==, 0); + tt_ptr_op(cp,OP_EQ, NULL); + tt_int_op(u32,OP_EQ, 0x7f000001u); + tt_int_op(u16,OP_EQ, 0); tor_free(cp); tt_assert(addr_port_lookup(LOG_WARN, "localhost:3", &cp, &u32, NULL)); tor_free(cp); - tt_int_op(0,==, addr_mask_get_bits(0x0u)); - tt_int_op(32,==, addr_mask_get_bits(0xFFFFFFFFu)); - tt_int_op(16,==, addr_mask_get_bits(0xFFFF0000u)); - tt_int_op(31,==, addr_mask_get_bits(0xFFFFFFFEu)); - tt_int_op(1,==, addr_mask_get_bits(0x80000000u)); + tt_int_op(0,OP_EQ, addr_mask_get_bits(0x0u)); + tt_int_op(32,OP_EQ, addr_mask_get_bits(0xFFFFFFFFu)); + tt_int_op(16,OP_EQ, addr_mask_get_bits(0xFFFF0000u)); + tt_int_op(31,OP_EQ, addr_mask_get_bits(0xFFFFFFFEu)); + tt_int_op(1,OP_EQ, addr_mask_get_bits(0x80000000u)); /* Test inet_ntop */ { @@ -62,15 +62,15 @@ test_addr_basic(void *arg) struct in_addr in; /* good round trip */ - tt_int_op(tor_inet_pton(AF_INET, ip, &in),==, 1); - tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)),==, &tmpbuf); - tt_str_op(tmpbuf,==, ip); + tt_int_op(tor_inet_pton(AF_INET, ip, &in),OP_EQ, 1); + tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)),OP_EQ, &tmpbuf); + tt_str_op(tmpbuf,OP_EQ, ip); /* just enough buffer length */ - tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1),==, ip); + tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1),OP_EQ, ip); /* too short buffer */ - tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)),==, NULL); + tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)),OP_EQ, NULL); } done: @@ -98,30 +98,30 @@ test_addr_basic(void *arg) /** Helper: Assert that two strings both decode as IPv6 addresses with * tor_inet_pton(), and both decode to the same address. */ #define test_pton6_same(a,b) STMT_BEGIN \ - tt_int_op(tor_inet_pton(AF_INET6, a, &a1), ==, 1); \ - tt_int_op(tor_inet_pton(AF_INET6, b, &a2), ==, 1); \ - test_op_ip6_(&a1,==,&a2,#a,#b); \ + tt_int_op(tor_inet_pton(AF_INET6, a, &a1), OP_EQ, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, b, &a2), OP_EQ, 1); \ + test_op_ip6_(&a1,OP_EQ,&a2,#a,#b); \ STMT_END /** Helper: Assert that a is recognized as a bad IPv6 address by * tor_inet_pton(). */ #define test_pton6_bad(a) \ - tt_int_op(0, ==, tor_inet_pton(AF_INET6, a, &a1)) + tt_int_op(0, OP_EQ, tor_inet_pton(AF_INET6, a, &a1)) /** Helper: assert that a, when parsed by tor_inet_pton() and displayed * with tor_inet_ntop(), yields b. Also assert that b parses to * the same value as a. */ #define test_ntop6_reduces(a,b) STMT_BEGIN \ - tt_int_op(tor_inet_pton(AF_INET6, a, &a1), ==, 1); \ - tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), ==, b); \ - tt_int_op(tor_inet_pton(AF_INET6, b, &a2), ==, 1); \ - test_op_ip6_(&a1, ==, &a2, a, b); \ + tt_int_op(tor_inet_pton(AF_INET6, a, &a1), OP_EQ, 1); \ + tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), OP_EQ, b); \ + tt_int_op(tor_inet_pton(AF_INET6, b, &a2), OP_EQ, 1); \ + test_op_ip6_(&a1, OP_EQ, &a2, a, b); \ STMT_END /** Helper: assert that a parses by tor_inet_pton() into a address that * passes tor_addr_is_internal() with for_listening. */ #define test_internal_ip(a,for_listening) STMT_BEGIN \ - tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \ t1.family = AF_INET6; \ if (!tor_addr_is_internal(&t1, for_listening)) \ TT_DIE(("%s was not internal", a)); \ @@ -130,7 +130,7 @@ test_addr_basic(void *arg) /** Helper: assert that a parses by tor_inet_pton() into a address that * does not pass tor_addr_is_internal() with for_listening. */ #define test_external_ip(a,for_listening) STMT_BEGIN \ - tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \ t1.family = AF_INET6; \ if (tor_addr_is_internal(&t1, for_listening)) \ TT_DIE(("%s was not internal", a)); \ @@ -140,8 +140,8 @@ test_addr_basic(void *arg) * tor_inet_pton(), give addresses that compare in the order defined by * op with tor_addr_compare(). */ #define test_addr_compare(a, op, b) STMT_BEGIN \ - tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \ - tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), ==, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), OP_EQ, 1); \ t1.family = t2.family = AF_INET6; \ r = tor_addr_compare(&t1,&t2,CMP_SEMANTIC); \ if (!(r op 0)) \ @@ -152,8 +152,8 @@ test_addr_basic(void *arg) * tor_inet_pton(), give addresses that compare in the order defined by * op with tor_addr_compare_masked() with m masked. */ #define test_addr_compare_masked(a, op, b, m) STMT_BEGIN \ - tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), ==, 1); \ - tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), ==, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, a, &t1.addr.in6_addr), OP_EQ, 1); \ + tt_int_op(tor_inet_pton(AF_INET6, b, &t2.addr.in6_addr), OP_EQ, 1); \ t1.family = t2.family = AF_INET6; \ r = tor_addr_compare_masked(&t1,&t2,m,CMP_SEMANTIC); \ if (!(r op 0)) \ @@ -168,15 +168,15 @@ test_addr_basic(void *arg) #define test_addr_mask_ports_parse(xx, f, ip1, ip2, ip3, ip4, mm, pt1, pt2) \ STMT_BEGIN \ tt_int_op(tor_addr_parse_mask_ports(xx, 0, &t1, &mask, &port1, &port2), \ - ==, f); \ + OP_EQ, f); \ p1=tor_inet_ntop(AF_INET6, &t1.addr.in6_addr, bug, sizeof(bug)); \ - tt_int_op(htonl(ip1), ==, tor_addr_to_in6_addr32(&t1)[0]); \ - tt_int_op(htonl(ip2), ==, tor_addr_to_in6_addr32(&t1)[1]); \ - tt_int_op(htonl(ip3), ==, tor_addr_to_in6_addr32(&t1)[2]); \ - tt_int_op(htonl(ip4), ==, tor_addr_to_in6_addr32(&t1)[3]); \ - tt_int_op(mask, ==, mm); \ - tt_uint_op(port1, ==, pt1); \ - tt_uint_op(port2, ==, pt2); \ + tt_int_op(htonl(ip1), OP_EQ, tor_addr_to_in6_addr32(&t1)[0]); \ + tt_int_op(htonl(ip2), OP_EQ, tor_addr_to_in6_addr32(&t1)[1]); \ + tt_int_op(htonl(ip3), OP_EQ, tor_addr_to_in6_addr32(&t1)[2]); \ + tt_int_op(htonl(ip4), OP_EQ, tor_addr_to_in6_addr32(&t1)[3]); \ + tt_int_op(mask, OP_EQ, mm); \ + tt_uint_op(port1, OP_EQ, pt1); \ + tt_uint_op(port2, OP_EQ, pt2); \ STMT_END /** Run unit tests for IPv6 encoding/decoding/manipulation functions. */ @@ -202,23 +202,23 @@ test_addr_ip6_helpers(void *arg) const char *ip_ffff = "::ffff:192.168.1.2"; /* good round trip */ - tt_int_op(tor_inet_pton(AF_INET6, ip, &a1),==, 1); - tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)),==, &buf); - tt_str_op(buf,==, ip); + tt_int_op(tor_inet_pton(AF_INET6, ip, &a1),OP_EQ, 1); + tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)),OP_EQ, &buf); + tt_str_op(buf,OP_EQ, ip); /* good round trip - ::ffff:0:0 style */ - tt_int_op(tor_inet_pton(AF_INET6, ip_ffff, &a2),==, 1); - tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)),==, &buf); - tt_str_op(buf,==, ip_ffff); + tt_int_op(tor_inet_pton(AF_INET6, ip_ffff, &a2),OP_EQ, 1); + tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, sizeof(buf)),OP_EQ, &buf); + tt_str_op(buf,OP_EQ, ip_ffff); /* just long enough buffer (remember \0) */ - tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1),==, ip); - tt_str_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1),==, + tt_str_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)+1),OP_EQ, ip); + tt_str_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)+1),OP_EQ, ip_ffff); /* too short buffer (remember \0) */ - tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)),==, NULL); - tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)),==, NULL); + tt_ptr_op(tor_inet_ntop(AF_INET6, &a1, buf, strlen(ip)),OP_EQ, NULL); + tt_ptr_op(tor_inet_ntop(AF_INET6, &a2, buf, strlen(ip_ffff)),OP_EQ, NULL); } /* ==== Converting to and from sockaddr_t. */ @@ -227,16 +227,16 @@ test_addr_ip6_helpers(void *arg) sin->sin_port = htons(9090); sin->sin_addr.s_addr = htonl(0x7f7f0102); /*127.127.1.2*/ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, &port1); - tt_int_op(tor_addr_family(&t1),==, AF_INET); - tt_int_op(tor_addr_to_ipv4h(&t1),==, 0x7f7f0102); - tt_int_op(port1, ==, 9090); + tt_int_op(tor_addr_family(&t1),OP_EQ, AF_INET); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ, 0x7f7f0102); + tt_int_op(port1, OP_EQ, 9090); memset(&sa_storage, 0, sizeof(sa_storage)); - tt_int_op(sizeof(struct sockaddr_in),==, + tt_int_op(sizeof(struct sockaddr_in),OP_EQ, tor_addr_to_sockaddr(&t1, 1234, (struct sockaddr *)&sa_storage, sizeof(sa_storage))); - tt_int_op(1234,==, ntohs(sin->sin_port)); - tt_int_op(0x7f7f0102,==, ntohl(sin->sin_addr.s_addr)); + tt_int_op(1234,OP_EQ, ntohs(sin->sin_port)); + tt_int_op(0x7f7f0102,OP_EQ, ntohl(sin->sin_addr.s_addr)); memset(&sa_storage, 0, sizeof(sa_storage)); sin6 = (struct sockaddr_in6 *)&sa_storage; @@ -244,37 +244,37 @@ test_addr_ip6_helpers(void *arg) sin6->sin6_port = htons(7070); sin6->sin6_addr.s6_addr[0] = 128; tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, &port1); - tt_int_op(tor_addr_family(&t1),==, AF_INET6); - tt_int_op(port1, ==, 7070); + tt_int_op(tor_addr_family(&t1),OP_EQ, AF_INET6); + tt_int_op(port1, OP_EQ, 7070); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0); - tt_str_op(p1,==, "8000::"); + tt_str_op(p1,OP_EQ, "8000::"); memset(&sa_storage, 0, sizeof(sa_storage)); - tt_int_op(sizeof(struct sockaddr_in6),==, + tt_int_op(sizeof(struct sockaddr_in6),OP_EQ, tor_addr_to_sockaddr(&t1, 9999, (struct sockaddr *)&sa_storage, sizeof(sa_storage))); - tt_int_op(AF_INET6,==, sin6->sin6_family); - tt_int_op(9999,==, ntohs(sin6->sin6_port)); - tt_int_op(0x80000000,==, ntohl(S6_ADDR32(sin6->sin6_addr)[0])); + tt_int_op(AF_INET6,OP_EQ, sin6->sin6_family); + tt_int_op(9999,OP_EQ, ntohs(sin6->sin6_port)); + tt_int_op(0x80000000,OP_EQ, ntohl(S6_ADDR32(sin6->sin6_addr)[0])); /* ==== tor_addr_lookup: static cases. (Can't test dns without knowing we * have a good resolver. */ - tt_int_op(0,==, tor_addr_lookup("127.128.129.130", AF_UNSPEC, &t1)); - tt_int_op(AF_INET,==, tor_addr_family(&t1)); - tt_int_op(tor_addr_to_ipv4h(&t1),==, 0x7f808182); + tt_int_op(0,OP_EQ, tor_addr_lookup("127.128.129.130", AF_UNSPEC, &t1)); + tt_int_op(AF_INET,OP_EQ, tor_addr_family(&t1)); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ, 0x7f808182); - tt_int_op(0,==, tor_addr_lookup("9000::5", AF_UNSPEC, &t1)); - tt_int_op(AF_INET6,==, tor_addr_family(&t1)); - tt_int_op(0x90,==, tor_addr_to_in6_addr8(&t1)[0]); + tt_int_op(0,OP_EQ, tor_addr_lookup("9000::5", AF_UNSPEC, &t1)); + tt_int_op(AF_INET6,OP_EQ, tor_addr_family(&t1)); + tt_int_op(0x90,OP_EQ, tor_addr_to_in6_addr8(&t1)[0]); tt_assert(tor_mem_is_zero((char*)tor_addr_to_in6_addr8(&t1)+1, 14)); - tt_int_op(0x05,==, tor_addr_to_in6_addr8(&t1)[15]); + tt_int_op(0x05,OP_EQ, tor_addr_to_in6_addr8(&t1)[15]); /* === Test pton: valid af_inet6 */ /* Simple, valid parsing. */ r = tor_inet_pton(AF_INET6, "0102:0304:0506:0708:090A:0B0C:0D0E:0F10", &a1); - tt_int_op(r, ==, 1); - for (i=0;i<16;++i) { tt_int_op(i+1,==, (int)a1.s6_addr[i]); } + tt_int_op(r, OP_EQ, 1); + for (i=0;i<16;++i) { tt_int_op(i+1,OP_EQ, (int)a1.s6_addr[i]); } /* ipv4 ending. */ test_pton6_same("0102:0304:0506:0708:090A:0B0C:0D0E:0F10", "0102:0304:0506:0708:090A:0B0C:13.14.15.16"); @@ -314,7 +314,7 @@ test_addr_ip6_helpers(void *arg) "1000:1:0:7::"); /* Bad af param */ - tt_int_op(tor_inet_pton(AF_UNSPEC, 0, 0),==, -1); + tt_int_op(tor_inet_pton(AF_UNSPEC, 0, 0),OP_EQ, -1); /* === Test pton: invalid in6. */ test_pton6_bad("foobar."); @@ -410,11 +410,11 @@ test_addr_ip6_helpers(void *arg) test_external_ip("::ffff:169.255.0.0", 0); /* tor_addr_compare(tor_addr_t x2) */ - test_addr_compare("ffff::", ==, "ffff::0"); - test_addr_compare("0::3:2:1", <, "0::ffff:0.3.2.1"); - test_addr_compare("0::2:2:1", <, "0::ffff:0.3.2.1"); - test_addr_compare("0::ffff:0.3.2.1", >, "0::0:0:0"); - test_addr_compare("0::ffff:5.2.2.1", <, "::ffff:6.0.0.0"); /* XXXX wrong. */ + test_addr_compare("ffff::", OP_EQ, "ffff::0"); + test_addr_compare("0::3:2:1", OP_LT, "0::ffff:0.3.2.1"); + test_addr_compare("0::2:2:1", OP_LT, "0::ffff:0.3.2.1"); + test_addr_compare("0::ffff:0.3.2.1", OP_GT, "0::0:0:0"); + test_addr_compare("0::ffff:5.2.2.1", OP_LT, "::ffff:6.0.0.0"); /* XXXX wrong. */ tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", 0, &t1, NULL, NULL, NULL); tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL); tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0); @@ -423,119 +423,119 @@ test_addr_ip6_helpers(void *arg) tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) < 0); /* test compare_masked */ - test_addr_compare_masked("ffff::", ==, "ffff::0", 128); - test_addr_compare_masked("ffff::", ==, "ffff::0", 64); - test_addr_compare_masked("0::2:2:1", <, "0::8000:2:1", 81); - test_addr_compare_masked("0::2:2:1", ==, "0::8000:2:1", 80); + test_addr_compare_masked("ffff::", OP_EQ, "ffff::0", 128); + test_addr_compare_masked("ffff::", OP_EQ, "ffff::0", 64); + test_addr_compare_masked("0::2:2:1", OP_LT, "0::8000:2:1", 81); + test_addr_compare_masked("0::2:2:1", OP_EQ, "0::8000:2:1", 80); /* Test undecorated tor_addr_to_str */ - tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "[123:45:6789::5005:11]")); + tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "[123:45:6789::5005:11]")); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0); - tt_str_op(p1,==, "123:45:6789::5005:11"); - tt_int_op(AF_INET,==, tor_addr_parse(&t1, "18.0.0.1")); + tt_str_op(p1,OP_EQ, "123:45:6789::5005:11"); + tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "18.0.0.1")); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0); - tt_str_op(p1,==, "18.0.0.1"); + tt_str_op(p1,OP_EQ, "18.0.0.1"); /* Test decorated tor_addr_to_str */ - tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "[123:45:6789::5005:11]")); + tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "[123:45:6789::5005:11]")); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); - tt_str_op(p1,==, "[123:45:6789::5005:11]"); - tt_int_op(AF_INET,==, tor_addr_parse(&t1, "18.0.0.1")); + tt_str_op(p1,OP_EQ, "[123:45:6789::5005:11]"); + tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "18.0.0.1")); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); - tt_str_op(p1,==, "18.0.0.1"); + tt_str_op(p1,OP_EQ, "18.0.0.1"); /* Test buffer bounds checking of tor_addr_to_str */ - tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "::")); /* 2 + \0 */ - tt_ptr_op(tor_addr_to_str(buf, &t1, 2, 0),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 3, 0),==, "::"); - tt_ptr_op(tor_addr_to_str(buf, &t1, 4, 1),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 5, 1),==, "[::]"); + tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "::")); /* 2 + \0 */ + tt_ptr_op(tor_addr_to_str(buf, &t1, 2, 0),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 3, 0),OP_EQ, "::"); + tt_ptr_op(tor_addr_to_str(buf, &t1, 4, 1),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 5, 1),OP_EQ, "[::]"); - tt_int_op(AF_INET6,==, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */ - tt_ptr_op(tor_addr_to_str(buf, &t1, 10, 0),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 11, 0),==, "2000::1337"); - tt_ptr_op(tor_addr_to_str(buf, &t1, 12, 1),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 13, 1),==, "[2000::1337]"); + tt_int_op(AF_INET6,OP_EQ, tor_addr_parse(&t1, "2000::1337")); /* 10 + \0 */ + tt_ptr_op(tor_addr_to_str(buf, &t1, 10, 0),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 11, 0),OP_EQ, "2000::1337"); + tt_ptr_op(tor_addr_to_str(buf, &t1, 12, 1),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 13, 1),OP_EQ, "[2000::1337]"); - tt_int_op(AF_INET,==, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */ - tt_ptr_op(tor_addr_to_str(buf, &t1, 7, 0),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 8, 0),==, "1.2.3.4"); + tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "1.2.3.4")); /* 7 + \0 */ + tt_ptr_op(tor_addr_to_str(buf, &t1, 7, 0),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 8, 0),OP_EQ, "1.2.3.4"); - tt_int_op(AF_INET,==, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */ - tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 0),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 16, 0),==, "255.255.255.255"); - tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 1),==, NULL); /* too short buf */ - tt_str_op(tor_addr_to_str(buf, &t1, 16, 1),==, "255.255.255.255"); + tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */ + tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 0),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 16, 0),OP_EQ, "255.255.255.255"); + tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 1),OP_EQ, NULL); /* too short buf */ + tt_str_op(tor_addr_to_str(buf, &t1, 16, 1),OP_EQ, "255.255.255.255"); t1.family = AF_UNSPEC; - tt_ptr_op(tor_addr_to_str(buf, &t1, sizeof(buf), 0),==, NULL); + tt_ptr_op(tor_addr_to_str(buf, &t1, sizeof(buf), 0),OP_EQ, NULL); /* Test tor_addr_parse_PTR_name */ i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 0); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); i = tor_addr_parse_PTR_name(&t1, "9999999999999999999999999999.in-addr.arpa", AF_UNSPEC, 1); - tt_int_op(-1,==, i); + tt_int_op(-1,OP_EQ, i); i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa", AF_UNSPEC, 1); - tt_int_op(1,==, i); - tt_int_op(tor_addr_family(&t1),==, AF_INET); + tt_int_op(1,OP_EQ, i); + tt_int_op(tor_addr_family(&t1),OP_EQ, AF_INET); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); - tt_str_op(p1,==, "192.168.0.1"); + tt_str_op(p1,OP_EQ, "192.168.0.1"); i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 0); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); i = tor_addr_parse_PTR_name(&t1, "192.168.0.99", AF_UNSPEC, 1); - tt_int_op(1,==, i); + tt_int_op(1,OP_EQ, i); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); - tt_str_op(p1,==, "192.168.0.99"); + tt_str_op(p1,OP_EQ, "192.168.0.99"); memset(&t1, 0, sizeof(t1)); i = tor_addr_parse_PTR_name(&t1, "0.1.2.3.4.5.6.7.8.9.a.b.c.d.e.f." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "ip6.ARPA", AF_UNSPEC, 0); - tt_int_op(1,==, i); + tt_int_op(1,OP_EQ, i); p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 1); - tt_str_op(p1,==, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]"); + tt_str_op(p1,OP_EQ, "[9dee:effe:ebe1:beef:fedc:ba98:7654:3210]"); /* Failing cases. */ i = tor_addr_parse_PTR_name(&t1, "6.7.8.9.a.b.c.d.e.f." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "ip6.ARPA", AF_UNSPEC, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, "6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.f.0." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "ip6.ARPA", AF_UNSPEC, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, "6.7.8.9.a.b.c.d.e.f.X.0.0.0.0.9." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "ip6.ARPA", AF_UNSPEC, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, "32.1.1.in-addr.arpa", AF_UNSPEC, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, ".in-addr.arpa", AF_UNSPEC, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa", AF_UNSPEC, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, "1.2.3.4.5.in-addr.arpa", AF_INET6, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); i = tor_addr_parse_PTR_name(&t1, "6.7.8.9.a.b.c.d.e.f.a.b.c.d.e.0." "f.e.e.b.1.e.b.e.e.f.f.e.e.e.d.9." "ip6.ARPA", AF_INET, 0); - tt_int_op(i,==, -1); + tt_int_op(i,OP_EQ, -1); /* === Test tor_addr_to_PTR_name */ @@ -547,19 +547,19 @@ test_addr_ip6_helpers(void *arg) tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL); /* Check IPv4 PTR - too short buffer */ - tt_int_op(tor_addr_to_PTR_name(rbuf, 1, &t1),==, -1); + tt_int_op(tor_addr_to_PTR_name(rbuf, 1, &t1),OP_EQ, -1); tt_int_op(tor_addr_to_PTR_name(rbuf, strlen("3.2.1.127.in-addr.arpa") - 1, - &t1),==, -1); + &t1),OP_EQ, -1); /* Check IPv4 PTR - valid addr */ - tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==, + tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),OP_EQ, strlen("3.2.1.127.in-addr.arpa")); - tt_str_op(rbuf,==, "3.2.1.127.in-addr.arpa"); + tt_str_op(rbuf,OP_EQ, "3.2.1.127.in-addr.arpa"); /* Invalid addr family */ t1.family = AF_UNSPEC; - tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==, -1); + tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),OP_EQ, -1); /* Stage IPv6 addr */ memset(&sa_storage, 0, sizeof(sa_storage)); @@ -576,81 +576,81 @@ test_addr_ip6_helpers(void *arg) "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.ip6.arpa"; /* Check IPv6 PTR - too short buffer */ - tt_int_op(tor_addr_to_PTR_name(rbuf, 0, &t1),==, -1); - tt_int_op(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1),==, -1); + tt_int_op(tor_addr_to_PTR_name(rbuf, 0, &t1),OP_EQ, -1); + tt_int_op(tor_addr_to_PTR_name(rbuf, strlen(addr_PTR) - 1, &t1),OP_EQ, -1); /* Check IPv6 PTR - valid addr */ - tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),==, + tt_int_op(tor_addr_to_PTR_name(rbuf, sizeof(rbuf), &t1),OP_EQ, strlen(addr_PTR)); - tt_str_op(rbuf,==, addr_PTR); + tt_str_op(rbuf,OP_EQ, addr_PTR); } /* XXXX turn this into a separate function; it's not all IPv6. */ /* test tor_addr_parse_mask_ports */ test_addr_mask_ports_parse("[::f]/17:47-95", AF_INET6, 0, 0, 0, 0x0000000f, 17, 47, 95); - tt_str_op(p1,==, "::f"); + tt_str_op(p1,OP_EQ, "::f"); //test_addr_parse("[::fefe:4.1.1.7/120]:999-1000"); //test_addr_parse_check("::fefe:401:107", 120, 999, 1000); test_addr_mask_ports_parse("[::ffff:4.1.1.7]/120:443", AF_INET6, 0, 0, 0x0000ffff, 0x04010107, 120, 443, 443); - tt_str_op(p1,==, "::ffff:4.1.1.7"); + tt_str_op(p1,OP_EQ, "::ffff:4.1.1.7"); test_addr_mask_ports_parse("[abcd:2::44a:0]:2-65000", AF_INET6, 0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000); - tt_str_op(p1,==, "abcd:2::44a:0"); + tt_str_op(p1,OP_EQ, "abcd:2::44a:0"); /* Try some long addresses. */ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111]", 0, &t1, NULL, NULL, NULL); tt_assert(r == AF_INET6); r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:11111]", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111:1]", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports( "[ffff:1111:1111:1111:1111:1111:1111:ffff:" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:" "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Try some failing cases. */ r=tor_addr_parse_mask_ports("[fefef::]/112", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[fefe::/112", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[fefe::", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[fefe::X]", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("efef::/112", 0, &t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]",0,&t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/fred",0,&t1,&mask, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/255.255.0.0", 0,&t1, NULL, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* This one will get rejected because it isn't a pure prefix. */ r=tor_addr_parse_mask_ports("1.1.2.3/255.255.64.0",0,&t1, &mask,NULL,NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Test for V4-mapped address with mask < 96. (arguably not valid) */ r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]",0,&t1, &mask, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("1.1.2.2/33",0,&t1, &mask, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Try extended wildcard addresses with out TAPMP_EXTENDED_STAR*/ r=tor_addr_parse_mask_ports("*4",0,&t1, &mask, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); #if 0 /* Try a mask with a wildcard. */ r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL); @@ -665,57 +665,57 @@ test_addr_ip6_helpers(void *arg) /* Basic mask tests*/ r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL); tt_assert(r == AF_INET); - tt_int_op(mask,==,31); - tt_int_op(tor_addr_family(&t1),==,AF_INET); - tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010202); + tt_int_op(mask,OP_EQ,31); + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0x01010202); r=tor_addr_parse_mask_ports("3.4.16.032:1-2",0,&t1, &mask, &port1, &port2); tt_assert(r == AF_INET); - tt_int_op(mask,==,32); - tt_int_op(tor_addr_family(&t1),==,AF_INET); - tt_int_op(tor_addr_to_ipv4h(&t1),==,0x03041020); + tt_int_op(mask,OP_EQ,32); + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0x03041020); tt_assert(port1 == 1); tt_assert(port2 == 2); r=tor_addr_parse_mask_ports("1.1.2.3/255.255.128.0",0,&t1, &mask,NULL,NULL); tt_assert(r == AF_INET); - tt_int_op(mask,==,17); - tt_int_op(tor_addr_family(&t1),==,AF_INET); - tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010203); + tt_int_op(mask,OP_EQ,17); + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0x01010203); r=tor_addr_parse_mask_ports("[efef::]/112",0,&t1, &mask, &port1, &port2); tt_assert(r == AF_INET6); tt_assert(port1 == 1); tt_assert(port2 == 65535); /* Try regular wildcard behavior without TAPMP_EXTENDED_STAR */ r=tor_addr_parse_mask_ports("*:80-443",0,&t1,&mask,&port1,&port2); - tt_int_op(r,==,AF_INET); /* Old users of this always get inet */ - tt_int_op(tor_addr_family(&t1),==,AF_INET); - tt_int_op(tor_addr_to_ipv4h(&t1),==,0); - tt_int_op(mask,==,0); - tt_int_op(port1,==,80); - tt_int_op(port2,==,443); + tt_int_op(r,OP_EQ,AF_INET); /* Old users of this always get inet */ + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0); + tt_int_op(mask,OP_EQ,0); + tt_int_op(port1,OP_EQ,80); + tt_int_op(port2,OP_EQ,443); /* Now try wildcards *with* TAPMP_EXTENDED_STAR */ r=tor_addr_parse_mask_ports("*:8000-9000",TAPMP_EXTENDED_STAR, &t1,&mask,&port1,&port2); - tt_int_op(r,==,AF_UNSPEC); - tt_int_op(tor_addr_family(&t1),==,AF_UNSPEC); - tt_int_op(mask,==,0); - tt_int_op(port1,==,8000); - tt_int_op(port2,==,9000); + tt_int_op(r,OP_EQ,AF_UNSPEC); + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_UNSPEC); + tt_int_op(mask,OP_EQ,0); + tt_int_op(port1,OP_EQ,8000); + tt_int_op(port2,OP_EQ,9000); r=tor_addr_parse_mask_ports("*4:6667",TAPMP_EXTENDED_STAR, &t1,&mask,&port1,&port2); - tt_int_op(r,==,AF_INET); - tt_int_op(tor_addr_family(&t1),==,AF_INET); - tt_int_op(tor_addr_to_ipv4h(&t1),==,0); - tt_int_op(mask,==,0); - tt_int_op(port1,==,6667); - tt_int_op(port2,==,6667); + tt_int_op(r,OP_EQ,AF_INET); + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET); + tt_int_op(tor_addr_to_ipv4h(&t1),OP_EQ,0); + tt_int_op(mask,OP_EQ,0); + tt_int_op(port1,OP_EQ,6667); + tt_int_op(port2,OP_EQ,6667); r=tor_addr_parse_mask_ports("*6",TAPMP_EXTENDED_STAR, &t1,&mask,&port1,&port2); - tt_int_op(r,==,AF_INET6); - tt_int_op(tor_addr_family(&t1),==,AF_INET6); + tt_int_op(r,OP_EQ,AF_INET6); + tt_int_op(tor_addr_family(&t1),OP_EQ,AF_INET6); tt_assert(tor_mem_is_zero((const char*)tor_addr_to_in6_addr32(&t1), 16)); - tt_int_op(mask,==,0); - tt_int_op(port1,==,1); - tt_int_op(port2,==,65535); + tt_int_op(mask,OP_EQ,0); + tt_int_op(port1,OP_EQ,1); + tt_int_op(port2,OP_EQ,65535); /* make sure inet address lengths >= max */ tt_assert(INET_NTOA_BUF_LEN >= sizeof("255.255.255.255")); @@ -751,87 +751,87 @@ test_addr_parse(void *arg) r= tor_addr_port_parse(LOG_DEBUG, "192.0.2.1:1234", &addr, &port, -1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); tor_addr_to_str(buf, &addr, sizeof(buf), 0); - tt_str_op(buf,==, "192.0.2.1"); - tt_int_op(port,==, 1234); + tt_str_op(buf,OP_EQ, "192.0.2.1"); + tt_int_op(port,OP_EQ, 1234); r= tor_addr_port_parse(LOG_DEBUG, "[::1]:1234", &addr, &port, -1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); tor_addr_to_str(buf, &addr, sizeof(buf), 0); - tt_str_op(buf,==, "::1"); - tt_int_op(port,==, 1234); + tt_str_op(buf,OP_EQ, "::1"); + tt_int_op(port,OP_EQ, 1234); /* Domain name. */ r= tor_addr_port_parse(LOG_DEBUG, "torproject.org:1234", &addr, &port, -1); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Only IP. */ r= tor_addr_port_parse(LOG_DEBUG, "192.0.2.2", &addr, &port, -1); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r= tor_addr_port_parse(LOG_DEBUG, "192.0.2.2", &addr, &port, 200); - tt_int_op(r, ==, 0); - tt_int_op(port,==,200); + tt_int_op(r, OP_EQ, 0); + tt_int_op(port,OP_EQ,200); r= tor_addr_port_parse(LOG_DEBUG, "[::1]", &addr, &port, -1); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r= tor_addr_port_parse(LOG_DEBUG, "[::1]", &addr, &port, 400); - tt_int_op(r, ==, 0); - tt_int_op(port,==,400); + tt_int_op(r, OP_EQ, 0); + tt_int_op(port,OP_EQ,400); /* Bad port. */ r= tor_addr_port_parse(LOG_DEBUG, "192.0.2.2:66666", &addr, &port, -1); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r= tor_addr_port_parse(LOG_DEBUG, "192.0.2.2:66666", &addr, &port, 200); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Only domain name */ r= tor_addr_port_parse(LOG_DEBUG, "torproject.org", &addr, &port, -1); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); r= tor_addr_port_parse(LOG_DEBUG, "torproject.org", &addr, &port, 200); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Bad IP address */ r= tor_addr_port_parse(LOG_DEBUG, "192.0.2:1234", &addr, &port, -1); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Make sure that the default port has lower priority than the real one */ r= tor_addr_port_parse(LOG_DEBUG, "192.0.2.2:1337", &addr, &port, 200); - tt_int_op(r, ==, 0); - tt_int_op(port,==,1337); + tt_int_op(r, OP_EQ, 0); + tt_int_op(port,OP_EQ,1337); r= tor_addr_port_parse(LOG_DEBUG, "[::1]:1369", &addr, &port, 200); - tt_int_op(r, ==, 0); - tt_int_op(port,==,1369); + tt_int_op(r, OP_EQ, 0); + tt_int_op(port,OP_EQ,1369); done: ; @@ -886,7 +886,7 @@ test_virtaddrmap(void *data) get_random_virtual_addr(&cfg[ipv6], &a); //printf("%s\n", fmt_addr(&a)); /* Make sure that the first b bits match the configured network */ - tt_int_op(0, ==, tor_addr_compare_masked(&a, &cfg[ipv6].addr, + tt_int_op(0, OP_EQ, tor_addr_compare_masked(&a, &cfg[ipv6].addr, bits, CMP_EXACT)); /* And track which bits have been different between pairs of @@ -930,7 +930,7 @@ test_addr_dup_ip(void *arg) (void)arg; #define CHECK(ip, s) do { \ v = tor_dup_ip(ip); \ - tt_str_op(v,==,(s)); \ + tt_str_op(v,OP_EQ,(s)); \ tor_free(v); \ } while (0) @@ -956,7 +956,7 @@ test_addr_sockaddr_to_str(void *arg) #endif #define CHECK(sa, s) do { \ v = tor_sockaddr_to_str((const struct sockaddr*) &(sa)); \ - tt_str_op(v,==,(s)); \ + tt_str_op(v,OP_EQ,(s)); \ tor_free(v); \ } while (0) (void)arg; @@ -1013,12 +1013,12 @@ test_addr_is_loopback(void *data) (void)data; for (i=0; loopback_items[i].name; ++i) { - tt_int_op(tor_addr_parse(&addr, loopback_items[i].name), >=, 0); - tt_int_op(tor_addr_is_loopback(&addr), ==, loopback_items[i].is_loopback); + tt_int_op(tor_addr_parse(&addr, loopback_items[i].name), OP_GE, 0); + tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, loopback_items[i].is_loopback); } tor_addr_make_unspec(&addr); - tt_int_op(tor_addr_is_loopback(&addr), ==, 0); + tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, 0); done: ; @@ -1033,18 +1033,18 @@ test_addr_make_null(void *data) (void) data; /* Ensure that before tor_addr_make_null, addr != 0's */ memset(addr, 1, sizeof(*addr)); - tt_int_op(memcmp(addr, zeros, sizeof(*addr)), !=, 0); + tt_int_op(memcmp(addr, zeros, sizeof(*addr)), OP_NE, 0); /* Test with AF == AF_INET */ zeros->family = AF_INET; tor_addr_make_null(addr, AF_INET); - tt_int_op(memcmp(addr, zeros, sizeof(*addr)), ==, 0); - tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), ==, "0.0.0.0"); + tt_int_op(memcmp(addr, zeros, sizeof(*addr)), OP_EQ, 0); + tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), OP_EQ, "0.0.0.0"); /* Test with AF == AF_INET6 */ memset(addr, 1, sizeof(*addr)); zeros->family = AF_INET6; tor_addr_make_null(addr, AF_INET6); - tt_int_op(memcmp(addr, zeros, sizeof(*addr)), ==, 0); - tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), ==, "::"); + tt_int_op(memcmp(addr, zeros, sizeof(*addr)), OP_EQ, 0); + tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), OP_EQ, "::"); done: tor_free(addr); tor_free(zeros); diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c index cea719077c..7e42124a1c 100644 --- a/src/test/test_buffers.c +++ b/src/test/test_buffers.c @@ -30,7 +30,7 @@ test_buffers_basic(void *arg) TT_DIE(("Assertion failed.")); //test_eq(buf_capacity(buf), 4096); - tt_int_op(buf_datalen(buf),==, 0); + tt_int_op(buf_datalen(buf),OP_EQ, 0); /**** * General pointer frobbing @@ -40,16 +40,16 @@ test_buffers_basic(void *arg) } write_to_buf(str, 256, buf); write_to_buf(str, 256, buf); - tt_int_op(buf_datalen(buf),==, 512); + tt_int_op(buf_datalen(buf),OP_EQ, 512); fetch_from_buf(str2, 200, buf); - tt_mem_op(str,==, str2, 200); - tt_int_op(buf_datalen(buf),==, 312); + tt_mem_op(str,OP_EQ, str2, 200); + tt_int_op(buf_datalen(buf),OP_EQ, 312); memset(str2, 0, sizeof(str2)); fetch_from_buf(str2, 256, buf); - tt_mem_op(str+200,==, str2, 56); - tt_mem_op(str,==, str2+56, 200); - tt_int_op(buf_datalen(buf),==, 56); + tt_mem_op(str+200,OP_EQ, str2, 56); + tt_mem_op(str,OP_EQ, str2+56, 200); + tt_int_op(buf_datalen(buf),OP_EQ, 56); memset(str2, 0, sizeof(str2)); /* Okay, now we should be 512 bytes into the 4096-byte buffer. If we add * another 3584 bytes, we hit the end. */ @@ -57,16 +57,16 @@ test_buffers_basic(void *arg) write_to_buf(str, 256, buf); } assert_buf_ok(buf); - tt_int_op(buf_datalen(buf),==, 3896); + tt_int_op(buf_datalen(buf),OP_EQ, 3896); fetch_from_buf(str2, 56, buf); - tt_int_op(buf_datalen(buf),==, 3840); - tt_mem_op(str+200,==, str2, 56); + tt_int_op(buf_datalen(buf),OP_EQ, 3840); + tt_mem_op(str+200,OP_EQ, str2, 56); for (j=0;j<15;++j) { memset(str2, 0, sizeof(str2)); fetch_from_buf(str2, 256, buf); - tt_mem_op(str,==, str2, 256); + tt_mem_op(str,OP_EQ, str2, 256); } - tt_int_op(buf_datalen(buf),==, 0); + tt_int_op(buf_datalen(buf),OP_EQ, 0); buf_free(buf); buf = NULL; @@ -76,7 +76,7 @@ test_buffers_basic(void *arg) write_to_buf(str+1, 255, buf); //test_eq(buf_capacity(buf), 256); fetch_from_buf(str2, 254, buf); - tt_mem_op(str+1,==, str2, 254); + tt_mem_op(str+1,OP_EQ, str2, 254); //test_eq(buf_capacity(buf), 256); assert_buf_ok(buf); write_to_buf(str, 32, buf); @@ -85,15 +85,15 @@ test_buffers_basic(void *arg) write_to_buf(str, 256, buf); assert_buf_ok(buf); //test_eq(buf_capacity(buf), 512); - tt_int_op(buf_datalen(buf),==, 33+256); + tt_int_op(buf_datalen(buf),OP_EQ, 33+256); fetch_from_buf(str2, 33, buf); - tt_int_op(*str2,==, str[255]); + tt_int_op(*str2,OP_EQ, str[255]); - tt_mem_op(str2+1,==, str, 32); + tt_mem_op(str2+1,OP_EQ, str, 32); //test_eq(buf_capacity(buf), 512); - tt_int_op(buf_datalen(buf),==, 256); + tt_int_op(buf_datalen(buf),OP_EQ, 256); fetch_from_buf(str2, 256, buf); - tt_mem_op(str,==, str2, 256); + tt_mem_op(str,OP_EQ, str2, 256); /* now try shrinking: case 1. */ buf_free(buf); @@ -102,10 +102,10 @@ test_buffers_basic(void *arg) write_to_buf(str,255, buf); } //test_eq(buf_capacity(buf), 33668); - tt_int_op(buf_datalen(buf),==, 17085); + tt_int_op(buf_datalen(buf),OP_EQ, 17085); for (j=0; j < 40; ++j) { fetch_from_buf(str2, 255,buf); - tt_mem_op(str2,==, str, 255); + tt_mem_op(str2,OP_EQ, str, 255); } /* now try shrinking: case 2. */ @@ -116,7 +116,7 @@ test_buffers_basic(void *arg) } for (j=0; j < 20; ++j) { fetch_from_buf(str2, 255,buf); - tt_mem_op(str2,==, str, 255); + tt_mem_op(str2,OP_EQ, str, 255); } for (j=0;j<80;++j) { write_to_buf(str,255, buf); @@ -124,7 +124,7 @@ test_buffers_basic(void *arg) //test_eq(buf_capacity(buf),33668); for (j=0; j < 120; ++j) { fetch_from_buf(str2, 255,buf); - tt_mem_op(str2,==, str, 255); + tt_mem_op(str2,OP_EQ, str, 255); } /* Move from buf to buf. */ @@ -133,27 +133,27 @@ test_buffers_basic(void *arg) buf2 = buf_new_with_capacity(4096); for (j=0;j<100;++j) write_to_buf(str, 255, buf); - tt_int_op(buf_datalen(buf),==, 25500); + tt_int_op(buf_datalen(buf),OP_EQ, 25500); for (j=0;j<100;++j) { r = 10; move_buf_to_buf(buf2, buf, &r); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); } - tt_int_op(buf_datalen(buf),==, 24500); - tt_int_op(buf_datalen(buf2),==, 1000); + tt_int_op(buf_datalen(buf),OP_EQ, 24500); + tt_int_op(buf_datalen(buf2),OP_EQ, 1000); for (j=0;j<3;++j) { fetch_from_buf(str2, 255, buf2); - tt_mem_op(str2,==, str, 255); + tt_mem_op(str2,OP_EQ, str, 255); } r = 8192; /*big move*/ move_buf_to_buf(buf2, buf, &r); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = 30000; /* incomplete move */ move_buf_to_buf(buf2, buf, &r); - tt_int_op(r,==, 13692); + tt_int_op(r,OP_EQ, 13692); for (j=0;j<97;++j) { fetch_from_buf(str2, 255, buf2); - tt_mem_op(str2,==, str, 255); + tt_mem_op(str2,OP_EQ, str, 255); } buf_free(buf); buf_free(buf2); @@ -163,16 +163,16 @@ test_buffers_basic(void *arg) cp = "Testing. This is a moderately long Testing string."; for (j = 0; cp[j]; j++) write_to_buf(cp+j, 1, buf); - tt_int_op(0,==, buf_find_string_offset(buf, "Testing", 7)); - tt_int_op(1,==, buf_find_string_offset(buf, "esting", 6)); - tt_int_op(1,==, buf_find_string_offset(buf, "est", 3)); - tt_int_op(39,==, buf_find_string_offset(buf, "ing str", 7)); - tt_int_op(35,==, buf_find_string_offset(buf, "Testing str", 11)); - tt_int_op(32,==, buf_find_string_offset(buf, "ng ", 3)); - tt_int_op(43,==, buf_find_string_offset(buf, "string.", 7)); - tt_int_op(-1,==, buf_find_string_offset(buf, "shrdlu", 6)); - tt_int_op(-1,==, buf_find_string_offset(buf, "Testing thing", 13)); - tt_int_op(-1,==, buf_find_string_offset(buf, "ngx", 3)); + tt_int_op(0,OP_EQ, buf_find_string_offset(buf, "Testing", 7)); + tt_int_op(1,OP_EQ, buf_find_string_offset(buf, "esting", 6)); + tt_int_op(1,OP_EQ, buf_find_string_offset(buf, "est", 3)); + tt_int_op(39,OP_EQ, buf_find_string_offset(buf, "ing str", 7)); + tt_int_op(35,OP_EQ, buf_find_string_offset(buf, "Testing str", 11)); + tt_int_op(32,OP_EQ, buf_find_string_offset(buf, "ng ", 3)); + tt_int_op(43,OP_EQ, buf_find_string_offset(buf, "string.", 7)); + tt_int_op(-1,OP_EQ, buf_find_string_offset(buf, "shrdlu", 6)); + tt_int_op(-1,OP_EQ, buf_find_string_offset(buf, "Testing thing", 13)); + tt_int_op(-1,OP_EQ, buf_find_string_offset(buf, "ngx", 3)); buf_free(buf); buf = NULL; @@ -183,7 +183,7 @@ test_buffers_basic(void *arg) write_to_buf(cp, 65536, buf); tor_free(cp); - tt_int_op(buf_datalen(buf), ==, 65536); + tt_int_op(buf_datalen(buf), OP_EQ, 65536); buf_free(buf); buf = NULL; } @@ -213,19 +213,19 @@ test_buffer_pullup(void *arg) buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */ tt_assert(buf); - tt_int_op(buf_get_default_chunk_size(buf), ==, 4096); + tt_int_op(buf_get_default_chunk_size(buf), OP_EQ, 4096); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); /* There are a bunch of cases for pullup. One is the trivial case. Let's mess around with an empty buffer. */ buf_pullup(buf, 16, 1); buf_get_first_chunk_data(buf, &cp, &sz); - tt_ptr_op(cp, ==, NULL); - tt_uint_op(sz, ==, 0); + tt_ptr_op(cp, OP_EQ, NULL); + tt_uint_op(sz, OP_EQ, 0); /* Let's make sure nothing got allocated */ - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); /* Case 1: everything puts into the first chunk with some moving. */ @@ -234,22 +234,22 @@ test_buffer_pullup(void *arg) write_to_buf(stuff, 3000, buf); write_to_buf(stuff+3000, 3000, buf); buf_get_first_chunk_data(buf, &cp, &sz); - tt_ptr_op(cp, !=, NULL); - tt_int_op(sz, <=, 4096); + tt_ptr_op(cp, OP_NE, NULL); + tt_int_op(sz, OP_LE, 4096); /* Make room for 3000 bytes in the first chunk, so that the pullup-move code * can get tested. */ - tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 3000); - tt_mem_op(tmp,==, stuff, 3000); + tt_int_op(fetch_from_buf(tmp, 3000, buf), OP_EQ, 3000); + tt_mem_op(tmp,OP_EQ, stuff, 3000); buf_pullup(buf, 2048, 0); assert_buf_ok(buf); buf_get_first_chunk_data(buf, &cp, &sz); - tt_ptr_op(cp, !=, NULL); - tt_int_op(sz, >=, 2048); - tt_mem_op(cp,==, stuff+3000, 2048); - tt_int_op(3000, ==, buf_datalen(buf)); - tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 0); - tt_mem_op(tmp,==, stuff+3000, 2048); + tt_ptr_op(cp, OP_NE, NULL); + tt_int_op(sz, OP_GE, 2048); + tt_mem_op(cp,OP_EQ, stuff+3000, 2048); + tt_int_op(3000, OP_EQ, buf_datalen(buf)); + tt_int_op(fetch_from_buf(tmp, 3000, buf), OP_EQ, 0); + tt_mem_op(tmp,OP_EQ, stuff+3000, 2048); buf_free(buf); @@ -259,26 +259,26 @@ test_buffer_pullup(void *arg) write_to_buf(stuff+4000, 4000, buf); write_to_buf(stuff+8000, 4000, buf); write_to_buf(stuff+12000, 4000, buf); - tt_int_op(buf_datalen(buf), ==, 16000); + tt_int_op(buf_datalen(buf), OP_EQ, 16000); buf_get_first_chunk_data(buf, &cp, &sz); - tt_ptr_op(cp, !=, NULL); - tt_int_op(sz, <=, 4096); + tt_ptr_op(cp, OP_NE, NULL); + tt_int_op(sz, OP_LE, 4096); buf_pullup(buf, 12500, 0); assert_buf_ok(buf); buf_get_first_chunk_data(buf, &cp, &sz); - tt_ptr_op(cp, !=, NULL); - tt_int_op(sz, >=, 12500); - tt_mem_op(cp,==, stuff, 12500); - tt_int_op(buf_datalen(buf), ==, 16000); + tt_ptr_op(cp, OP_NE, NULL); + tt_int_op(sz, OP_GE, 12500); + tt_mem_op(cp,OP_EQ, stuff, 12500); + tt_int_op(buf_datalen(buf), OP_EQ, 16000); fetch_from_buf(tmp, 12400, buf); - tt_mem_op(tmp,==, stuff, 12400); - tt_int_op(buf_datalen(buf), ==, 3600); + tt_mem_op(tmp,OP_EQ, stuff, 12400); + tt_int_op(buf_datalen(buf), OP_EQ, 3600); fetch_from_buf(tmp, 3500, buf); - tt_mem_op(tmp,==, stuff+12400, 3500); + tt_mem_op(tmp,OP_EQ, stuff+12400, 3500); fetch_from_buf(tmp, 100, buf); - tt_mem_op(tmp,==, stuff+15900, 10); + tt_mem_op(tmp,OP_EQ, stuff+15900, 10); buf_free(buf); @@ -290,16 +290,16 @@ test_buffer_pullup(void *arg) buf_pullup(buf, 16000, 0); /* Way too much. */ assert_buf_ok(buf); buf_get_first_chunk_data(buf, &cp, &sz); - tt_ptr_op(cp, !=, NULL); - tt_int_op(sz, ==, 7900); - tt_mem_op(cp,==, stuff+100, 7900); + tt_ptr_op(cp, OP_NE, NULL); + tt_int_op(sz, OP_EQ, 7900); + tt_mem_op(cp,OP_EQ, stuff+100, 7900); buf_free(buf); buf = NULL; buf_shrink_freelists(1); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); done: buf_free(buf); buf_shrink_freelists(1); @@ -321,31 +321,31 @@ test_buffer_copy(void *arg) tt_assert(buf); /* Copy an empty buffer. */ - tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf)); + tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf)); tt_assert(buf2); - tt_int_op(0, ==, generic_buffer_len(buf2)); + tt_int_op(0, OP_EQ, generic_buffer_len(buf2)); /* Now try with a short buffer. */ s = "And now comes an act of enormous enormance!"; len = strlen(s); generic_buffer_add(buf, s, len); - tt_int_op(len, ==, generic_buffer_len(buf)); + tt_int_op(len, OP_EQ, generic_buffer_len(buf)); /* Add junk to buf2 so we can test replacing.*/ generic_buffer_add(buf2, "BLARG", 5); - tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf)); - tt_int_op(len, ==, generic_buffer_len(buf2)); + tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf)); + tt_int_op(len, OP_EQ, generic_buffer_len(buf2)); generic_buffer_get(buf2, b, len); - tt_mem_op(b, ==, s, len); + tt_mem_op(b, OP_EQ, s, len); /* Now free buf2 and retry so we can test allocating */ generic_buffer_free(buf2); buf2 = NULL; - tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf)); - tt_int_op(len, ==, generic_buffer_len(buf2)); + tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf)); + tt_int_op(len, OP_EQ, generic_buffer_len(buf2)); generic_buffer_get(buf2, b, len); - tt_mem_op(b, ==, s, len); + tt_mem_op(b, OP_EQ, s, len); /* Clear buf for next test */ generic_buffer_get(buf, b, len); - tt_int_op(generic_buffer_len(buf),==,0); + tt_int_op(generic_buffer_len(buf),OP_EQ,0); /* Okay, now let's try a bigger buffer. */ s = "Quis autem vel eum iure reprehenderit qui in ea voluptate velit " @@ -357,12 +357,12 @@ test_buffer_copy(void *arg) generic_buffer_add(buf, b, 1); generic_buffer_add(buf, s, len); } - tt_int_op(0, ==, generic_buffer_set_to_copy(&buf2, buf)); - tt_int_op(generic_buffer_len(buf2), ==, generic_buffer_len(buf)); + tt_int_op(0, OP_EQ, generic_buffer_set_to_copy(&buf2, buf)); + tt_int_op(generic_buffer_len(buf2), OP_EQ, generic_buffer_len(buf)); for (i = 0; i < 256; ++i) { generic_buffer_get(buf2, b, len+1); - tt_int_op((unsigned char)b[0],==,i); - tt_mem_op(b+1, ==, s, len); + tt_int_op((unsigned char)b[0],OP_EQ,i); + tt_mem_op(b+1, OP_EQ, s, len); } done: @@ -382,62 +382,62 @@ test_buffer_ext_or_cmd(void *arg) (void) arg; /* Empty -- should give "not there. */ - tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, ==, cmd); + tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_EQ, cmd); /* Three bytes: shouldn't work. */ generic_buffer_add(buf, "\x00\x20\x00", 3); - tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, ==, cmd); - tt_int_op(3, ==, generic_buffer_len(buf)); + tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_EQ, cmd); + tt_int_op(3, OP_EQ, generic_buffer_len(buf)); /* 0020 0000: That's a nil command. It should work. */ generic_buffer_add(buf, "\x00", 1); - tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, !=, cmd); - tt_int_op(0x20, ==, cmd->cmd); - tt_int_op(0, ==, cmd->len); - tt_int_op(0, ==, generic_buffer_len(buf)); + tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_NE, cmd); + tt_int_op(0x20, OP_EQ, cmd->cmd); + tt_int_op(0, OP_EQ, cmd->len); + tt_int_op(0, OP_EQ, generic_buffer_len(buf)); ext_or_cmd_free(cmd); cmd = NULL; /* Now try a length-6 command with one byte missing. */ generic_buffer_add(buf, "\x10\x21\x00\x06""abcde", 9); - tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, ==, cmd); + tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_EQ, cmd); generic_buffer_add(buf, "f", 1); - tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, !=, cmd); - tt_int_op(0x1021, ==, cmd->cmd); - tt_int_op(6, ==, cmd->len); - tt_mem_op("abcdef", ==, cmd->body, 6); - tt_int_op(0, ==, generic_buffer_len(buf)); + tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_NE, cmd); + tt_int_op(0x1021, OP_EQ, cmd->cmd); + tt_int_op(6, OP_EQ, cmd->len); + tt_mem_op("abcdef", OP_EQ, cmd->body, 6); + tt_int_op(0, OP_EQ, generic_buffer_len(buf)); ext_or_cmd_free(cmd); cmd = NULL; /* Now try a length-10 command with 4 extra bytes. */ generic_buffer_add(buf, "\xff\xff\x00\x0a" "loremipsum\x10\x00\xff\xff", 18); - tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, !=, cmd); - tt_int_op(0xffff, ==, cmd->cmd); - tt_int_op(10, ==, cmd->len); - tt_mem_op("loremipsum", ==, cmd->body, 10); - tt_int_op(4, ==, generic_buffer_len(buf)); + tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_NE, cmd); + tt_int_op(0xffff, OP_EQ, cmd->cmd); + tt_int_op(10, OP_EQ, cmd->len); + tt_mem_op("loremipsum", OP_EQ, cmd->body, 10); + tt_int_op(4, OP_EQ, generic_buffer_len(buf)); ext_or_cmd_free(cmd); cmd = NULL; /* Finally, let's try a maximum-length command. We already have the header * waiting. */ - tt_int_op(0, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_int_op(0, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); tmp = tor_malloc_zero(65535); generic_buffer_add(buf, tmp, 65535); - tt_int_op(1, ==, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); - tt_ptr_op(NULL, !=, cmd); - tt_int_op(0x1000, ==, cmd->cmd); - tt_int_op(0xffff, ==, cmd->len); - tt_mem_op(tmp, ==, cmd->body, 65535); - tt_int_op(0, ==, generic_buffer_len(buf)); + tt_int_op(1, OP_EQ, generic_buffer_fetch_ext_or_cmd(buf, &cmd)); + tt_ptr_op(NULL, OP_NE, cmd); + tt_int_op(0x1000, OP_EQ, cmd->cmd); + tt_int_op(0xffff, OP_EQ, cmd->len); + tt_mem_op(tmp, OP_EQ, cmd->body, 65535); + tt_int_op(0, OP_EQ, generic_buffer_len(buf)); ext_or_cmd_free(cmd); cmd = NULL; @@ -458,65 +458,65 @@ test_buffer_allocation_tracking(void *arg) (void)arg; crypto_rand(junk, 16384); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); buf1 = buf_new(); tt_assert(buf1); buf2 = buf_new(); tt_assert(buf2); - tt_int_op(buf_allocation(buf1), ==, 0); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(buf_allocation(buf1), OP_EQ, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); write_to_buf(junk, 4000, buf1); write_to_buf(junk, 4000, buf1); write_to_buf(junk, 4000, buf1); write_to_buf(junk, 4000, buf1); - tt_int_op(buf_allocation(buf1), ==, 16384); + tt_int_op(buf_allocation(buf1), OP_EQ, 16384); fetch_from_buf(junk, 100, buf1); - tt_int_op(buf_allocation(buf1), ==, 16384); /* still 4 4k chunks */ + tt_int_op(buf_allocation(buf1), OP_EQ, 16384); /* still 4 4k chunks */ - tt_int_op(buf_get_total_allocation(), ==, 16384); + tt_int_op(buf_get_total_allocation(), OP_EQ, 16384); fetch_from_buf(junk, 4096, buf1); /* drop a 1k chunk... */ - tt_int_op(buf_allocation(buf1), ==, 3*4096); /* now 3 4k chunks */ + tt_int_op(buf_allocation(buf1), OP_EQ, 3*4096); /* now 3 4k chunks */ #ifdef ENABLE_BUF_FREELISTS - tt_int_op(buf_get_total_allocation(), ==, 16384); /* that chunk went onto + tt_int_op(buf_get_total_allocation(), OP_EQ, 16384); /* that chunk went onto the freelist. */ #else - tt_int_op(buf_get_total_allocation(), ==, 12288); /* that chunk was really + tt_int_op(buf_get_total_allocation(), OP_EQ, 12288); /* that chunk was really freed. */ #endif write_to_buf(junk, 4000, buf2); - tt_int_op(buf_allocation(buf2), ==, 4096); /* another 4k chunk. */ + tt_int_op(buf_allocation(buf2), OP_EQ, 4096); /* another 4k chunk. */ /* * If we're using freelists, size stays at 16384 because we just pulled a * chunk from the freelist. If we aren't, we bounce back up to 16384 by * allocating a new chunk. */ - tt_int_op(buf_get_total_allocation(), ==, 16384); + tt_int_op(buf_get_total_allocation(), OP_EQ, 16384); write_to_buf(junk, 4000, buf2); - tt_int_op(buf_allocation(buf2), ==, 8192); /* another 4k chunk. */ - tt_int_op(buf_get_total_allocation(), ==, 5*4096); /* that chunk was new. */ + tt_int_op(buf_allocation(buf2), OP_EQ, 8192); /* another 4k chunk. */ + tt_int_op(buf_get_total_allocation(), OP_EQ, 5*4096); /* that chunk was new. */ /* Make a really huge buffer */ for (i = 0; i < 1000; ++i) { write_to_buf(junk, 4000, buf2); } - tt_int_op(buf_allocation(buf2), >=, 4008000); - tt_int_op(buf_get_total_allocation(), >=, 4008000); + tt_int_op(buf_allocation(buf2), OP_GE, 4008000); + tt_int_op(buf_get_total_allocation(), OP_GE, 4008000); buf_free(buf2); buf2 = NULL; - tt_int_op(buf_get_total_allocation(), <, 4008000); + tt_int_op(buf_get_total_allocation(), OP_LT, 4008000); buf_shrink_freelists(1); - tt_int_op(buf_get_total_allocation(), ==, buf_allocation(buf1)); + tt_int_op(buf_get_total_allocation(), OP_EQ, buf_allocation(buf1)); buf_free(buf1); buf1 = NULL; buf_shrink_freelists(1); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); done: buf_free(buf1); @@ -545,37 +545,37 @@ test_buffer_time_tracking(void *arg) tt_assert(buf); /* Empty buffer means the timestamp is 0. */ - tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC)); - tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000)); + tt_int_op(0, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC)); + tt_int_op(0, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000)); tor_gettimeofday_cache_set(&tv0); write_to_buf("ABCDEFG", 7, buf); - tt_int_op(1000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000)); + tt_int_op(1000, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000)); buf2 = buf_copy(buf); tt_assert(buf2); - tt_int_op(1234, ==, buf_get_oldest_chunk_timestamp(buf2, START_MSEC+1234)); + tt_int_op(1234, OP_EQ, buf_get_oldest_chunk_timestamp(buf2, START_MSEC+1234)); /* Now add more bytes; enough to overflow the first chunk. */ tv0.tv_usec += 123 * 1000; tor_gettimeofday_cache_set(&tv0); for (i = 0; i < 600; ++i) write_to_buf("ABCDEFG", 7, buf); - tt_int_op(4207, ==, buf_datalen(buf)); + tt_int_op(4207, OP_EQ, buf_datalen(buf)); /* The oldest bytes are still in the front. */ - tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000)); + tt_int_op(2000, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000)); /* Once those bytes are dropped, the chunk is still on the first * timestamp. */ fetch_from_buf(tmp, 100, buf); - tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000)); + tt_int_op(2000, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000)); /* But once we discard the whole first chunk, we get the data in the second * chunk. */ fetch_from_buf(tmp, 4000, buf); - tt_int_op(107, ==, buf_datalen(buf)); - tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123)); + tt_int_op(107, OP_EQ, buf_datalen(buf)); + tt_int_op(2000, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123)); /* This time we'll be grabbing a chunk from the freelist, and making sure its time gets updated */ @@ -584,13 +584,13 @@ test_buffer_time_tracking(void *arg) tor_gettimeofday_cache_set(&tv0); for (i = 0; i < 600; ++i) write_to_buf("ABCDEFG", 7, buf); - tt_int_op(4307, ==, buf_datalen(buf)); + tt_int_op(4307, OP_EQ, buf_datalen(buf)); - tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123)); + tt_int_op(2000, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123)); fetch_from_buf(tmp, 4000, buf); fetch_from_buf(tmp, 306, buf); - tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+5617)); - tt_int_op(383, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+6000)); + tt_int_op(0, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+5617)); + tt_int_op(383, OP_EQ, buf_get_oldest_chunk_timestamp(buf, START_MSEC+6000)); done: buf_free(buf); @@ -613,31 +613,31 @@ test_buffers_zlib_impl(int finalize_with_nil) msg = tor_malloc(512); crypto_rand(msg, 512); - tt_int_op(write_to_buf_zlib(buf, zlib_state, msg, 128, 0), ==, 0); - tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+128, 128, 0), ==, 0); - tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+256, 256, 0), ==, 0); + tt_int_op(write_to_buf_zlib(buf, zlib_state, msg, 128, 0), OP_EQ, 0); + tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+128, 128, 0), OP_EQ, 0); + tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+256, 256, 0), OP_EQ, 0); done = !finalize_with_nil; - tt_int_op(write_to_buf_zlib(buf, zlib_state, "all done", 9, done), ==, 0); + tt_int_op(write_to_buf_zlib(buf, zlib_state, "all done", 9, done), OP_EQ, 0); if (finalize_with_nil) { - tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0); + tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), OP_EQ, 0); } in_len = buf_datalen(buf); contents = tor_malloc(in_len); - tt_int_op(fetch_from_buf(contents, in_len, buf), ==, 0); + tt_int_op(fetch_from_buf(contents, in_len, buf), OP_EQ, 0); - tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len, + tt_int_op(0, OP_EQ, tor_gzip_uncompress(&expanded, &out_len, contents, in_len, ZLIB_METHOD, 1, LOG_WARN)); - tt_int_op(out_len, >=, 128); - tt_mem_op(msg, ==, expanded, 128); - tt_int_op(out_len, >=, 512); - tt_mem_op(msg, ==, expanded, 512); - tt_int_op(out_len, ==, 512+9); - tt_mem_op("all done", ==, expanded+512, 9); + tt_int_op(out_len, OP_GE, 128); + tt_mem_op(msg, OP_EQ, expanded, 128); + tt_int_op(out_len, OP_GE, 512); + tt_mem_op(msg, OP_EQ, expanded, 512); + tt_int_op(out_len, OP_EQ, 512+9); + tt_mem_op("all done", OP_EQ, expanded+512, 9); done: buf_free(buf); @@ -680,28 +680,28 @@ test_buffers_zlib_fin_at_chunk_end(void *arg) tt_assert(buf->head); /* Fill up the chunk so the zlib stuff won't fit in one chunk. */ - tt_uint_op(buf->head->memlen, <, sz); + tt_uint_op(buf->head->memlen, OP_LT, sz); headerjunk = buf->head->memlen - 7; write_to_buf(msg, headerjunk-1, buf); - tt_uint_op(buf->head->datalen, ==, headerjunk); - tt_uint_op(buf_datalen(buf), ==, headerjunk); + tt_uint_op(buf->head->datalen, OP_EQ, headerjunk); + tt_uint_op(buf_datalen(buf), OP_EQ, headerjunk); /* Write an empty string, with finalization on. */ zlib_state = tor_zlib_new(1, ZLIB_METHOD); - tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0); + tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), OP_EQ, 0); in_len = buf_datalen(buf); contents = tor_malloc(in_len); - tt_int_op(fetch_from_buf(contents, in_len, buf), ==, 0); + tt_int_op(fetch_from_buf(contents, in_len, buf), OP_EQ, 0); - tt_uint_op(in_len, >, headerjunk); + tt_uint_op(in_len, OP_GT, headerjunk); - tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len, + tt_int_op(0, OP_EQ, tor_gzip_uncompress(&expanded, &out_len, contents + headerjunk, in_len - headerjunk, ZLIB_METHOD, 1, LOG_WARN)); - tt_int_op(out_len, ==, 0); + tt_int_op(out_len, OP_EQ, 0); tt_assert(expanded); done: diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c index 19ecedc8ac..edc011fc98 100644 --- a/src/test/test_cell_formats.c +++ b/src/test/test_cell_formats.c @@ -30,16 +30,16 @@ test_cfmt_relay_header(void *arg) uint8_t hdr_out[RELAY_HEADER_SIZE]; (void)arg; - tt_int_op(sizeof(hdr_1), ==, RELAY_HEADER_SIZE); + tt_int_op(sizeof(hdr_1), OP_EQ, RELAY_HEADER_SIZE); relay_header_unpack(&rh, hdr_1); - tt_int_op(rh.command, ==, 3); - tt_int_op(rh.recognized, ==, 0); - tt_int_op(rh.stream_id, ==, 0x2122); - tt_mem_op(rh.integrity, ==, "ABCD", 4); - tt_int_op(rh.length, ==, 0x103); + tt_int_op(rh.command, OP_EQ, 3); + tt_int_op(rh.recognized, OP_EQ, 0); + tt_int_op(rh.stream_id, OP_EQ, 0x2122); + tt_mem_op(rh.integrity, OP_EQ, "ABCD", 4); + tt_int_op(rh.length, OP_EQ, 0x103); relay_header_pack(hdr_out, &rh); - tt_mem_op(hdr_out, ==, hdr_1, RELAY_HEADER_SIZE); + tt_mem_op(hdr_out, OP_EQ, hdr_1, RELAY_HEADER_SIZE); done: ; @@ -74,32 +74,32 @@ test_cfmt_begin_cells(void *arg) /* Try begindir. */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN_DIR, "", 0); - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_ptr_op(NULL, ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(0, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(1, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_ptr_op(NULL, OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(0, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(1, OP_EQ, bcell.is_begindir); /* A Begindir with extra stuff. */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN_DIR, "12345", 5); - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_ptr_op(NULL, ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(0, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(1, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_ptr_op(NULL, OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(0, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(1, OP_EQ, bcell.is_begindir); /* A short but valid begin cell */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:9", 6); - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("a.b", ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(9, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("a.b", OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(9, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* A significantly loner begin cell */ @@ -108,35 +108,35 @@ test_cfmt_begin_cells(void *arg) const char c[] = "here-is-a-nice-long.hostname.com:65535"; make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, strlen(c)+1); } - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("here-is-a-nice-long.hostname.com", ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(65535, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("here-is-a-nice-long.hostname.com", OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(65535, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* An IPv4 begin cell. */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "18.9.22.169:80", 15); - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("18.9.22.169", ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(80, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("18.9.22.169", OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(80, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* An IPv6 begin cell. Let's make sure we handle colons*/ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "[2620::6b0:b:1a1a:0:26e5:480e]:80", 34); - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("[2620::6b0:b:1a1a:0:26e5:480e]", ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(80, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("[2620::6b0:b:1a1a:0:26e5:480e]", OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(80, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* a begin cell with extra junk but not enough for flags. */ @@ -145,12 +145,12 @@ test_cfmt_begin_cells(void *arg) const char c[] = "another.example.com:80\x00\x01\x02"; make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1); } - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("another.example.com", ==, bcell.address); - tt_int_op(0, ==, bcell.flags); - tt_int_op(80, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("another.example.com", OP_EQ, bcell.address); + tt_int_op(0, OP_EQ, bcell.flags); + tt_int_op(80, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* a begin cell with flags. */ @@ -159,12 +159,12 @@ test_cfmt_begin_cells(void *arg) const char c[] = "another.example.com:443\x00\x01\x02\x03\x04"; make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1); } - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("another.example.com", ==, bcell.address); - tt_int_op(0x1020304, ==, bcell.flags); - tt_int_op(443, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("another.example.com", OP_EQ, bcell.address); + tt_int_op(0x1020304, OP_EQ, bcell.flags); + tt_int_op(443, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* a begin cell with flags and even more cruft after that. */ @@ -173,12 +173,12 @@ test_cfmt_begin_cells(void *arg) const char c[] = "a-further.example.com:22\x00\xee\xaa\x00\xffHi mom"; make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1); } - tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason)); - tt_str_op("a-further.example.com", ==, bcell.address); - tt_int_op(0xeeaa00ff, ==, bcell.flags); - tt_int_op(22, ==, bcell.port); - tt_int_op(5, ==, bcell.stream_id); - tt_int_op(0, ==, bcell.is_begindir); + tt_int_op(0, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_str_op("a-further.example.com", OP_EQ, bcell.address); + tt_int_op(0xeeaa00ff, OP_EQ, bcell.flags); + tt_int_op(22, OP_EQ, bcell.port); + tt_int_op(5, OP_EQ, bcell.stream_id); + tt_int_op(0, OP_EQ, bcell.is_begindir); tor_free(bcell.address); /* bad begin cell: impossible length. */ @@ -189,42 +189,42 @@ test_cfmt_begin_cells(void *arg) { relay_header_t rh; relay_header_unpack(&rh, cell.payload); - tt_int_op(rh.length, ==, 510); + tt_int_op(rh.length, OP_EQ, 510); } - tt_int_op(-2, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-2, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); /* Bad begin cell: no body. */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "", 0); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); /* bad begin cell: no body. */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "", 0); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); /* bad begin cell: no colon */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b", 4); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); /* bad begin cell: no ports */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:", 5); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); /* bad begin cell: bad port */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:xyz", 8); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:100000", 11); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); /* bad begin cell: no nul */ memset(&bcell, 0x7f, sizeof(bcell)); make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:80", 6); - tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason)); + tt_int_op(-1, OP_EQ, begin_cell_parse(&cell, &bcell, &end_reason)); done: tor_free(bcell.address); @@ -244,47 +244,47 @@ test_cfmt_connected_cells(void *arg) make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "", 0); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_UNSPEC); - tt_int_op(ttl, ==, -1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_UNSPEC); + tt_int_op(ttl, OP_EQ, -1); /* A slightly less oldschool one: only an IPv4 address */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x20\x30\x40\x50", 4); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET); - tt_str_op(fmt_addr(&addr), ==, "32.48.64.80"); - tt_int_op(ttl, ==, -1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET); + tt_str_op(fmt_addr(&addr), OP_EQ, "32.48.64.80"); + tt_int_op(ttl, OP_EQ, -1); /* Bogus but understandable: truncated TTL */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x11\x12\x13\x14\x15", 5); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET); - tt_str_op(fmt_addr(&addr), ==, "17.18.19.20"); - tt_int_op(ttl, ==, -1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET); + tt_str_op(fmt_addr(&addr), OP_EQ, "17.18.19.20"); + tt_int_op(ttl, OP_EQ, -1); /* Regular IPv4 one: address and TTL */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x02\x03\x04\x05\x00\x00\x0e\x10", 8); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET); - tt_str_op(fmt_addr(&addr), ==, "2.3.4.5"); - tt_int_op(ttl, ==, 3600); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET); + tt_str_op(fmt_addr(&addr), OP_EQ, "2.3.4.5"); + tt_int_op(ttl, OP_EQ, 3600); /* IPv4 with too-big TTL */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x02\x03\x04\x05\xf0\x00\x00\x00", 8); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET); - tt_str_op(fmt_addr(&addr), ==, "2.3.4.5"); - tt_int_op(ttl, ==, -1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET); + tt_str_op(fmt_addr(&addr), OP_EQ, "2.3.4.5"); + tt_int_op(ttl, OP_EQ, -1); /* IPv6 (ttl is mandatory) */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, @@ -294,10 +294,10 @@ test_cfmt_connected_cells(void *arg) "\x00\x00\x02\x58", 25); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET6); - tt_str_op(fmt_addr(&addr), ==, "2607:f8b0:400c:c02::68"); - tt_int_op(ttl, ==, 600); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET6); + tt_str_op(fmt_addr(&addr), OP_EQ, "2607:f8b0:400c:c02::68"); + tt_int_op(ttl, OP_EQ, 600); /* IPv6 (ttl too big) */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, @@ -307,17 +307,17 @@ test_cfmt_connected_cells(void *arg) "\x90\x00\x02\x58", 25); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET6); - tt_str_op(fmt_addr(&addr), ==, "2607:f8b0:400c:c02::68"); - tt_int_op(ttl, ==, -1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET6); + tt_str_op(fmt_addr(&addr), OP_EQ, "2607:f8b0:400c:c02::68"); + tt_int_op(ttl, OP_EQ, -1); /* Bogus size: 3. */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x00\x01\x02", 3); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Bogus family: 7. */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, @@ -327,7 +327,7 @@ test_cfmt_connected_cells(void *arg) "\x90\x00\x02\x58", 25); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Truncated IPv6. */ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, @@ -337,7 +337,7 @@ test_cfmt_connected_cells(void *arg) "\x00\x00\x02", 24); relay_header_unpack(&rh, cell.payload); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); /* Now make sure we can generate connected cells correctly. */ /* Try an IPv4 address */ @@ -346,16 +346,16 @@ test_cfmt_connected_cells(void *arg) tor_addr_parse(&addr, "30.40.50.60"); rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE, &addr, 128); - tt_int_op(rh.length, ==, 8); + tt_int_op(rh.length, OP_EQ, 8); test_memeq_hex(cell.payload+RELAY_HEADER_SIZE, "1e28323c" "00000080"); /* Try parsing it. */ tor_addr_make_unspec(&addr); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET); - tt_str_op(fmt_addr(&addr), ==, "30.40.50.60"); - tt_int_op(ttl, ==, 128); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET); + tt_str_op(fmt_addr(&addr), OP_EQ, "30.40.50.60"); + tt_int_op(ttl, OP_EQ, 128); /* Try an IPv6 address */ memset(&rh, 0, sizeof(rh)); @@ -363,7 +363,7 @@ test_cfmt_connected_cells(void *arg) tor_addr_parse(&addr, "2620::6b0:b:1a1a:0:26e5:480e"); rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE, &addr, 3600); - tt_int_op(rh.length, ==, 25); + tt_int_op(rh.length, OP_EQ, 25); test_memeq_hex(cell.payload + RELAY_HEADER_SIZE, "00000000" "06" "2620000006b0000b1a1a000026e5480e" "00000e10"); @@ -371,10 +371,10 @@ test_cfmt_connected_cells(void *arg) /* Try parsing it. */ tor_addr_make_unspec(&addr); r = connected_cell_parse(&rh, &cell, &addr, &ttl); - tt_int_op(r, ==, 0); - tt_int_op(tor_addr_family(&addr), ==, AF_INET6); - tt_str_op(fmt_addr(&addr), ==, "2620:0:6b0:b:1a1a:0:26e5:480e"); - tt_int_op(ttl, ==, 3600); + tt_int_op(r, OP_EQ, 0); + tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET6); + tt_str_op(fmt_addr(&addr), OP_EQ, "2620:0:6b0:b:1a1a:0:26e5:480e"); + tt_int_op(ttl, OP_EQ, 3600); done: tor_free(mem_op_hex_tmp); @@ -398,14 +398,14 @@ test_cfmt_create_cells(void *arg) crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN); cell.command = CELL_CREATE; memcpy(cell.payload, b, TAP_ONIONSKIN_CHALLENGE_LEN); - tt_int_op(0, ==, create_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATE, ==, cc.cell_type); - tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type); - tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len); - tt_mem_op(cc.onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10); - tt_int_op(0, ==, create_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATE, OP_EQ, cc.cell_type); + tt_int_op(ONION_HANDSHAKE_TYPE_TAP, OP_EQ, cc.handshake_type); + tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.onionskin,OP_EQ, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10); + tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A valid create_fast cell. */ memset(&cell, 0, sizeof(cell)); @@ -413,14 +413,14 @@ test_cfmt_create_cells(void *arg) crypto_rand((char*)b, CREATE_FAST_LEN); cell.command = CELL_CREATE_FAST; memcpy(cell.payload, b, CREATE_FAST_LEN); - tt_int_op(0, ==, create_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATE_FAST, ==, cc.cell_type); - tt_int_op(ONION_HANDSHAKE_TYPE_FAST, ==, cc.handshake_type); - tt_int_op(CREATE_FAST_LEN, ==, cc.handshake_len); - tt_mem_op(cc.onionskin,==, b, CREATE_FAST_LEN + 10); - tt_int_op(0, ==, create_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATE_FAST, OP_EQ, cc.cell_type); + tt_int_op(ONION_HANDSHAKE_TYPE_FAST, OP_EQ, cc.handshake_type); + tt_int_op(CREATE_FAST_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.onionskin,OP_EQ, b, CREATE_FAST_LEN + 10); + tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A valid create2 cell with a TAP payload */ memset(&cell, 0, sizeof(cell)); @@ -429,14 +429,14 @@ test_cfmt_create_cells(void *arg) cell.command = CELL_CREATE2; memcpy(cell.payload, "\x00\x00\x00\xBA", 4); /* TAP, 186 bytes long */ memcpy(cell.payload+4, b, TAP_ONIONSKIN_CHALLENGE_LEN); - tt_int_op(0, ==, create_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATE2, ==, cc.cell_type); - tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type); - tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len); - tt_mem_op(cc.onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10); - tt_int_op(0, ==, create_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATE2, OP_EQ, cc.cell_type); + tt_int_op(ONION_HANDSHAKE_TYPE_TAP, OP_EQ, cc.handshake_type); + tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.onionskin,OP_EQ, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10); + tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A valid create2 cell with an ntor payload */ memset(&cell, 0, sizeof(cell)); @@ -445,14 +445,14 @@ test_cfmt_create_cells(void *arg) cell.command = CELL_CREATE2; memcpy(cell.payload, "\x00\x02\x00\x54", 4); /* ntor, 84 bytes long */ memcpy(cell.payload+4, b, NTOR_ONIONSKIN_LEN); - tt_int_op(0, ==, create_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATE2, ==, cc.cell_type); - tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type); - tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len); - tt_mem_op(cc.onionskin,==, b, NTOR_ONIONSKIN_LEN + 10); - tt_int_op(0, ==, create_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATE2, OP_EQ, cc.cell_type); + tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, OP_EQ, cc.handshake_type); + tt_int_op(NTOR_ONIONSKIN_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN + 10); + tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A valid create cell with an ntor payload, in legacy format. */ memset(&cell, 0, sizeof(cell)); @@ -461,38 +461,38 @@ test_cfmt_create_cells(void *arg) cell.command = CELL_CREATE; memcpy(cell.payload, "ntorNTORntorNTOR", 16); memcpy(cell.payload+16, b, NTOR_ONIONSKIN_LEN); - tt_int_op(0, ==, create_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATE, ==, cc.cell_type); - tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type); - tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len); - tt_mem_op(cc.onionskin,==, b, NTOR_ONIONSKIN_LEN + 10); - tt_int_op(0, ==, create_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, create_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATE, OP_EQ, cc.cell_type); + tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, OP_EQ, cc.handshake_type); + tt_int_op(NTOR_ONIONSKIN_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN + 10); + tt_int_op(0, OP_EQ, create_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* == Okay, now let's try to parse some impossible stuff. */ /* It has to be some kind of a create cell! */ cell.command = CELL_CREATED; - tt_int_op(-1, ==, create_cell_parse(&cc, &cell)); + tt_int_op(-1, OP_EQ, create_cell_parse(&cc, &cell)); /* You can't acutally make an unparseable CREATE or CREATE_FAST cell. */ /* Try some CREATE2 cells. First with a bad type. */ cell.command = CELL_CREATE2; memcpy(cell.payload, "\x00\x50\x00\x99", 4); /* Type 0x50???? */ - tt_int_op(-1, ==, create_cell_parse(&cc, &cell)); + tt_int_op(-1, OP_EQ, create_cell_parse(&cc, &cell)); /* Now a good type with an incorrect length. */ memcpy(cell.payload, "\x00\x00\x00\xBC", 4); /* TAP, 187 bytes.*/ - tt_int_op(-1, ==, create_cell_parse(&cc, &cell)); + tt_int_op(-1, OP_EQ, create_cell_parse(&cc, &cell)); /* Now a good type with a ridiculous length. */ memcpy(cell.payload, "\x00\x00\x02\x00", 4); /* TAP, 512 bytes.*/ - tt_int_op(-1, ==, create_cell_parse(&cc, &cell)); + tt_int_op(-1, OP_EQ, create_cell_parse(&cc, &cell)); /* == Time to try formatting bad cells. The important thing is that we reject big lengths, so just check that for now. */ cc.handshake_len = 512; - tt_int_op(-1, ==, create_cell_format(&cell2, &cc)); + tt_int_op(-1, OP_EQ, create_cell_format(&cell2, &cc)); /* == Try formatting a create2 cell we don't understand. XXXX */ @@ -516,13 +516,13 @@ test_cfmt_created_cells(void *arg) crypto_rand((char*)b, TAP_ONIONSKIN_REPLY_LEN); cell.command = CELL_CREATED; memcpy(cell.payload, b, TAP_ONIONSKIN_REPLY_LEN); - tt_int_op(0, ==, created_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATED, ==, cc.cell_type); - tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, cc.handshake_len); - tt_mem_op(cc.reply,==, b, TAP_ONIONSKIN_REPLY_LEN + 10); - tt_int_op(0, ==, created_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATED, OP_EQ, cc.cell_type); + tt_int_op(TAP_ONIONSKIN_REPLY_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.reply,OP_EQ, b, TAP_ONIONSKIN_REPLY_LEN + 10); + tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A good CREATED_FAST cell */ memset(&cell, 0, sizeof(cell)); @@ -530,13 +530,13 @@ test_cfmt_created_cells(void *arg) crypto_rand((char*)b, CREATED_FAST_LEN); cell.command = CELL_CREATED_FAST; memcpy(cell.payload, b, CREATED_FAST_LEN); - tt_int_op(0, ==, created_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATED_FAST, ==, cc.cell_type); - tt_int_op(CREATED_FAST_LEN, ==, cc.handshake_len); - tt_mem_op(cc.reply,==, b, CREATED_FAST_LEN + 10); - tt_int_op(0, ==, created_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATED_FAST, OP_EQ, cc.cell_type); + tt_int_op(CREATED_FAST_LEN, OP_EQ, cc.handshake_len); + tt_mem_op(cc.reply,OP_EQ, b, CREATED_FAST_LEN + 10); + tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A good CREATED2 cell with short reply */ memset(&cell, 0, sizeof(cell)); @@ -545,13 +545,13 @@ test_cfmt_created_cells(void *arg) cell.command = CELL_CREATED2; memcpy(cell.payload, "\x00\x40", 2); memcpy(cell.payload+2, b, 64); - tt_int_op(0, ==, created_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATED2, ==, cc.cell_type); - tt_int_op(64, ==, cc.handshake_len); - tt_mem_op(cc.reply,==, b, 80); - tt_int_op(0, ==, created_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATED2, OP_EQ, cc.cell_type); + tt_int_op(64, OP_EQ, cc.handshake_len); + tt_mem_op(cc.reply,OP_EQ, b, 80); + tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* A good CREATED2 cell with maximal reply */ memset(&cell, 0, sizeof(cell)); @@ -560,13 +560,13 @@ test_cfmt_created_cells(void *arg) cell.command = CELL_CREATED2; memcpy(cell.payload, "\x01\xF0", 2); memcpy(cell.payload+2, b, 496); - tt_int_op(0, ==, created_cell_parse(&cc, &cell)); - tt_int_op(CELL_CREATED2, ==, cc.cell_type); - tt_int_op(496, ==, cc.handshake_len); - tt_mem_op(cc.reply,==, b, 496); - tt_int_op(0, ==, created_cell_format(&cell2, &cc)); - tt_int_op(cell.command, ==, cell2.command); - tt_mem_op(cell.payload,==, cell2.payload, CELL_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, created_cell_parse(&cc, &cell)); + tt_int_op(CELL_CREATED2, OP_EQ, cc.cell_type); + tt_int_op(496, OP_EQ, cc.handshake_len); + tt_mem_op(cc.reply,OP_EQ, b, 496); + tt_int_op(0, OP_EQ, created_cell_format(&cell2, &cc)); + tt_int_op(cell.command, OP_EQ, cell2.command); + tt_mem_op(cell.payload,OP_EQ, cell2.payload, CELL_PAYLOAD_SIZE); /* Bogus CREATED2 cell: too long! */ memset(&cell, 0, sizeof(cell)); @@ -574,11 +574,11 @@ test_cfmt_created_cells(void *arg) crypto_rand((char*)b, 496); cell.command = CELL_CREATED2; memcpy(cell.payload, "\x01\xF1", 2); - tt_int_op(-1, ==, created_cell_parse(&cc, &cell)); + tt_int_op(-1, OP_EQ, created_cell_parse(&cc, &cell)); /* Unformattable CREATED2 cell: too long! */ cc.handshake_len = 497; - tt_int_op(-1, ==, created_cell_format(&cell2, &cc)); + tt_int_op(-1, OP_EQ, created_cell_format(&cell2, &cc)); done: ; @@ -606,21 +606,21 @@ test_cfmt_extend_cells(void *arg) memcpy(p, "\x12\xf4\x00\x01\x01\x02", 6); /* 18 244 0 1 : 258 */ memcpy(p+6,b,TAP_ONIONSKIN_CHALLENGE_LEN); memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, "electroencephalogram", 20); - tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND, + tt_int_op(0, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND, p, 26+TAP_ONIONSKIN_CHALLENGE_LEN)); - tt_int_op(RELAY_COMMAND_EXTEND, ==, ec.cell_type); - tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); - tt_int_op(258, ==, ec.orport_ipv4.port); - tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr)); - tt_mem_op(ec.node_id,==, "electroencephalogram", 20); - tt_int_op(cc->cell_type, ==, CELL_CREATE); - tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_TAP); - tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_CHALLENGE_LEN); - tt_mem_op(cc->onionskin,==, b, TAP_ONIONSKIN_CHALLENGE_LEN+20); - tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); - tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND); - tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN); - tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE); + tt_int_op(RELAY_COMMAND_EXTEND, OP_EQ, ec.cell_type); + tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr)); + tt_int_op(258, OP_EQ, ec.orport_ipv4.port); + tt_int_op(AF_UNSPEC, OP_EQ, tor_addr_family(&ec.orport_ipv6.addr)); + tt_mem_op(ec.node_id,OP_EQ, "electroencephalogram", 20); + tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE); + tt_int_op(cc->handshake_type, OP_EQ, ONION_HANDSHAKE_TYPE_TAP); + tt_int_op(cc->handshake_len, OP_EQ, TAP_ONIONSKIN_CHALLENGE_LEN); + tt_mem_op(cc->onionskin,OP_EQ, b, TAP_ONIONSKIN_CHALLENGE_LEN+20); + tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); + tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND); + tt_int_op(p2_len, OP_EQ, 26+TAP_ONIONSKIN_CHALLENGE_LEN); + tt_mem_op(p2,OP_EQ, p, RELAY_PAYLOAD_SIZE); /* Let's do an ntor stuffed in a legacy EXTEND cell */ memset(p, 0, sizeof(p)); @@ -630,22 +630,22 @@ test_cfmt_extend_cells(void *arg) memcpy(p+6,"ntorNTORntorNTOR", 16); memcpy(p+22, b, NTOR_ONIONSKIN_LEN); memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, "electroencephalogram", 20); - tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND, + tt_int_op(0, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND, p, 26+TAP_ONIONSKIN_CHALLENGE_LEN)); - tt_int_op(RELAY_COMMAND_EXTEND, ==, ec.cell_type); - tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); - tt_int_op(258, ==, ec.orport_ipv4.port); - tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr)); - tt_mem_op(ec.node_id,==, "electroencephalogram", 20); - tt_int_op(cc->cell_type, ==, CELL_CREATE2); - tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR); - tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN); - tt_mem_op(cc->onionskin,==, b, NTOR_ONIONSKIN_LEN+20); - tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); - tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND); - tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN); - tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE); - tt_int_op(0, ==, create_cell_format_relayed(&cell, cc)); + tt_int_op(RELAY_COMMAND_EXTEND, OP_EQ, ec.cell_type); + tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr)); + tt_int_op(258, OP_EQ, ec.orport_ipv4.port); + tt_int_op(AF_UNSPEC, OP_EQ, tor_addr_family(&ec.orport_ipv6.addr)); + tt_mem_op(ec.node_id,OP_EQ, "electroencephalogram", 20); + tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2); + tt_int_op(cc->handshake_type, OP_EQ, ONION_HANDSHAKE_TYPE_NTOR); + tt_int_op(cc->handshake_len, OP_EQ, NTOR_ONIONSKIN_LEN); + tt_mem_op(cc->onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN+20); + tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); + tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND); + tt_int_op(p2_len, OP_EQ, 26+TAP_ONIONSKIN_CHALLENGE_LEN); + tt_mem_op(p2,OP_EQ, p, RELAY_PAYLOAD_SIZE); + tt_int_op(0, OP_EQ, create_cell_format_relayed(&cell, cc)); /* Now let's do a minimal ntor EXTEND2 cell. */ memset(&ec, 0xff, sizeof(ec)); @@ -659,21 +659,21 @@ test_cfmt_extend_cells(void *arg) /* Prep for the handshake: type and length */ memcpy(p+31, "\x00\x02\x00\x54", 4); memcpy(p+35, b, NTOR_ONIONSKIN_LEN); - tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(0, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, 35+NTOR_ONIONSKIN_LEN)); - tt_int_op(RELAY_COMMAND_EXTEND2, ==, ec.cell_type); - tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); - tt_int_op(61681, ==, ec.orport_ipv4.port); - tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr)); - tt_mem_op(ec.node_id,==, "anarchoindividualist", 20); - tt_int_op(cc->cell_type, ==, CELL_CREATE2); - tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR); - tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN); - tt_mem_op(cc->onionskin,==, b, NTOR_ONIONSKIN_LEN+20); - tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); - tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2); - tt_int_op(p2_len, ==, 35+NTOR_ONIONSKIN_LEN); - tt_mem_op(p2,==, p, RELAY_PAYLOAD_SIZE); + tt_int_op(RELAY_COMMAND_EXTEND2, OP_EQ, ec.cell_type); + tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr)); + tt_int_op(61681, OP_EQ, ec.orport_ipv4.port); + tt_int_op(AF_UNSPEC, OP_EQ, tor_addr_family(&ec.orport_ipv6.addr)); + tt_mem_op(ec.node_id,OP_EQ, "anarchoindividualist", 20); + tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2); + tt_int_op(cc->handshake_type, OP_EQ, ONION_HANDSHAKE_TYPE_NTOR); + tt_int_op(cc->handshake_len, OP_EQ, NTOR_ONIONSKIN_LEN); + tt_mem_op(cc->onionskin,OP_EQ, b, NTOR_ONIONSKIN_LEN+20); + tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); + tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND2); + tt_int_op(p2_len, OP_EQ, 35+NTOR_ONIONSKIN_LEN); + tt_mem_op(p2,OP_EQ, p, RELAY_PAYLOAD_SIZE); /* Now let's do a fanciful EXTEND2 cell. */ memset(&ec, 0xff, sizeof(ec)); @@ -692,21 +692,21 @@ test_cfmt_extend_cells(void *arg) /* Prep for the handshake: weird type and length */ memcpy(p+85, "\x01\x05\x00\x63", 4); memcpy(p+89, b, 99); - tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, 89+99)); - tt_int_op(RELAY_COMMAND_EXTEND2, ==, ec.cell_type); - tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr)); - tt_int_op(61681, ==, ec.orport_ipv4.port); - tt_str_op("2002::f0:c51e", ==, fmt_addr(&ec.orport_ipv6.addr)); - tt_int_op(4370, ==, ec.orport_ipv6.port); - tt_mem_op(ec.node_id,==, "anthropomorphization", 20); - tt_int_op(cc->cell_type, ==, CELL_CREATE2); - tt_int_op(cc->handshake_type, ==, 0x105); - tt_int_op(cc->handshake_len, ==, 99); - tt_mem_op(cc->onionskin,==, b, 99+20); - tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); - tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2); + tt_int_op(0, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, 89+99)); + tt_int_op(RELAY_COMMAND_EXTEND2, OP_EQ, ec.cell_type); + tt_str_op("18.244.0.1", OP_EQ, fmt_addr(&ec.orport_ipv4.addr)); + tt_int_op(61681, OP_EQ, ec.orport_ipv4.port); + tt_str_op("2002::f0:c51e", OP_EQ, fmt_addr(&ec.orport_ipv6.addr)); + tt_int_op(4370, OP_EQ, ec.orport_ipv6.port); + tt_mem_op(ec.node_id,OP_EQ, "anthropomorphization", 20); + tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2); + tt_int_op(cc->handshake_type, OP_EQ, 0x105); + tt_int_op(cc->handshake_len, OP_EQ, 99); + tt_mem_op(cc->onionskin,OP_EQ, b, 99+20); + tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec)); + tt_int_op(p2_cmd, OP_EQ, RELAY_COMMAND_EXTEND2); /* We'll generate it minus the IPv6 address and minus the konami code */ - tt_int_op(p2_len, ==, 89+99-34-20); + tt_int_op(p2_len, OP_EQ, 89+99-34-20); test_memeq_hex(p2, /* Two items: one that same darn IP address. */ "02000612F40001F0F1" @@ -714,8 +714,8 @@ test_cfmt_extend_cells(void *arg) "0214616e7468726f706f6d6f727068697a6174696f6e" /* Now the handshake prologue */ "01050063"); - tt_mem_op(p2+1+8+22+4,==, b, 99+20); - tt_int_op(0, ==, create_cell_format_relayed(&cell, cc)); + tt_mem_op(p2+1+8+22+4,OP_EQ, b, 99+20); + tt_int_op(0, OP_EQ, create_cell_format_relayed(&cell, cc)); /* == Now try parsing some junk */ @@ -724,7 +724,7 @@ test_cfmt_extend_cells(void *arg) memcpy(p, "\x02\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9); memcpy(p+9, "\x02\x14" "anarchoindividualist", 22); memcpy(p+31, "\xff\xff\x01\xd0", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); /* Try two identities. */ @@ -733,14 +733,14 @@ test_cfmt_extend_cells(void *arg) memcpy(p+9, "\x02\x14" "anarchoindividualist", 22); memcpy(p+31, "\x02\x14" "autodepolymerization", 22); memcpy(p+53, "\xff\xff\x00\x10", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); /* No identities. */ memset(p, 0, sizeof(p)); memcpy(p, "\x01\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9); memcpy(p+53, "\xff\xff\x00\x10", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); /* Try a bad IPv4 address (too long, too short)*/ @@ -748,13 +748,13 @@ test_cfmt_extend_cells(void *arg) memcpy(p, "\x02\x00\x07\x12\xf4\x00\x01\xf0\xf1\xff", 10); memcpy(p+10, "\x02\x14" "anarchoindividualist", 22); memcpy(p+32, "\xff\xff\x00\x10", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); memset(p, 0, sizeof(p)); memcpy(p, "\x02\x00\x05\x12\xf4\x00\x01\xf0", 8); memcpy(p+8, "\x02\x14" "anarchoindividualist", 22); memcpy(p+30, "\xff\xff\x00\x10", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); /* IPv6 address (too long, too short, no IPv4)*/ @@ -763,28 +763,28 @@ test_cfmt_extend_cells(void *arg) memcpy(p+9, "\x02\x14" "anarchoindividualist", 22); memcpy(p+31, "\x01\x13" "xxxxxxxxxxxxxxxxYYZ", 19); memcpy(p+50, "\xff\xff\x00\x20", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); memset(p, 0, sizeof(p)); memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9); memcpy(p+9, "\x02\x14" "anarchoindividualist", 22); memcpy(p+31, "\x01\x11" "xxxxxxxxxxxxxxxxY", 17); memcpy(p+48, "\xff\xff\x00\x20", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); memset(p, 0, sizeof(p)); memcpy(p, "\x02", 1); memcpy(p+1, "\x02\x14" "anarchoindividualist", 22); memcpy(p+23, "\x01\x12" "xxxxxxxxxxxxxxxxYY", 18); memcpy(p+41, "\xff\xff\x00\x20", 4); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); /* Running out of space in specifiers */ memset(p,0,sizeof(p)); memcpy(p, "\x05\x0a\xff", 3); memcpy(p+3+255, "\x0a\xff", 2); - tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, + tt_int_op(-1, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, sizeof(p))); /* Fuzz, because why not. */ @@ -823,16 +823,16 @@ test_cfmt_extended_cells(void *arg) memset(b, 0, sizeof(b)); crypto_rand((char*)b, TAP_ONIONSKIN_REPLY_LEN); memcpy(p,b,TAP_ONIONSKIN_REPLY_LEN); - tt_int_op(0, ==, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED, p, + tt_int_op(0, OP_EQ, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED, p, TAP_ONIONSKIN_REPLY_LEN)); - tt_int_op(RELAY_COMMAND_EXTENDED, ==, ec.cell_type); - tt_int_op(cc->cell_type, ==, CELL_CREATED); - tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_REPLY_LEN); - tt_mem_op(cc->reply,==, b, TAP_ONIONSKIN_REPLY_LEN); - tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec)); - tt_int_op(RELAY_COMMAND_EXTENDED, ==, p2_cmd); - tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, p2_len); - tt_mem_op(p2,==, p, sizeof(p2)); + tt_int_op(RELAY_COMMAND_EXTENDED, OP_EQ, ec.cell_type); + tt_int_op(cc->cell_type, OP_EQ, CELL_CREATED); + tt_int_op(cc->handshake_len, OP_EQ, TAP_ONIONSKIN_REPLY_LEN); + tt_mem_op(cc->reply,OP_EQ, b, TAP_ONIONSKIN_REPLY_LEN); + tt_int_op(0, OP_EQ, extended_cell_format(&p2_cmd, &p2_len, p2, &ec)); + tt_int_op(RELAY_COMMAND_EXTENDED, OP_EQ, p2_cmd); + tt_int_op(TAP_ONIONSKIN_REPLY_LEN, OP_EQ, p2_len); + tt_mem_op(p2,OP_EQ, p, sizeof(p2)); /* Try an EXTENDED2 cell */ memset(&ec, 0xff, sizeof(ec)); @@ -841,25 +841,25 @@ test_cfmt_extended_cells(void *arg) crypto_rand((char*)b, 42); memcpy(p,"\x00\x2a",2); memcpy(p+2,b,42); - tt_int_op(0, ==, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42)); - tt_int_op(RELAY_COMMAND_EXTENDED2, ==, ec.cell_type); - tt_int_op(cc->cell_type, ==, CELL_CREATED2); - tt_int_op(cc->handshake_len, ==, 42); - tt_mem_op(cc->reply,==, b, 42+10); - tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec)); - tt_int_op(RELAY_COMMAND_EXTENDED2, ==, p2_cmd); - tt_int_op(2+42, ==, p2_len); - tt_mem_op(p2,==, p, sizeof(p2)); + tt_int_op(0, OP_EQ, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42)); + tt_int_op(RELAY_COMMAND_EXTENDED2, OP_EQ, ec.cell_type); + tt_int_op(cc->cell_type, OP_EQ, CELL_CREATED2); + tt_int_op(cc->handshake_len, OP_EQ, 42); + tt_mem_op(cc->reply,OP_EQ, b, 42+10); + tt_int_op(0, OP_EQ, extended_cell_format(&p2_cmd, &p2_len, p2, &ec)); + tt_int_op(RELAY_COMMAND_EXTENDED2, OP_EQ, p2_cmd); + tt_int_op(2+42, OP_EQ, p2_len); + tt_mem_op(p2,OP_EQ, p, sizeof(p2)); /* Try an almost-too-long EXTENDED2 cell */ memcpy(p, "\x01\xf0", 2); - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p))); /* Now try a too-long extended2 cell. That's the only misparse I can think * of. */ memcpy(p, "\x01\xf1", 2); - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p))); done: @@ -903,22 +903,22 @@ test_cfmt_resolved_cells(void *arg) /* Let's try an empty cell */ SET_CELL(""); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); CLEAR_ADDRS(); /* redundant but let's be consistent */ /* Cell with one ipv4 addr */ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"); - tt_int_op(rh.length, ==, 10); + tt_int_op(rh.length, OP_EQ, 10); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 1); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 1); a = smartlist_get(addrs, 0); - tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 256); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.0.2.10"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 256); CLEAR_ADDRS(); /* Cell with one ipv6 addr */ @@ -926,30 +926,30 @@ test_cfmt_resolved_cells(void *arg) "\x20\x02\x90\x90\x00\x00\x00\x00" "\x00\x00\x00\x00\xf0\xf0\xab\xcd" "\x02\00\x00\x01"); - tt_int_op(rh.length, ==, 22); + tt_int_op(rh.length, OP_EQ, 22); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 1); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 1); a = smartlist_get(addrs, 0); - tt_str_op(fmt_addr(&a->addr), ==, "2002:9090::f0f0:abcd"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 0x2000001); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9090::f0f0:abcd"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 0x2000001); CLEAR_ADDRS(); /* Cell with one hostname */ SET_CELL("\x00\x11" "motherbrain.zebes" "\x00\00\x00\x00"); - tt_int_op(rh.length, ==, 23); + tt_int_op(rh.length, OP_EQ, 23); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 1); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 1); a = smartlist_get(addrs, 0); tt_assert(tor_addr_is_null(&a->addr)); - tt_str_op(a->hostname, ==, "motherbrain.zebes"); - tt_int_op(a->ttl, ==, 0); + tt_str_op(a->hostname, OP_EQ, "motherbrain.zebes"); + tt_int_op(a->ttl, OP_EQ, 0); CLEAR_ADDRS(); #define LONG_NAME \ @@ -958,51 +958,51 @@ test_cfmt_resolved_cells(void *arg) "function-is-already-very-full.of-copy-and-pasted-stuff.having-this-app" \ "ear-more-than-once-would-bother-me-somehow.is" - tt_int_op(strlen(LONG_NAME), ==, 255); + tt_int_op(strlen(LONG_NAME), OP_EQ, 255); SET_CELL("\x00\xff" LONG_NAME "\x00\01\x00\x00"); - tt_int_op(rh.length, ==, 261); + tt_int_op(rh.length, OP_EQ, 261); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 1); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 1); a = smartlist_get(addrs, 0); tt_assert(tor_addr_is_null(&a->addr)); - tt_str_op(a->hostname, ==, LONG_NAME); - tt_int_op(a->ttl, ==, 65536); + tt_str_op(a->hostname, OP_EQ, LONG_NAME); + tt_int_op(a->ttl, OP_EQ, 65536); CLEAR_ADDRS(); /* Cells with an error */ SET_CELL("\xf0\x2b" "I'm sorry, Dave. I'm afraid I can't do that" "\x00\x11\x22\x33"); - tt_int_op(rh.length, ==, 49); + tt_int_op(rh.length, OP_EQ, 49); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, RESOLVED_TYPE_ERROR_TRANSIENT); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, RESOLVED_TYPE_ERROR_TRANSIENT); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); CLEAR_ADDRS(); SET_CELL("\xf1\x40" "This hostname is too important for me to allow you to resolve it" "\x00\x00\x00\x00"); - tt_int_op(rh.length, ==, 70); + tt_int_op(rh.length, OP_EQ, 70); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, RESOLVED_TYPE_ERROR); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, RESOLVED_TYPE_ERROR); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); CLEAR_ADDRS(); /* Cell with an unrecognized type */ SET_CELL("\xee\x16" "fault in the AE35 unit" "\x09\x09\x01\x01"); - tt_int_op(rh.length, ==, 28); + tt_int_op(rh.length, OP_EQ, 28); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); CLEAR_ADDRS(); /* Cell with one of each */ @@ -1027,21 +1027,21 @@ test_cfmt_resolved_cells(void *arg) "\x00\00\x00\x00" ); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); /* no error reported; we got answers */ - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 3); + tt_int_op(errcode, OP_EQ, 0); /* no error reported; we got answers */ + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 3); a = smartlist_get(addrs, 0); - tt_str_op(fmt_addr(&a->addr), ==, "2002:9090::f0f0:abcd"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 0x2000001); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9090::f0f0:abcd"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 0x2000001); a = smartlist_get(addrs, 1); - tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 256); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.0.2.10"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 256); a = smartlist_get(addrs, 2); tt_assert(tor_addr_is_null(&a->addr)); - tt_str_op(a->hostname, ==, "motherbrain.zebes"); - tt_int_op(a->ttl, ==, 0); + tt_str_op(a->hostname, OP_EQ, "motherbrain.zebes"); + tt_int_op(a->ttl, OP_EQ, 0); CLEAR_ADDRS(); /* Cell with several of similar type */ @@ -1059,29 +1059,29 @@ test_cfmt_resolved_cells(void *arg) "\x00\x00\x00\x00\x00\xfa\xca\xde" "\x00\00\x00\x03"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 5); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 5); a = smartlist_get(addrs, 0); - tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 256); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.0.2.10"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 256); a = smartlist_get(addrs, 1); - tt_str_op(fmt_addr(&a->addr), ==, "8.8.8.8"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 261); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "8.8.8.8"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 261); a = smartlist_get(addrs, 2); - tt_str_op(fmt_addr(&a->addr), ==, "127.176.2.176"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 131071); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "127.176.2.176"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 131071); a = smartlist_get(addrs, 3); - tt_str_op(fmt_addr(&a->addr), ==, "2002:9000::cafe:f00d"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 1); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9000::cafe:f00d"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 1); a = smartlist_get(addrs, 4); - tt_str_op(fmt_addr(&a->addr), ==, "2002:9001::fa:cade"); - tt_ptr_op(a->hostname, ==, NULL); - tt_int_op(a->ttl, ==, 3); + tt_str_op(fmt_addr(&a->addr), OP_EQ, "2002:9001::fa:cade"); + tt_ptr_op(a->hostname, OP_EQ, NULL); + tt_int_op(a->ttl, OP_EQ, 3); CLEAR_ADDRS(); /* Full cell */ @@ -1091,22 +1091,22 @@ test_cfmt_resolved_cells(void *arg) "g-case.to-avoid-off-by-one-errors.where-full-things-are-misreported-as" \ ".overflowing-by-one.z" - tt_int_op(strlen(LONG_NAME2), ==, 231); + tt_int_op(strlen(LONG_NAME2), OP_EQ, 231); SET_CELL("\x00\xff" LONG_NAME "\x00\01\x00\x00" "\x00\xe7" LONG_NAME2 "\x00\01\x00\x00"); - tt_int_op(rh.length, ==, RELAY_PAYLOAD_SIZE); + tt_int_op(rh.length, OP_EQ, RELAY_PAYLOAD_SIZE); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(addrs), ==, 2); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(addrs), OP_EQ, 2); a = smartlist_get(addrs, 0); - tt_str_op(a->hostname, ==, LONG_NAME); + tt_str_op(a->hostname, OP_EQ, LONG_NAME); a = smartlist_get(addrs, 1); - tt_str_op(a->hostname, ==, LONG_NAME2); + tt_str_op(a->hostname, OP_EQ, LONG_NAME2); CLEAR_ADDRS(); /* BAD CELLS */ @@ -1114,49 +1114,49 @@ test_cfmt_resolved_cells(void *arg) /* Invalid length on an IPv4 */ SET_CELL("\x04\x03zzz1234"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00" "\x04\x05zzzzz1234"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); /* Invalid length on an IPv6 */ SET_CELL("\x06\x03zzz1234"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00" "\x06\x17wwwwwwwwwwwwwwwww1234"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00" "\x06\x10xxxx"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); /* Empty hostname */ SET_CELL("\x00\x00xxxx"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); /* rh.length out of range */ CLEAR_CELL(); rh.length = 499; r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(errcode, ==, 0); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(errcode, OP_EQ, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); /* Item length extends beyond rh.length */ CLEAR_CELL(); @@ -1165,18 +1165,18 @@ test_cfmt_resolved_cells(void *arg) "\x00\01\x00\x00"); rh.length -= 1; r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); rh.length -= 5; r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"); rh.length -= 1; r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); SET_CELL("\xee\x10" "\x20\x02\x90\x01\x00\x00\x00\x00" @@ -1184,19 +1184,19 @@ test_cfmt_resolved_cells(void *arg) "\x00\00\x00\x03"); rh.length -= 1; r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); /* Truncated item after first character */ SET_CELL("\x04"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); SET_CELL("\xee"); r = resolved_cell_parse(&cell, &rh, addrs, &errcode); - tt_int_op(r, ==, -1); - tt_int_op(smartlist_len(addrs), ==, 0); + tt_int_op(r, OP_EQ, -1); + tt_int_op(smartlist_len(addrs), OP_EQ, 0); done: CLEAR_ADDRS(); @@ -1224,19 +1224,19 @@ test_cfmt_is_destroy(void *arg) cell_pack(&packed, &cell, 0); chan->wide_circ_ids = 0; tt_assert(! packed_cell_is_destroy(chan, &packed, &circid)); - tt_int_op(circid, ==, 0); + tt_int_op(circid, OP_EQ, 0); cell_pack(&packed, &cell, 1); chan->wide_circ_ids = 1; tt_assert(! packed_cell_is_destroy(chan, &packed, &circid)); - tt_int_op(circid, ==, 0); + tt_int_op(circid, OP_EQ, 0); cell.command = CELL_DESTROY; cell_pack(&packed, &cell, 0); chan->wide_circ_ids = 0; tt_assert(packed_cell_is_destroy(chan, &packed, &circid)); - tt_int_op(circid, ==, 3003); + tt_int_op(circid, OP_EQ, 3003); circid = 0; cell_pack(&packed, &cell, 1); diff --git a/src/test/test_cell_queue.c b/src/test/test_cell_queue.c index e43c100f17..e2fc95ccd6 100644 --- a/src/test/test_cell_queue.c +++ b/src/test/test_cell_queue.c @@ -21,7 +21,7 @@ test_cq_manip(void *arg) #endif /* ENABLE_MEMPOOLS */ cell_queue_init(&cq); - tt_int_op(cq.n, ==, 0); + tt_int_op(cq.n, OP_EQ, 0); pc1 = packed_cell_new(); pc2 = packed_cell_new(); @@ -29,26 +29,26 @@ test_cq_manip(void *arg) pc4 = packed_cell_new(); tt_assert(pc1 && pc2 && pc3 && pc4); - tt_ptr_op(NULL, ==, cell_queue_pop(&cq)); + tt_ptr_op(NULL, OP_EQ, cell_queue_pop(&cq)); /* Add and remove a singleton. */ cell_queue_append(&cq, pc1); - tt_int_op(cq.n, ==, 1); - tt_ptr_op(pc1, ==, cell_queue_pop(&cq)); - tt_int_op(cq.n, ==, 0); + tt_int_op(cq.n, OP_EQ, 1); + tt_ptr_op(pc1, OP_EQ, cell_queue_pop(&cq)); + tt_int_op(cq.n, OP_EQ, 0); /* Add and remove four items */ cell_queue_append(&cq, pc4); cell_queue_append(&cq, pc3); cell_queue_append(&cq, pc2); cell_queue_append(&cq, pc1); - tt_int_op(cq.n, ==, 4); - tt_ptr_op(pc4, ==, cell_queue_pop(&cq)); - tt_ptr_op(pc3, ==, cell_queue_pop(&cq)); - tt_ptr_op(pc2, ==, cell_queue_pop(&cq)); - tt_ptr_op(pc1, ==, cell_queue_pop(&cq)); - tt_int_op(cq.n, ==, 0); - tt_ptr_op(NULL, ==, cell_queue_pop(&cq)); + tt_int_op(cq.n, OP_EQ, 4); + tt_ptr_op(pc4, OP_EQ, cell_queue_pop(&cq)); + tt_ptr_op(pc3, OP_EQ, cell_queue_pop(&cq)); + tt_ptr_op(pc2, OP_EQ, cell_queue_pop(&cq)); + tt_ptr_op(pc1, OP_EQ, cell_queue_pop(&cq)); + tt_int_op(cq.n, OP_EQ, 0); + tt_ptr_op(NULL, OP_EQ, cell_queue_pop(&cq)); /* Try a packed copy (wide, then narrow, which is a bit of a cheat, since a * real cell queue has only one type.) */ @@ -64,32 +64,32 @@ test_cq_manip(void *arg) cell.circ_id = 0x2013; cell_queue_append_packed_copy(NULL /*circ*/, &cq, 0 /*exitward*/, &cell, 0 /*wide*/, 0 /*stats*/); - tt_int_op(cq.n, ==, 2); + tt_int_op(cq.n, OP_EQ, 2); pc_tmp = cell_queue_pop(&cq); - tt_int_op(cq.n, ==, 1); - tt_ptr_op(pc_tmp, !=, NULL); - tt_mem_op(pc_tmp->body, ==, "\x12\x34\x56\x78\x0a", 5); - tt_mem_op(pc_tmp->body+5, ==, cell.payload, sizeof(cell.payload)); + tt_int_op(cq.n, OP_EQ, 1); + tt_ptr_op(pc_tmp, OP_NE, NULL); + tt_mem_op(pc_tmp->body, OP_EQ, "\x12\x34\x56\x78\x0a", 5); + tt_mem_op(pc_tmp->body+5, OP_EQ, cell.payload, sizeof(cell.payload)); packed_cell_free(pc_tmp); pc_tmp = cell_queue_pop(&cq); - tt_int_op(cq.n, ==, 0); - tt_ptr_op(pc_tmp, !=, NULL); - tt_mem_op(pc_tmp->body, ==, "\x20\x13\x0a", 3); - tt_mem_op(pc_tmp->body+3, ==, cell.payload, sizeof(cell.payload)); + tt_int_op(cq.n, OP_EQ, 0); + tt_ptr_op(pc_tmp, OP_NE, NULL); + tt_mem_op(pc_tmp->body, OP_EQ, "\x20\x13\x0a", 3); + tt_mem_op(pc_tmp->body+3, OP_EQ, cell.payload, sizeof(cell.payload)); packed_cell_free(pc_tmp); pc_tmp = NULL; - tt_ptr_op(NULL, ==, cell_queue_pop(&cq)); + tt_ptr_op(NULL, OP_EQ, cell_queue_pop(&cq)); /* Now make sure cell_queue_clear works. */ cell_queue_append(&cq, pc2); cell_queue_append(&cq, pc1); - tt_int_op(cq.n, ==, 2); + tt_int_op(cq.n, OP_EQ, 2); cell_queue_clear(&cq); pc2 = pc1 = NULL; /* prevent double-free */ - tt_int_op(cq.n, ==, 0); + tt_int_op(cq.n, OP_EQ, 0); done: packed_cell_free(pc1); @@ -129,17 +129,17 @@ test_circuit_n_cells(void *arg) origin_c = origin_circuit_new(); origin_c->base_.purpose = CIRCUIT_PURPOSE_C_GENERAL; - tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 0); + tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), OP_EQ, 0); cell_queue_append(&or_c->p_chan_cells, pc1); - tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 1); + tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), OP_EQ, 1); cell_queue_append(&or_c->base_.n_chan_cells, pc2); cell_queue_append(&or_c->base_.n_chan_cells, pc3); - tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), ==, 3); + tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(or_c)), OP_EQ, 3); - tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 0); + tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), OP_EQ, 0); cell_queue_append(&origin_c->base_.n_chan_cells, pc4); cell_queue_append(&origin_c->base_.n_chan_cells, pc5); - tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), ==, 2); + tt_int_op(n_cells_in_circ_queues(TO_CIRCUIT(origin_c)), OP_EQ, 2); done: circuit_free(TO_CIRCUIT(or_c)); diff --git a/src/test/test_checkdir.c b/src/test/test_checkdir.c index 5135816270..6c520656e0 100644 --- a/src/test/test_checkdir.c +++ b/src/test/test_checkdir.c @@ -31,41 +31,41 @@ test_checkdir_perms(void *testdata) /* setup data directory before tests. */ tor_free(options->DataDirectory); options->DataDirectory = tor_strdup(get_fname(subdir)); - tt_int_op(mkdir(options->DataDirectory, 0750), ==, 0); + tt_int_op(mkdir(options->DataDirectory, 0750), OP_EQ, 0); /* test: create new dir, no flags. */ testdir = get_datadir_fname("checkdir_new_none"); cpd_chkopts = CPD_CREATE; unix_verify_optsmask = 0077; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: create new dir, CPD_GROUP_OK option set. */ testdir = get_datadir_fname("checkdir_new_groupok"); cpd_chkopts = CPD_CREATE|CPD_GROUP_OK; unix_verify_optsmask = 0077; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: should get an error on existing dir with wrong perms */ testdir = get_datadir_fname("checkdir_new_groupok_err"); - tt_int_op(0, ==, mkdir(testdir, 027)); + tt_int_op(0, OP_EQ, mkdir(testdir, 027)); cpd_chkopts = CPD_CHECK_MODE_ONLY|CPD_CREATE|CPD_GROUP_OK; - tt_int_op_nowin(-1, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op_nowin(-1, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); tor_free(testdir); /* test: create new dir, CPD_GROUP_READ option set. */ testdir = get_datadir_fname("checkdir_new_groupread"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; unix_verify_optsmask = 0027; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with defaults, @@ -75,10 +75,10 @@ test_checkdir_perms(void *testdata) unix_create_opts = 0700; (void)unix_create_opts; unix_verify_optsmask = 0077; - tt_int_op(0, ==, mkdir(testdir, unix_create_opts)); - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, mkdir(testdir, unix_create_opts)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with defaults, @@ -86,11 +86,11 @@ test_checkdir_perms(void *testdata) testdir = get_datadir_fname("checkdir_exists_groupok"); cpd_chkopts = CPD_CREATE; unix_verify_optsmask = 0077; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); cpd_chkopts = CPD_GROUP_OK; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with defaults, @@ -98,11 +98,11 @@ test_checkdir_perms(void *testdata) testdir = get_datadir_fname("checkdir_exists_groupread"); cpd_chkopts = CPD_CREATE; unix_verify_optsmask = 0027; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); cpd_chkopts = CPD_GROUP_READ; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with CPD_GROUP_READ, @@ -110,11 +110,11 @@ test_checkdir_perms(void *testdata) testdir = get_datadir_fname("checkdir_existsread_groupok"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; unix_verify_optsmask = 0027; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); cpd_chkopts = CPD_GROUP_OK; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); tor_free(testdir); /* test: check existing dir created with CPD_GROUP_READ, @@ -122,9 +122,9 @@ test_checkdir_perms(void *testdata) testdir = get_datadir_fname("checkdir_existsread_groupread"); cpd_chkopts = CPD_CREATE|CPD_GROUP_READ; unix_verify_optsmask = 0027; - tt_int_op(0, ==, check_private_dir(testdir, cpd_chkopts, NULL)); - tt_int_op(0, ==, stat(testdir, &st)); - tt_int_op_nowin(0, ==, (st.st_mode & unix_verify_optsmask)); + tt_int_op(0, OP_EQ, check_private_dir(testdir, cpd_chkopts, NULL)); + tt_int_op(0, OP_EQ, stat(testdir, &st)); + tt_int_op_nowin(0, OP_EQ, (st.st_mode & unix_verify_optsmask)); done: tor_free(testdir); diff --git a/src/test/test_circuitlist.c b/src/test/test_circuitlist.c index fb5488b627..181aec20a9 100644 --- a/src/test/test_circuitlist.c +++ b/src/test/test_circuitlist.c @@ -50,17 +50,17 @@ circuitmux_detach_mock(circuitmux_t *cmux, circuit_t *circ) } #define GOT_CMUX_ATTACH(mux_, circ_, dir_) do { \ - tt_int_op(cam.ncalls, ==, 1); \ - tt_ptr_op(cam.cmux, ==, (mux_)); \ - tt_ptr_op(cam.circ, ==, (circ_)); \ - tt_int_op(cam.dir, ==, (dir_)); \ + tt_int_op(cam.ncalls, OP_EQ, 1); \ + tt_ptr_op(cam.cmux, OP_EQ, (mux_)); \ + tt_ptr_op(cam.circ, OP_EQ, (circ_)); \ + tt_int_op(cam.dir, OP_EQ, (dir_)); \ memset(&cam, 0, sizeof(cam)); \ } while (0) #define GOT_CMUX_DETACH(mux_, circ_) do { \ - tt_int_op(cdm.ncalls, ==, 1); \ - tt_ptr_op(cdm.cmux, ==, (mux_)); \ - tt_ptr_op(cdm.circ, ==, (circ_)); \ + tt_int_op(cdm.ncalls, OP_EQ, 1); \ + tt_ptr_op(cdm.cmux, OP_EQ, (mux_)); \ + tt_ptr_op(cdm.circ, OP_EQ, (circ_)); \ memset(&cdm, 0, sizeof(cdm)); \ } while (0) @@ -90,14 +90,14 @@ test_clist_maps(void *arg) or_c1 = or_circuit_new(100, ch2); tt_assert(or_c1); GOT_CMUX_ATTACH(ch2->cmux, or_c1, CELL_DIRECTION_IN); - tt_int_op(or_c1->p_circ_id, ==, 100); - tt_ptr_op(or_c1->p_chan, ==, ch2); + tt_int_op(or_c1->p_circ_id, OP_EQ, 100); + tt_ptr_op(or_c1->p_chan, OP_EQ, ch2); or_c2 = or_circuit_new(100, ch1); tt_assert(or_c2); GOT_CMUX_ATTACH(ch1->cmux, or_c2, CELL_DIRECTION_IN); - tt_int_op(or_c2->p_circ_id, ==, 100); - tt_ptr_op(or_c2->p_chan, ==, ch1); + tt_int_op(or_c2->p_circ_id, OP_EQ, 100); + tt_ptr_op(or_c2->p_chan, OP_EQ, ch1); circuit_set_n_circid_chan(TO_CIRCUIT(or_c1), 200, ch1); GOT_CMUX_ATTACH(ch1->cmux, or_c1, CELL_DIRECTION_OUT); @@ -105,11 +105,11 @@ test_clist_maps(void *arg) circuit_set_n_circid_chan(TO_CIRCUIT(or_c2), 200, ch2); GOT_CMUX_ATTACH(ch2->cmux, or_c2, CELL_DIRECTION_OUT); - tt_ptr_op(circuit_get_by_circid_channel(200, ch1), ==, TO_CIRCUIT(or_c1)); - tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, TO_CIRCUIT(or_c2)); - tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, TO_CIRCUIT(or_c1)); + tt_ptr_op(circuit_get_by_circid_channel(200, ch1), OP_EQ, TO_CIRCUIT(or_c1)); + tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, TO_CIRCUIT(or_c2)); + tt_ptr_op(circuit_get_by_circid_channel(100, ch2), OP_EQ, TO_CIRCUIT(or_c1)); /* Try the same thing again, to test the "fast" path. */ - tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, TO_CIRCUIT(or_c1)); + tt_ptr_op(circuit_get_by_circid_channel(100, ch2), OP_EQ, TO_CIRCUIT(or_c1)); tt_assert(circuit_id_in_use_on_channel(100, ch2)); tt_assert(! circuit_id_in_use_on_channel(101, ch2)); @@ -117,9 +117,9 @@ test_clist_maps(void *arg) circuit_set_p_circid_chan(or_c1, 500, ch3); GOT_CMUX_DETACH(ch2->cmux, TO_CIRCUIT(or_c1)); GOT_CMUX_ATTACH(ch3->cmux, TO_CIRCUIT(or_c1), CELL_DIRECTION_IN); - tt_ptr_op(circuit_get_by_circid_channel(100, ch2), ==, NULL); + tt_ptr_op(circuit_get_by_circid_channel(100, ch2), OP_EQ, NULL); tt_assert(! circuit_id_in_use_on_channel(100, ch2)); - tt_ptr_op(circuit_get_by_circid_channel(500, ch3), ==, TO_CIRCUIT(or_c1)); + tt_ptr_op(circuit_get_by_circid_channel(500, ch3), OP_EQ, TO_CIRCUIT(or_c1)); /* Now let's see about destroy handling. */ tt_assert(! circuit_id_in_use_on_channel(205, ch2)); @@ -132,26 +132,26 @@ test_clist_maps(void *arg) tt_assert(circuit_id_in_use_on_channel(100, ch1)); tt_assert(TO_CIRCUIT(or_c2)->n_delete_pending != 0); - tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, TO_CIRCUIT(or_c2)); - tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, TO_CIRCUIT(or_c2)); + tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, TO_CIRCUIT(or_c2)); + tt_ptr_op(circuit_get_by_circid_channel(100, ch1), OP_EQ, TO_CIRCUIT(or_c2)); /* Okay, now free ch2 and make sure that the circuit ID is STILL not * usable, because we haven't declared the destroy to be nonpending */ - tt_int_op(cdm.ncalls, ==, 0); + tt_int_op(cdm.ncalls, OP_EQ, 0); circuit_free(TO_CIRCUIT(or_c2)); or_c2 = NULL; /* prevent free */ - tt_int_op(cdm.ncalls, ==, 2); + tt_int_op(cdm.ncalls, OP_EQ, 2); memset(&cdm, 0, sizeof(cdm)); tt_assert(circuit_id_in_use_on_channel(200, ch2)); tt_assert(circuit_id_in_use_on_channel(100, ch1)); - tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, NULL); - tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL); + tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, NULL); + tt_ptr_op(circuit_get_by_circid_channel(100, ch1), OP_EQ, NULL); /* Now say that the destroy is nonpending */ channel_note_destroy_not_pending(ch2, 200); - tt_ptr_op(circuit_get_by_circid_channel(200, ch2), ==, NULL); + tt_ptr_op(circuit_get_by_circid_channel(200, ch2), OP_EQ, NULL); channel_note_destroy_not_pending(ch1, 100); - tt_ptr_op(circuit_get_by_circid_channel(100, ch1), ==, NULL); + tt_ptr_op(circuit_get_by_circid_channel(100, ch1), OP_EQ, NULL); tt_assert(! circuit_id_in_use_on_channel(200, ch2)); tt_assert(! circuit_id_in_use_on_channel(100, ch1)); @@ -190,73 +190,73 @@ test_rend_token_maps(void *arg) c4 = or_circuit_new(0, NULL); /* Make sure we really filled up the tok* variables */ - tt_int_op(tok1[REND_TOKEN_LEN-1], ==, 'y'); - tt_int_op(tok2[REND_TOKEN_LEN-1], ==, ' '); - tt_int_op(tok3[REND_TOKEN_LEN-1], ==, '.'); + tt_int_op(tok1[REND_TOKEN_LEN-1], OP_EQ, 'y'); + tt_int_op(tok2[REND_TOKEN_LEN-1], OP_EQ, ' '); + tt_int_op(tok3[REND_TOKEN_LEN-1], OP_EQ, '.'); /* No maps; nothing there. */ - tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1)); - tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1)); + tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1)); + tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok1)); circuit_set_rendezvous_cookie(c1, tok1); circuit_set_intro_point_digest(c2, tok2); - tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok3)); - tt_ptr_op(NULL, ==, circuit_get_intro_point(tok3)); - tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok2)); - tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1)); + tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok3)); + tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok3)); + tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok2)); + tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok1)); /* Without purpose set, we don't get the circuits */ - tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1)); - tt_ptr_op(NULL, ==, circuit_get_intro_point(tok2)); + tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1)); + tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok2)); c1->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING; c2->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT; /* Okay, make sure they show up now. */ - tt_ptr_op(c1, ==, circuit_get_rendezvous(tok1)); - tt_ptr_op(c2, ==, circuit_get_intro_point(tok2)); + tt_ptr_op(c1, OP_EQ, circuit_get_rendezvous(tok1)); + tt_ptr_op(c2, OP_EQ, circuit_get_intro_point(tok2)); /* Two items at the same place with the same token. */ c3->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING; circuit_set_rendezvous_cookie(c3, tok2); - tt_ptr_op(c2, ==, circuit_get_intro_point(tok2)); - tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2)); + tt_ptr_op(c2, OP_EQ, circuit_get_intro_point(tok2)); + tt_ptr_op(c3, OP_EQ, circuit_get_rendezvous(tok2)); /* Marking a circuit makes it not get returned any more */ circuit_mark_for_close(TO_CIRCUIT(c1), END_CIRC_REASON_FINISHED); - tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1)); + tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1)); circuit_free(TO_CIRCUIT(c1)); c1 = NULL; /* Freeing a circuit makes it not get returned any more. */ circuit_free(TO_CIRCUIT(c2)); c2 = NULL; - tt_ptr_op(NULL, ==, circuit_get_intro_point(tok2)); + tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok2)); /* c3 -- are you still there? */ - tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2)); + tt_ptr_op(c3, OP_EQ, circuit_get_rendezvous(tok2)); /* Change its cookie. This never happens in Tor per se, but hey. */ c3->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT; circuit_set_intro_point_digest(c3, tok3); - tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok2)); - tt_ptr_op(c3, ==, circuit_get_intro_point(tok3)); + tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok2)); + tt_ptr_op(c3, OP_EQ, circuit_get_intro_point(tok3)); /* Now replace c3 with c4. */ c4->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT; circuit_set_intro_point_digest(c4, tok3); - tt_ptr_op(c4, ==, circuit_get_intro_point(tok3)); + tt_ptr_op(c4, OP_EQ, circuit_get_intro_point(tok3)); - tt_ptr_op(c3->rendinfo, ==, NULL); - tt_ptr_op(c4->rendinfo, !=, NULL); - tt_mem_op(c4->rendinfo, ==, tok3, REND_TOKEN_LEN); + tt_ptr_op(c3->rendinfo, OP_EQ, NULL); + tt_ptr_op(c4->rendinfo, OP_NE, NULL); + tt_mem_op(c4->rendinfo, OP_EQ, tok3, REND_TOKEN_LEN); /* Now clear c4's cookie. */ circuit_set_intro_point_digest(c4, NULL); - tt_ptr_op(c4->rendinfo, ==, NULL); - tt_ptr_op(NULL, ==, circuit_get_intro_point(tok3)); + tt_ptr_op(c4->rendinfo, OP_EQ, NULL); + tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok3)); done: if (c1) @@ -283,32 +283,32 @@ test_pick_circid(void *arg) chan2->wide_circ_ids = 1; chan1->circ_id_type = CIRC_ID_TYPE_NEITHER; - tt_int_op(0, ==, get_unique_circ_id_by_chan(chan1)); + tt_int_op(0, OP_EQ, get_unique_circ_id_by_chan(chan1)); /* Basic tests, with no collisions */ chan1->circ_id_type = CIRC_ID_TYPE_LOWER; for (i = 0; i < 50; ++i) { circid = get_unique_circ_id_by_chan(chan1); - tt_uint_op(0, <, circid); - tt_uint_op(circid, <, (1<<15)); + tt_uint_op(0, OP_LT, circid); + tt_uint_op(circid, OP_LT, (1<<15)); } chan1->circ_id_type = CIRC_ID_TYPE_HIGHER; for (i = 0; i < 50; ++i) { circid = get_unique_circ_id_by_chan(chan1); - tt_uint_op((1<<15), <, circid); - tt_uint_op(circid, <, (1<<16)); + tt_uint_op((1<<15), OP_LT, circid); + tt_uint_op(circid, OP_LT, (1<<16)); } chan2->circ_id_type = CIRC_ID_TYPE_LOWER; for (i = 0; i < 50; ++i) { circid = get_unique_circ_id_by_chan(chan2); - tt_uint_op(0, <, circid); - tt_uint_op(circid, <, (1u<<31)); + tt_uint_op(0, OP_LT, circid); + tt_uint_op(circid, OP_LT, (1u<<31)); } chan2->circ_id_type = CIRC_ID_TYPE_HIGHER; for (i = 0; i < 50; ++i) { circid = get_unique_circ_id_by_chan(chan2); - tt_uint_op((1u<<31), <, circid); + tt_uint_op((1u<<31), OP_LT, circid); } /* Now make sure that we can behave well when we are full up on circuits */ @@ -319,20 +319,20 @@ test_pick_circid(void *arg) for (i = 0; i < (1<<15); ++i) { circid = get_unique_circ_id_by_chan(chan1); if (circid == 0) { - tt_int_op(i, >, (1<<14)); + tt_int_op(i, OP_GT, (1<<14)); break; } - tt_uint_op(circid, <, (1<<15)); + tt_uint_op(circid, OP_LT, (1<<15)); tt_assert(! bitarray_is_set(ba, circid)); bitarray_set(ba, circid); channel_mark_circid_unusable(chan1, circid); } - tt_int_op(i, <, (1<<15)); + tt_int_op(i, OP_LT, (1<<15)); /* Make sure that being full on chan1 does not interfere with chan2 */ for (i = 0; i < 100; ++i) { circid = get_unique_circ_id_by_chan(chan2); - tt_uint_op(circid, >, 0); - tt_uint_op(circid, <, (1<<15)); + tt_uint_op(circid, OP_GT, 0); + tt_uint_op(circid, OP_LT, (1<<15)); channel_mark_circid_unusable(chan2, circid); } diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c index 446fc88b3c..b8590d6d24 100644 --- a/src/test/test_circuitmux.c +++ b/src/test/test_circuitmux.c @@ -55,21 +55,21 @@ test_cmux_destroy_cell_queue(void *arg) circuitmux_append_destroy_cell(ch, cmux, 190, 6); circuitmux_append_destroy_cell(ch, cmux, 30, 1); - tt_int_op(circuitmux_num_cells(cmux), ==, 3); + tt_int_op(circuitmux_num_cells(cmux), OP_EQ, 3); circ = circuitmux_get_first_active_circuit(cmux, &cq); tt_assert(!circ); tt_assert(cq); - tt_int_op(cq->n, ==, 3); + tt_int_op(cq->n, OP_EQ, 3); pc = cell_queue_pop(cq); tt_assert(pc); - tt_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9); + tt_mem_op(pc->body, OP_EQ, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9); packed_cell_free(pc); pc = NULL; - tt_int_op(circuitmux_num_cells(cmux), ==, 2); + tt_int_op(circuitmux_num_cells(cmux), OP_EQ, 2); done: circuitmux_free(cmux); diff --git a/src/test/test_config.c b/src/test/test_config.c index 71c338e5f8..1560c5c6f7 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -65,22 +65,22 @@ test_config_addressmap(void *arg) /* MapAddress .google.com .torserver.exit */ strlcpy(address, "reader.google.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "reader.torserver.exit"); + tt_str_op(address,OP_EQ, "reader.torserver.exit"); /* MapAddress *.yahoo.com *.google.com.torserver.exit */ strlcpy(address, "reader.yahoo.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "reader.google.com.torserver.exit"); + tt_str_op(address,OP_EQ, "reader.google.com.torserver.exit"); /*MapAddress *.cnn.com www.cnn.com */ strlcpy(address, "cnn.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "www.cnn.com"); + tt_str_op(address,OP_EQ, "www.cnn.com"); /* MapAddress .cn.com www.cnn.com */ strlcpy(address, "www.cn.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "www.cnn.com"); + tt_str_op(address,OP_EQ, "www.cnn.com"); /* MapAddress ex.com www.cnn.com - no match */ strlcpy(address, "www.ex.com", sizeof(address)); @@ -93,19 +93,19 @@ test_config_addressmap(void *arg) /* Where mapping for FQDN match on FQDN */ strlcpy(address, "www.google.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "3.3.3.3"); + tt_str_op(address,OP_EQ, "3.3.3.3"); strlcpy(address, "www.torproject.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "1.1.1.1"); + tt_str_op(address,OP_EQ, "1.1.1.1"); strlcpy(address, "other.torproject.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "this.torproject.org.otherserver.exit"); + tt_str_op(address,OP_EQ, "this.torproject.org.otherserver.exit"); strlcpy(address, "test.torproject.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "2.2.2.2"); + tt_str_op(address,OP_EQ, "2.2.2.2"); /* Test a chain of address mappings and the order in which they were added: "MapAddress www.example.org 4.4.4.4" @@ -114,12 +114,12 @@ test_config_addressmap(void *arg) */ strlcpy(address, "www.example.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "5.5.5.5"); + tt_str_op(address,OP_EQ, "5.5.5.5"); /* Test infinite address mapping results in no change */ strlcpy(address, "www.infiniteloop.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "www.infiniteloop.org"); + tt_str_op(address,OP_EQ, "www.infiniteloop.org"); /* Test we don't find false positives */ strlcpy(address, "www.example.com", sizeof(address)); @@ -137,23 +137,23 @@ test_config_addressmap(void *arg) strlcpy(address, "www.abc.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "www.abc.torserver.exit"); + tt_str_op(address,OP_EQ, "www.abc.torserver.exit"); strlcpy(address, "www.def.com", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "www.def.torserver.exit"); + tt_str_op(address,OP_EQ, "www.def.torserver.exit"); strlcpy(address, "www.torproject.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "1.1.1.1"); + tt_str_op(address,OP_EQ, "1.1.1.1"); strlcpy(address, "test.torproject.org", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "1.1.1.1"); + tt_str_op(address,OP_EQ, "1.1.1.1"); strlcpy(address, "torproject.net", sizeof(address)); tt_assert(addressmap_rewrite(address, sizeof(address), &expires, NULL)); - tt_str_op(address,==, "2.2.2.2"); + tt_str_op(address,OP_EQ, "2.2.2.2"); /* We don't support '*' as a mapping directive */ config_free_lines(get_options_mutable()->AddressMap); @@ -213,9 +213,9 @@ test_config_check_or_create_data_subdir(void *arg) subpath = get_datadir_fname(subdir); #if defined (_WIN32) - tt_int_op(mkdir(options->DataDirectory), ==, 0); + tt_int_op(mkdir(options->DataDirectory), OP_EQ, 0); #else - tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0); + tt_int_op(mkdir(options->DataDirectory, 0700), OP_EQ, 0); #endif r = stat(subpath, &st); @@ -287,9 +287,9 @@ test_config_write_to_data_subdir(void *arg) filepath = get_datadir_fname2(subdir, fname); #if defined (_WIN32) - tt_int_op(mkdir(options->DataDirectory), ==, 0); + tt_int_op(mkdir(options->DataDirectory), OP_EQ, 0); #else - tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0); + tt_int_op(mkdir(options->DataDirectory, 0700), OP_EQ, 0); #endif // Write attempt shoudl fail, if subdirectory doesn't exist. @@ -300,13 +300,13 @@ test_config_write_to_data_subdir(void *arg) // equal to the original string. tt_assert(!write_to_data_subdir(subdir, fname, str, NULL)); cp = read_file_to_str(filepath, 0, NULL); - tt_str_op(cp,==, str); + tt_str_op(cp,OP_EQ, str); tor_free(cp); // A second write operation should overwrite the old content. tt_assert(!write_to_data_subdir(subdir, fname, str, NULL)); cp = read_file_to_str(filepath, 0, NULL); - tt_str_op(cp,==, str); + tt_str_op(cp,OP_EQ, str); tor_free(cp); done: @@ -331,7 +331,7 @@ good_bridge_line_test(const char *string, const char *test_addrport, /* test addrport */ tmp = tor_strdup(fmt_addrport(&bridge_line->addr, bridge_line->port)); - tt_str_op(test_addrport,==, tmp); + tt_str_op(test_addrport,OP_EQ, tmp); tor_free(tmp); /* If we were asked to validate a digest, but we did not get a @@ -349,7 +349,7 @@ good_bridge_line_test(const char *string, const char *test_addrport, if (test_digest) { tmp = tor_strdup(hex_str(bridge_line->digest, DIGEST_LEN)); tor_strlower(tmp); - tt_str_op(test_digest,==, tmp); + tt_str_op(test_digest,OP_EQ, tmp); tor_free(tmp); } @@ -360,7 +360,7 @@ good_bridge_line_test(const char *string, const char *test_addrport, if (!test_transport && bridge_line->transport_name) tt_assert(0); if (test_transport) - tt_str_op(test_transport,==, bridge_line->transport_name); + tt_str_op(test_transport,OP_EQ, bridge_line->transport_name); /* Validate the SOCKS argument smartlist. */ if (test_socks_args && !bridge_line->socks_args) @@ -839,7 +839,7 @@ test_config_fix_my_family(void *arg) TT_FAIL(("options_validate failed: %s", err)); } - tt_str_op(options->MyFamily,==, "$1111111111111111111111111111111111111111, " + tt_str_op(options->MyFamily,OP_EQ, "$1111111111111111111111111111111111111111, " "$1111111111111111111111111111111111111112, " "$1111111111111111111111111111111111111113"); diff --git a/src/test/test_containers.c b/src/test/test_containers.c index d0972dd126..89eb1a20b5 100644 --- a/src/test/test_containers.c +++ b/src/test/test_containers.c @@ -62,18 +62,18 @@ test_container_smartlist_basic(void *arg) smartlist_insert(sl, 1, v22); smartlist_insert(sl, 0, v0); smartlist_insert(sl, 5, v555); - tt_ptr_op(v0,==, smartlist_get(sl,0)); - tt_ptr_op(v1,==, smartlist_get(sl,1)); - tt_ptr_op(v22,==, smartlist_get(sl,2)); - tt_ptr_op(v3,==, smartlist_get(sl,3)); - tt_ptr_op(v4,==, smartlist_get(sl,4)); - tt_ptr_op(v555,==, smartlist_get(sl,5)); + tt_ptr_op(v0,OP_EQ, smartlist_get(sl,0)); + tt_ptr_op(v1,OP_EQ, smartlist_get(sl,1)); + tt_ptr_op(v22,OP_EQ, smartlist_get(sl,2)); + tt_ptr_op(v3,OP_EQ, smartlist_get(sl,3)); + tt_ptr_op(v4,OP_EQ, smartlist_get(sl,4)); + tt_ptr_op(v555,OP_EQ, smartlist_get(sl,5)); /* Try deleting in the middle. */ smartlist_del(sl, 1); - tt_ptr_op(v555,==, smartlist_get(sl, 1)); + tt_ptr_op(v555,OP_EQ, smartlist_get(sl, 1)); /* Try deleting at the end. */ smartlist_del(sl, 4); - tt_int_op(4,==, smartlist_len(sl)); + tt_int_op(4,OP_EQ, smartlist_len(sl)); /* test isin. */ tt_assert(smartlist_contains(sl, v3)); @@ -101,119 +101,119 @@ test_container_smartlist_strings(void *arg) /* Test split and join */ (void)arg; - tt_int_op(0,==, smartlist_len(sl)); + tt_int_op(0,OP_EQ, smartlist_len(sl)); smartlist_split_string(sl, "abc", ":", 0, 0); - tt_int_op(1,==, smartlist_len(sl)); - tt_str_op("abc",==, smartlist_get(sl, 0)); + tt_int_op(1,OP_EQ, smartlist_len(sl)); + tt_str_op("abc",OP_EQ, smartlist_get(sl, 0)); smartlist_split_string(sl, "a::bc::", "::", 0, 0); - tt_int_op(4,==, smartlist_len(sl)); - tt_str_op("a",==, smartlist_get(sl, 1)); - tt_str_op("bc",==, smartlist_get(sl, 2)); - tt_str_op("",==, smartlist_get(sl, 3)); + tt_int_op(4,OP_EQ, smartlist_len(sl)); + tt_str_op("a",OP_EQ, smartlist_get(sl, 1)); + tt_str_op("bc",OP_EQ, smartlist_get(sl, 2)); + tt_str_op("",OP_EQ, smartlist_get(sl, 3)); cp_alloc = smartlist_join_strings(sl, "", 0, NULL); - tt_str_op(cp_alloc,==, "abcabc"); + tt_str_op(cp_alloc,OP_EQ, "abcabc"); tor_free(cp_alloc); cp_alloc = smartlist_join_strings(sl, "!", 0, NULL); - tt_str_op(cp_alloc,==, "abc!a!bc!"); + tt_str_op(cp_alloc,OP_EQ, "abc!a!bc!"); tor_free(cp_alloc); cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL); - tt_str_op(cp_alloc,==, "abcXYaXYbcXY"); + tt_str_op(cp_alloc,OP_EQ, "abcXYaXYbcXY"); tor_free(cp_alloc); cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL); - tt_str_op(cp_alloc,==, "abcXYaXYbcXYXY"); + tt_str_op(cp_alloc,OP_EQ, "abcXYaXYbcXYXY"); tor_free(cp_alloc); cp_alloc = smartlist_join_strings(sl, "", 1, NULL); - tt_str_op(cp_alloc,==, "abcabc"); + tt_str_op(cp_alloc,OP_EQ, "abcabc"); tor_free(cp_alloc); smartlist_split_string(sl, "/def/ /ghijk", "/", 0, 0); - tt_int_op(8,==, smartlist_len(sl)); - tt_str_op("",==, smartlist_get(sl, 4)); - tt_str_op("def",==, smartlist_get(sl, 5)); - tt_str_op(" ",==, smartlist_get(sl, 6)); - tt_str_op("ghijk",==, smartlist_get(sl, 7)); + tt_int_op(8,OP_EQ, smartlist_len(sl)); + tt_str_op("",OP_EQ, smartlist_get(sl, 4)); + tt_str_op("def",OP_EQ, smartlist_get(sl, 5)); + tt_str_op(" ",OP_EQ, smartlist_get(sl, 6)); + tt_str_op("ghijk",OP_EQ, smartlist_get(sl, 7)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); smartlist_split_string(sl, "a,bbd,cdef", ",", SPLIT_SKIP_SPACE, 0); - tt_int_op(3,==, smartlist_len(sl)); - tt_str_op("a",==, smartlist_get(sl,0)); - tt_str_op("bbd",==, smartlist_get(sl,1)); - tt_str_op("cdef",==, smartlist_get(sl,2)); + tt_int_op(3,OP_EQ, smartlist_len(sl)); + tt_str_op("a",OP_EQ, smartlist_get(sl,0)); + tt_str_op("bbd",OP_EQ, smartlist_get(sl,1)); + tt_str_op("cdef",OP_EQ, smartlist_get(sl,2)); smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>", SPLIT_SKIP_SPACE, 0); - tt_int_op(8,==, smartlist_len(sl)); - tt_str_op("z",==, smartlist_get(sl,3)); - tt_str_op("zhasd",==, smartlist_get(sl,4)); - tt_str_op("",==, smartlist_get(sl,5)); - tt_str_op("bnud",==, smartlist_get(sl,6)); - tt_str_op("",==, smartlist_get(sl,7)); + tt_int_op(8,OP_EQ, smartlist_len(sl)); + tt_str_op("z",OP_EQ, smartlist_get(sl,3)); + tt_str_op("zhasd",OP_EQ, smartlist_get(sl,4)); + tt_str_op("",OP_EQ, smartlist_get(sl,5)); + tt_str_op("bnud",OP_EQ, smartlist_get(sl,6)); + tt_str_op("",OP_EQ, smartlist_get(sl,7)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); smartlist_split_string(sl, " ab\tc \td ef ", NULL, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - tt_int_op(4,==, smartlist_len(sl)); - tt_str_op("ab",==, smartlist_get(sl,0)); - tt_str_op("c",==, smartlist_get(sl,1)); - tt_str_op("d",==, smartlist_get(sl,2)); - tt_str_op("ef",==, smartlist_get(sl,3)); + tt_int_op(4,OP_EQ, smartlist_len(sl)); + tt_str_op("ab",OP_EQ, smartlist_get(sl,0)); + tt_str_op("c",OP_EQ, smartlist_get(sl,1)); + tt_str_op("d",OP_EQ, smartlist_get(sl,2)); + tt_str_op("ef",OP_EQ, smartlist_get(sl,3)); smartlist_split_string(sl, "ghi\tj", NULL, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - tt_int_op(6,==, smartlist_len(sl)); - tt_str_op("ghi",==, smartlist_get(sl,4)); - tt_str_op("j",==, smartlist_get(sl,5)); + tt_int_op(6,OP_EQ, smartlist_len(sl)); + tt_str_op("ghi",OP_EQ, smartlist_get(sl,4)); + tt_str_op("j",OP_EQ, smartlist_get(sl,5)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); cp_alloc = smartlist_join_strings(sl, "XY", 0, NULL); - tt_str_op(cp_alloc,==, ""); + tt_str_op(cp_alloc,OP_EQ, ""); tor_free(cp_alloc); cp_alloc = smartlist_join_strings(sl, "XY", 1, NULL); - tt_str_op(cp_alloc,==, "XY"); + tt_str_op(cp_alloc,OP_EQ, "XY"); tor_free(cp_alloc); smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>", SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - tt_int_op(3,==, smartlist_len(sl)); - tt_str_op("z",==, smartlist_get(sl, 0)); - tt_str_op("zhasd",==, smartlist_get(sl, 1)); - tt_str_op("bnud",==, smartlist_get(sl, 2)); + tt_int_op(3,OP_EQ, smartlist_len(sl)); + tt_str_op("z",OP_EQ, smartlist_get(sl, 0)); + tt_str_op("zhasd",OP_EQ, smartlist_get(sl, 1)); + tt_str_op("bnud",OP_EQ, smartlist_get(sl, 2)); smartlist_split_string(sl, " z <> zhasd <> <> bnud<> ", "<>", SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 2); - tt_int_op(5,==, smartlist_len(sl)); - tt_str_op("z",==, smartlist_get(sl, 3)); - tt_str_op("zhasd <> <> bnud<>",==, smartlist_get(sl, 4)); + tt_int_op(5,OP_EQ, smartlist_len(sl)); + tt_str_op("z",OP_EQ, smartlist_get(sl, 3)); + tt_str_op("zhasd <> <> bnud<>",OP_EQ, smartlist_get(sl, 4)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); smartlist_split_string(sl, "abcd\n", "\n", SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - tt_int_op(1,==, smartlist_len(sl)); - tt_str_op("abcd",==, smartlist_get(sl, 0)); + tt_int_op(1,OP_EQ, smartlist_len(sl)); + tt_str_op("abcd",OP_EQ, smartlist_get(sl, 0)); smartlist_split_string(sl, "efgh", "\n", SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - tt_int_op(2,==, smartlist_len(sl)); - tt_str_op("efgh",==, smartlist_get(sl, 1)); + tt_int_op(2,OP_EQ, smartlist_len(sl)); + tt_str_op("efgh",OP_EQ, smartlist_get(sl, 1)); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* Test swapping, shuffling, and sorting. */ smartlist_split_string(sl, "the,onion,router,by,arma,and,nickm", ",", 0, 0); - tt_int_op(7,==, smartlist_len(sl)); + tt_int_op(7,OP_EQ, smartlist_len(sl)); smartlist_sort(sl, compare_strs_); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); - tt_str_op(cp_alloc,==, "and,arma,by,nickm,onion,router,the"); + tt_str_op(cp_alloc,OP_EQ, "and,arma,by,nickm,onion,router,the"); tor_free(cp_alloc); smartlist_swap(sl, 1, 5); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); - tt_str_op(cp_alloc,==, "and,router,by,nickm,onion,arma,the"); + tt_str_op(cp_alloc,OP_EQ, "and,router,by,nickm,onion,arma,the"); tor_free(cp_alloc); smartlist_shuffle(sl); - tt_int_op(7,==, smartlist_len(sl)); + tt_int_op(7,OP_EQ, smartlist_len(sl)); tt_assert(smartlist_contains_string(sl, "and")); tt_assert(smartlist_contains_string(sl, "router")); tt_assert(smartlist_contains_string(sl, "by")); @@ -224,69 +224,69 @@ test_container_smartlist_strings(void *arg) /* Test bsearch. */ smartlist_sort(sl, compare_strs_); - tt_str_op("nickm",==, smartlist_bsearch(sl, "zNicKM", + tt_str_op("nickm",OP_EQ, smartlist_bsearch(sl, "zNicKM", cmp_without_first_)); - tt_str_op("and",==, + tt_str_op("and",OP_EQ, smartlist_bsearch(sl, " AND", cmp_without_first_)); - tt_ptr_op(NULL,==, smartlist_bsearch(sl, " ANz", cmp_without_first_)); + tt_ptr_op(NULL,OP_EQ, smartlist_bsearch(sl, " ANz", cmp_without_first_)); /* Test bsearch_idx */ { int f; smartlist_t *tmp = NULL; - tt_int_op(0,==,smartlist_bsearch_idx(sl," aaa",cmp_without_first_,&f)); - tt_int_op(f,==, 0); - tt_int_op(0,==, smartlist_bsearch_idx(sl," and",cmp_without_first_,&f)); - tt_int_op(f,==, 1); - tt_int_op(1,==, smartlist_bsearch_idx(sl," arm",cmp_without_first_,&f)); - tt_int_op(f,==, 0); - tt_int_op(1,==, smartlist_bsearch_idx(sl," arma",cmp_without_first_,&f)); - tt_int_op(f,==, 1); - tt_int_op(2,==, smartlist_bsearch_idx(sl," armb",cmp_without_first_,&f)); - tt_int_op(f,==, 0); - tt_int_op(7,==, smartlist_bsearch_idx(sl," zzzz",cmp_without_first_,&f)); - tt_int_op(f,==, 0); + tt_int_op(0,OP_EQ,smartlist_bsearch_idx(sl," aaa",cmp_without_first_,&f)); + tt_int_op(f,OP_EQ, 0); + tt_int_op(0,OP_EQ, smartlist_bsearch_idx(sl," and",cmp_without_first_,&f)); + tt_int_op(f,OP_EQ, 1); + tt_int_op(1,OP_EQ, smartlist_bsearch_idx(sl," arm",cmp_without_first_,&f)); + tt_int_op(f,OP_EQ, 0); + tt_int_op(1,OP_EQ, smartlist_bsearch_idx(sl," arma",cmp_without_first_,&f)); + tt_int_op(f,OP_EQ, 1); + tt_int_op(2,OP_EQ, smartlist_bsearch_idx(sl," armb",cmp_without_first_,&f)); + tt_int_op(f,OP_EQ, 0); + tt_int_op(7,OP_EQ, smartlist_bsearch_idx(sl," zzzz",cmp_without_first_,&f)); + tt_int_op(f,OP_EQ, 0); /* Test trivial cases for list of length 0 or 1 */ tmp = smartlist_new(); - tt_int_op(0,==, smartlist_bsearch_idx(tmp, "foo", + tt_int_op(0,OP_EQ, smartlist_bsearch_idx(tmp, "foo", compare_strs_for_bsearch_, &f)); - tt_int_op(f,==, 0); + tt_int_op(f,OP_EQ, 0); smartlist_insert(tmp, 0, (void *)("bar")); - tt_int_op(1,==, smartlist_bsearch_idx(tmp, "foo", + tt_int_op(1,OP_EQ, smartlist_bsearch_idx(tmp, "foo", compare_strs_for_bsearch_, &f)); - tt_int_op(f,==, 0); - tt_int_op(0,==, smartlist_bsearch_idx(tmp, "aaa", + tt_int_op(f,OP_EQ, 0); + tt_int_op(0,OP_EQ, smartlist_bsearch_idx(tmp, "aaa", compare_strs_for_bsearch_, &f)); - tt_int_op(f,==, 0); - tt_int_op(0,==, smartlist_bsearch_idx(tmp, "bar", + tt_int_op(f,OP_EQ, 0); + tt_int_op(0,OP_EQ, smartlist_bsearch_idx(tmp, "bar", compare_strs_for_bsearch_, &f)); - tt_int_op(f,==, 1); + tt_int_op(f,OP_EQ, 1); /* ... and one for length 2 */ smartlist_insert(tmp, 1, (void *)("foo")); - tt_int_op(1,==, smartlist_bsearch_idx(tmp, "foo", + tt_int_op(1,OP_EQ, smartlist_bsearch_idx(tmp, "foo", compare_strs_for_bsearch_, &f)); - tt_int_op(f,==, 1); - tt_int_op(2,==, smartlist_bsearch_idx(tmp, "goo", + tt_int_op(f,OP_EQ, 1); + tt_int_op(2,OP_EQ, smartlist_bsearch_idx(tmp, "goo", compare_strs_for_bsearch_, &f)); - tt_int_op(f,==, 0); + tt_int_op(f,OP_EQ, 0); smartlist_free(tmp); } /* Test reverse() and pop_last() */ smartlist_reverse(sl); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); - tt_str_op(cp_alloc,==, "the,router,onion,nickm,by,arma,and"); + tt_str_op(cp_alloc,OP_EQ, "the,router,onion,nickm,by,arma,and"); tor_free(cp_alloc); cp_alloc = smartlist_pop_last(sl); - tt_str_op(cp_alloc,==, "and"); + tt_str_op(cp_alloc,OP_EQ, "and"); tor_free(cp_alloc); - tt_int_op(smartlist_len(sl),==, 6); + tt_int_op(smartlist_len(sl),OP_EQ, 6); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); cp_alloc = smartlist_pop_last(sl); - tt_ptr_op(cp_alloc,==, NULL); + tt_ptr_op(cp_alloc,OP_EQ, NULL); /* Test uniq() */ smartlist_split_string(sl, @@ -295,7 +295,7 @@ test_container_smartlist_strings(void *arg) smartlist_sort(sl, compare_strs_); smartlist_uniq(sl, compare_strs_, tor_free_); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); - tt_str_op(cp_alloc,==, "50,a,canal,man,noon,panama,plan,radar"); + tt_str_op(cp_alloc,OP_EQ, "50,a,canal,man,noon,panama,plan,radar"); tor_free(cp_alloc); /* Test contains_string, contains_string_case and contains_int_as_string */ @@ -331,17 +331,17 @@ test_container_smartlist_strings(void *arg) "Some say the Earth will end in ice and some in fire", " ", 0, 0); cp = smartlist_get(sl, 4); - tt_str_op(cp,==, "will"); + tt_str_op(cp,OP_EQ, "will"); smartlist_add(sl, cp); smartlist_remove(sl, cp); tor_free(cp); cp_alloc = smartlist_join_strings(sl, ",", 0, NULL); - tt_str_op(cp_alloc,==, "Some,say,the,Earth,fire,end,in,ice,and,some,in"); + tt_str_op(cp_alloc,OP_EQ, "Some,say,the,Earth,fire,end,in,ice,and,some,in"); tor_free(cp_alloc); smartlist_string_remove(sl, "in"); cp_alloc = smartlist_join_strings2(sl, "+XX", 1, 0, &sz); - tt_str_op(cp_alloc,==, "Some+say+the+Earth+fire+end+some+ice+and"); - tt_int_op((int)sz,==, 40); + tt_str_op(cp_alloc,OP_EQ, "Some+say+the+Earth+fire+end+some+ice+and"); + tt_int_op((int)sz,OP_EQ, 40); done: @@ -369,7 +369,7 @@ test_container_smartlist_overlap(void *arg) /* add_all */ smartlist_add_all(ints, odds); smartlist_add_all(ints, evens); - tt_int_op(smartlist_len(ints),==, 10); + tt_int_op(smartlist_len(ints),OP_EQ, 10); smartlist_add(primes, (void*)2); smartlist_add(primes, (void*)3); @@ -385,7 +385,7 @@ test_container_smartlist_overlap(void *arg) /* intersect */ smartlist_add_all(sl, odds); smartlist_intersect(sl, primes); - tt_int_op(smartlist_len(sl),==, 3); + tt_int_op(smartlist_len(sl),OP_EQ, 3); tt_assert(smartlist_contains(sl, (void*)3)); tt_assert(smartlist_contains(sl, (void*)5)); tt_assert(smartlist_contains(sl, (void*)7)); @@ -393,7 +393,7 @@ test_container_smartlist_overlap(void *arg) /* subtract */ smartlist_add_all(sl, primes); smartlist_subtract(sl, odds); - tt_int_op(smartlist_len(sl),==, 1); + tt_int_op(smartlist_len(sl),OP_EQ, 1); tt_assert(smartlist_contains(sl, (void*)2)); done: @@ -415,23 +415,23 @@ test_container_smartlist_digests(void *arg) smartlist_add(sl, tor_memdup("AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN)); smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN)); smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN)); - tt_int_op(0,==, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA")); + tt_int_op(0,OP_EQ, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA")); tt_assert(smartlist_contains_digest(sl, "AAAAAAAAAAAAAAAAAAAA")); tt_assert(smartlist_contains_digest(sl, "\00090AAB2AAAAaasdAAAAA")); - tt_int_op(0,==, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA")); + tt_int_op(0,OP_EQ, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA")); /* sort digests */ smartlist_sort_digests(sl); - tt_mem_op(smartlist_get(sl, 0),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); - tt_mem_op(smartlist_get(sl, 1),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); - tt_mem_op(smartlist_get(sl, 2),==, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN); - tt_int_op(3,==, smartlist_len(sl)); + tt_mem_op(smartlist_get(sl, 0),OP_EQ, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); + tt_mem_op(smartlist_get(sl, 1),OP_EQ, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); + tt_mem_op(smartlist_get(sl, 2),OP_EQ, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN); + tt_int_op(3,OP_EQ, smartlist_len(sl)); /* uniq_digests */ smartlist_uniq_digests(sl); - tt_int_op(2,==, smartlist_len(sl)); - tt_mem_op(smartlist_get(sl, 0),==, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); - tt_mem_op(smartlist_get(sl, 1),==, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN); + tt_int_op(2,OP_EQ, smartlist_len(sl)); + tt_mem_op(smartlist_get(sl, 0),OP_EQ, "\00090AAB2AAAAaasdAAAAA", DIGEST_LEN); + tt_mem_op(smartlist_get(sl, 1),OP_EQ, "AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN); done: SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); @@ -463,7 +463,7 @@ test_container_smartlist_join(void *arg) sl2, char *, cp2, strcmp(cp1,cp2), smartlist_add(sl3, cp2)) { - tt_str_op(cp1,==, cp2); + tt_str_op(cp1,OP_EQ, cp2); smartlist_add(sl4, cp1); } SMARTLIST_FOREACH_JOIN_END(cp1, cp2); @@ -474,10 +474,10 @@ test_container_smartlist_join(void *arg) tt_assert(smartlist_contains(sl, cp) && smartlist_contains_string(sl2, cp))); joined = smartlist_join_strings(sl3, ",", 0, NULL); - tt_str_op(joined,==, "Anemias,Anemias,Crossbowmen,Work"); + tt_str_op(joined,OP_EQ, "Anemias,Anemias,Crossbowmen,Work"); tor_free(joined); joined = smartlist_join_strings(sl4, ",", 0, NULL); - tt_str_op(joined,==, "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance," + tt_str_op(joined,OP_EQ, "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance," "Knish,Know,Manners,Manners,Maraschinos,Wombats,Wombats"); tor_free(joined); @@ -612,7 +612,7 @@ test_container_digestset(void *arg) if (digestset_contains(set, d)) ++false_positives; } - tt_int_op(50, >, false_positives); /* Should be far lower. */ + tt_int_op(50, OP_GT, false_positives); /* Should be far lower. */ done: if (set) @@ -675,31 +675,31 @@ test_container_pqueue(void *arg) OK(); - tt_int_op(smartlist_len(sl),==, 11); - tt_ptr_op(smartlist_get(sl, 0),==, &apples); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &apples); - tt_int_op(smartlist_len(sl),==, 10); + tt_int_op(smartlist_len(sl),OP_EQ, 11); + tt_ptr_op(smartlist_get(sl, 0),OP_EQ, &apples); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &apples); + tt_int_op(smartlist_len(sl),OP_EQ, 10); OK(); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &cows); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &daschunds); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &cows); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &daschunds); smartlist_pqueue_add(sl, cmp, offset, &chinchillas); OK(); smartlist_pqueue_add(sl, cmp, offset, &fireflies); OK(); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &chinchillas); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &eggplants); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fireflies); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &chinchillas); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &eggplants); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &fireflies); OK(); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fish); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &frogs); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &lobsters); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &roquefort); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &fish); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &frogs); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &lobsters); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &roquefort); OK(); - tt_int_op(smartlist_len(sl),==, 3); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &squid); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &weissbier); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &zebras); - tt_int_op(smartlist_len(sl),==, 0); + tt_int_op(smartlist_len(sl),OP_EQ, 3); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &squid); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &weissbier); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &zebras); + tt_int_op(smartlist_len(sl),OP_EQ, 0); OK(); /* Now test remove. */ @@ -709,21 +709,21 @@ test_container_pqueue(void *arg) smartlist_pqueue_add(sl, cmp, offset, &apples); smartlist_pqueue_add(sl, cmp, offset, &squid); smartlist_pqueue_add(sl, cmp, offset, &zebras); - tt_int_op(smartlist_len(sl),==, 6); + tt_int_op(smartlist_len(sl),OP_EQ, 6); OK(); smartlist_pqueue_remove(sl, cmp, offset, &zebras); - tt_int_op(smartlist_len(sl),==, 5); + tt_int_op(smartlist_len(sl),OP_EQ, 5); OK(); smartlist_pqueue_remove(sl, cmp, offset, &cows); - tt_int_op(smartlist_len(sl),==, 4); + tt_int_op(smartlist_len(sl),OP_EQ, 4); OK(); smartlist_pqueue_remove(sl, cmp, offset, &apples); - tt_int_op(smartlist_len(sl),==, 3); + tt_int_op(smartlist_len(sl),OP_EQ, 3); OK(); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &fish); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &frogs); - tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),==, &squid); - tt_int_op(smartlist_len(sl),==, 0); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &fish); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &frogs); + tt_ptr_op(smartlist_pqueue_pop(sl, cmp, offset),OP_EQ, &squid); + tt_int_op(smartlist_len(sl),OP_EQ, 0); OK(); #undef OK @@ -755,30 +755,30 @@ test_container_strmap(void *arg) (void)arg; map = strmap_new(); tt_assert(map); - tt_int_op(strmap_size(map),==, 0); + tt_int_op(strmap_size(map),OP_EQ, 0); tt_assert(strmap_isempty(map)); v = strmap_set(map, "K1", v99); - tt_ptr_op(v,==, NULL); + tt_ptr_op(v,OP_EQ, NULL); tt_assert(!strmap_isempty(map)); v = strmap_set(map, "K2", v101); - tt_ptr_op(v,==, NULL); + tt_ptr_op(v,OP_EQ, NULL); v = strmap_set(map, "K1", v100); - tt_ptr_op(v,==, v99); - tt_ptr_op(strmap_get(map,"K1"),==, v100); - tt_ptr_op(strmap_get(map,"K2"),==, v101); - tt_ptr_op(strmap_get(map,"K-not-there"),==, NULL); + tt_ptr_op(v,OP_EQ, v99); + tt_ptr_op(strmap_get(map,"K1"),OP_EQ, v100); + tt_ptr_op(strmap_get(map,"K2"),OP_EQ, v101); + tt_ptr_op(strmap_get(map,"K-not-there"),OP_EQ, NULL); strmap_assert_ok(map); v = strmap_remove(map,"K2"); strmap_assert_ok(map); - tt_ptr_op(v,==, v101); - tt_ptr_op(strmap_get(map,"K2"),==, NULL); - tt_ptr_op(strmap_remove(map,"K2"),==, NULL); + tt_ptr_op(v,OP_EQ, v101); + tt_ptr_op(strmap_get(map,"K2"),OP_EQ, NULL); + tt_ptr_op(strmap_remove(map,"K2"),OP_EQ, NULL); strmap_set(map, "K2", v101); strmap_set(map, "K3", v102); strmap_set(map, "K4", v103); - tt_int_op(strmap_size(map),==, 4); + tt_int_op(strmap_size(map),OP_EQ, 4); strmap_assert_ok(map); strmap_set(map, "K5", v104); strmap_set(map, "K6", v105); @@ -790,7 +790,7 @@ test_container_strmap(void *arg) while (!strmap_iter_done(iter)) { strmap_iter_get(iter,&k,&v); smartlist_add(found_keys, tor_strdup(k)); - tt_ptr_op(v,==, strmap_get(map, k)); + tt_ptr_op(v,OP_EQ, strmap_get(map, k)); if (!strcmp(k, "K2")) { iter = strmap_iter_next_rmv(map,iter); @@ -800,12 +800,12 @@ test_container_strmap(void *arg) } /* Make sure we removed K2, but not the others. */ - tt_ptr_op(strmap_get(map, "K2"),==, NULL); - tt_ptr_op(strmap_get(map, "K5"),==, v104); + tt_ptr_op(strmap_get(map, "K2"),OP_EQ, NULL); + tt_ptr_op(strmap_get(map, "K5"),OP_EQ, v104); /* Make sure we visited everyone once */ smartlist_sort_strings(found_keys); visited = smartlist_join_strings(found_keys, ":", 0, NULL); - tt_str_op(visited,==, "K1:K2:K3:K4:K5:K6"); + tt_str_op(visited,OP_EQ, "K1:K2:K3:K4:K5:K6"); strmap_assert_ok(map); /* Clean up after ourselves. */ @@ -815,13 +815,13 @@ test_container_strmap(void *arg) /* Now try some lc functions. */ map = strmap_new(); strmap_set_lc(map,"Ab.C", v1); - tt_ptr_op(strmap_get(map,"ab.c"),==, v1); + tt_ptr_op(strmap_get(map,"ab.c"),OP_EQ, v1); strmap_assert_ok(map); - tt_ptr_op(strmap_get_lc(map,"AB.C"),==, v1); - tt_ptr_op(strmap_get(map,"AB.C"),==, NULL); - tt_ptr_op(strmap_remove_lc(map,"aB.C"),==, v1); + tt_ptr_op(strmap_get_lc(map,"AB.C"),OP_EQ, v1); + tt_ptr_op(strmap_get(map,"AB.C"),OP_EQ, NULL); + tt_ptr_op(strmap_remove_lc(map,"aB.C"),OP_EQ, v1); strmap_assert_ok(map); - tt_ptr_op(strmap_get_lc(map,"AB.C"),==, NULL); + tt_ptr_op(strmap_get_lc(map,"AB.C"),OP_EQ, NULL); done: if (map) @@ -853,41 +853,41 @@ test_container_order_functions(void *arg) (void)arg; lst[n++] = 12; - tt_int_op(12,==, median()); /* 12 */ + tt_int_op(12,OP_EQ, median()); /* 12 */ lst[n++] = 77; //smartlist_shuffle(sl); - tt_int_op(12,==, median()); /* 12, 77 */ + tt_int_op(12,OP_EQ, median()); /* 12, 77 */ lst[n++] = 77; //smartlist_shuffle(sl); - tt_int_op(77,==, median()); /* 12, 77, 77 */ + tt_int_op(77,OP_EQ, median()); /* 12, 77, 77 */ lst[n++] = 24; - tt_int_op(24,==, median()); /* 12,24,77,77 */ + tt_int_op(24,OP_EQ, median()); /* 12,24,77,77 */ lst[n++] = 60; lst[n++] = 12; lst[n++] = 25; //smartlist_shuffle(sl); - tt_int_op(25,==, median()); /* 12,12,24,25,60,77,77 */ + tt_int_op(25,OP_EQ, median()); /* 12,12,24,25,60,77,77 */ #undef median #define third_quartile() third_quartile_uint32(lst2, n) n = 0; lst2[n++] = 1; - tt_int_op(1,==, third_quartile()); /* ~1~ */ + tt_int_op(1,OP_EQ, third_quartile()); /* ~1~ */ lst2[n++] = 2; - tt_int_op(2,==, third_quartile()); /* 1, ~2~ */ + tt_int_op(2,OP_EQ, third_quartile()); /* 1, ~2~ */ lst2[n++] = 3; lst2[n++] = 4; lst2[n++] = 5; - tt_int_op(4,==, third_quartile()); /* 1, 2, 3, ~4~, 5 */ + tt_int_op(4,OP_EQ, third_quartile()); /* 1, 2, 3, ~4~, 5 */ lst2[n++] = 6; lst2[n++] = 7; lst2[n++] = 8; lst2[n++] = 9; - tt_int_op(7,==, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */ + tt_int_op(7,OP_EQ, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */ lst2[n++] = 10; lst2[n++] = 11; - tt_int_op(9,==, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */ + tt_int_op(9,OP_EQ, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */ #undef third_quartile @@ -911,26 +911,26 @@ test_container_di_map(void *arg) (void)arg; /* Try searching on an empty map. */ - tt_ptr_op(NULL, ==, dimap_search(map, key1, NULL)); - tt_ptr_op(NULL, ==, dimap_search(map, key2, NULL)); - tt_ptr_op(v3, ==, dimap_search(map, key2, v3)); + tt_ptr_op(NULL, OP_EQ, dimap_search(map, key1, NULL)); + tt_ptr_op(NULL, OP_EQ, dimap_search(map, key2, NULL)); + tt_ptr_op(v3, OP_EQ, dimap_search(map, key2, v3)); dimap_free(map, NULL); map = NULL; /* Add a single entry. */ dimap_add_entry(&map, key1, v1); - tt_ptr_op(NULL, ==, dimap_search(map, key2, NULL)); - tt_ptr_op(v3, ==, dimap_search(map, key2, v3)); - tt_ptr_op(v1, ==, dimap_search(map, key1, NULL)); + tt_ptr_op(NULL, OP_EQ, dimap_search(map, key2, NULL)); + tt_ptr_op(v3, OP_EQ, dimap_search(map, key2, v3)); + tt_ptr_op(v1, OP_EQ, dimap_search(map, key1, NULL)); /* Now try it with three entries in the map. */ dimap_add_entry(&map, key2, v2); dimap_add_entry(&map, key3, v3); - tt_ptr_op(v1, ==, dimap_search(map, key1, NULL)); - tt_ptr_op(v2, ==, dimap_search(map, key2, NULL)); - tt_ptr_op(v3, ==, dimap_search(map, key3, NULL)); - tt_ptr_op(NULL, ==, dimap_search(map, key4, NULL)); - tt_ptr_op(v1, ==, dimap_search(map, key4, v1)); + tt_ptr_op(v1, OP_EQ, dimap_search(map, key1, NULL)); + tt_ptr_op(v2, OP_EQ, dimap_search(map, key2, NULL)); + tt_ptr_op(v3, OP_EQ, dimap_search(map, key3, NULL)); + tt_ptr_op(NULL, OP_EQ, dimap_search(map, key4, NULL)); + tt_ptr_op(v1, OP_EQ, dimap_search(map, key4, v1)); done: tor_free(v1); @@ -959,7 +959,7 @@ test_container_fp_pair_map(void *arg) (void)arg; map = fp_pair_map_new(); tt_assert(map); - tt_int_op(fp_pair_map_size(map),==, 0); + tt_int_op(fp_pair_map_size(map),OP_EQ, 0); tt_assert(fp_pair_map_isempty(map)); memset(fp1.first, 0x11, DIGEST_LEN); @@ -976,27 +976,27 @@ test_container_fp_pair_map(void *arg) memset(fp6.second, 0x62, DIGEST_LEN); v = fp_pair_map_set(map, &fp1, v99); - tt_ptr_op(v, ==, NULL); + tt_ptr_op(v, OP_EQ, NULL); tt_assert(!fp_pair_map_isempty(map)); v = fp_pair_map_set(map, &fp2, v101); - tt_ptr_op(v, ==, NULL); + tt_ptr_op(v, OP_EQ, NULL); v = fp_pair_map_set(map, &fp1, v100); - tt_ptr_op(v, ==, v99); - tt_ptr_op(fp_pair_map_get(map, &fp1),==, v100); - tt_ptr_op(fp_pair_map_get(map, &fp2),==, v101); - tt_ptr_op(fp_pair_map_get(map, &fp3),==, NULL); + tt_ptr_op(v, OP_EQ, v99); + tt_ptr_op(fp_pair_map_get(map, &fp1),OP_EQ, v100); + tt_ptr_op(fp_pair_map_get(map, &fp2),OP_EQ, v101); + tt_ptr_op(fp_pair_map_get(map, &fp3),OP_EQ, NULL); fp_pair_map_assert_ok(map); v = fp_pair_map_remove(map, &fp2); fp_pair_map_assert_ok(map); - tt_ptr_op(v,==, v101); - tt_ptr_op(fp_pair_map_get(map, &fp2),==, NULL); - tt_ptr_op(fp_pair_map_remove(map, &fp2),==, NULL); + tt_ptr_op(v,OP_EQ, v101); + tt_ptr_op(fp_pair_map_get(map, &fp2),OP_EQ, NULL); + tt_ptr_op(fp_pair_map_remove(map, &fp2),OP_EQ, NULL); fp_pair_map_set(map, &fp2, v101); fp_pair_map_set(map, &fp3, v102); fp_pair_map_set(map, &fp4, v103); - tt_int_op(fp_pair_map_size(map),==, 4); + tt_int_op(fp_pair_map_size(map),OP_EQ, 4); fp_pair_map_assert_ok(map); fp_pair_map_set(map, &fp5, v104); fp_pair_map_set(map, &fp6, v105); @@ -1006,7 +1006,7 @@ test_container_fp_pair_map(void *arg) iter = fp_pair_map_iter_init(map); while (!fp_pair_map_iter_done(iter)) { fp_pair_map_iter_get(iter, &k, &v); - tt_ptr_op(v,==, fp_pair_map_get(map, &k)); + tt_ptr_op(v,OP_EQ, fp_pair_map_get(map, &k)); if (tor_memeq(&fp2, &k, sizeof(fp2))) { iter = fp_pair_map_iter_next_rmv(map, iter); @@ -1016,8 +1016,8 @@ test_container_fp_pair_map(void *arg) } /* Make sure we removed fp2, but not the others. */ - tt_ptr_op(fp_pair_map_get(map, &fp2),==, NULL); - tt_ptr_op(fp_pair_map_get(map, &fp5),==, v104); + tt_ptr_op(fp_pair_map_get(map, &fp2),OP_EQ, NULL); + tt_ptr_op(fp_pair_map_get(map, &fp5),OP_EQ, v104); fp_pair_map_assert_ok(map); /* Clean up after ourselves. */ diff --git a/src/test/test_controller_events.c b/src/test/test_controller_events.c index 4d6077b641..dd9d590ec7 100644 --- a/src/test/test_controller_events.c +++ b/src/test/test_controller_events.c @@ -22,7 +22,7 @@ help_test_bucket_note_empty(uint32_t expected_msec_since_midnight, tvnow.tv_usec = (msec_since_epoch % 1000) * 1000; connection_buckets_note_empty_ts(×tamp_var, tokens_before, tokens_removed, &tvnow); - tt_int_op(expected_msec_since_midnight, ==, timestamp_var); + tt_int_op(expected_msec_since_midnight, OP_EQ, timestamp_var); done: ; @@ -57,20 +57,20 @@ test_cntev_bucket_millis_empty(void *arg) tvnow.tv_usec = 200000; /* Bucket has not been refilled. */ - tt_int_op(0, ==, bucket_millis_empty(0, 42120, 0, 100, &tvnow)); - tt_int_op(0, ==, bucket_millis_empty(-10, 42120, -10, 100, &tvnow)); + tt_int_op(0, OP_EQ, bucket_millis_empty(0, 42120, 0, 100, &tvnow)); + tt_int_op(0, OP_EQ, bucket_millis_empty(-10, 42120, -10, 100, &tvnow)); /* Bucket was not empty. */ - tt_int_op(0, ==, bucket_millis_empty(10, 42120, 20, 100, &tvnow)); + tt_int_op(0, OP_EQ, bucket_millis_empty(10, 42120, 20, 100, &tvnow)); /* Bucket has been emptied 80 msec ago and has just been refilled. */ - tt_int_op(80, ==, bucket_millis_empty(-20, 42120, -10, 100, &tvnow)); - tt_int_op(80, ==, bucket_millis_empty(-10, 42120, 0, 100, &tvnow)); - tt_int_op(80, ==, bucket_millis_empty(0, 42120, 10, 100, &tvnow)); + tt_int_op(80, OP_EQ, bucket_millis_empty(-20, 42120, -10, 100, &tvnow)); + tt_int_op(80, OP_EQ, bucket_millis_empty(-10, 42120, 0, 100, &tvnow)); + tt_int_op(80, OP_EQ, bucket_millis_empty(0, 42120, 10, 100, &tvnow)); /* Bucket has been emptied 180 msec ago, last refill was 100 msec ago * which was insufficient to make it positive, so cap msec at 100. */ - tt_int_op(100, ==, bucket_millis_empty(0, 42020, 1, 100, &tvnow)); + tt_int_op(100, OP_EQ, bucket_millis_empty(0, 42020, 1, 100, &tvnow)); /* 1970-01-02 00:00:00:050000 */ tvnow.tv_sec = 86400; @@ -78,7 +78,7 @@ test_cntev_bucket_millis_empty(void *arg) /* Last emptied 30 msec before midnight, tvnow is 50 msec after * midnight, that's 80 msec in total. */ - tt_int_op(80, ==, bucket_millis_empty(0, 86400000 - 30, 1, 100, &tvnow)); + tt_int_op(80, OP_EQ, bucket_millis_empty(0, 86400000 - 30, 1, 100, &tvnow)); done: ; @@ -118,26 +118,26 @@ test_cntev_sum_up_cell_stats(void *arg) cell_stats = tor_malloc_zero(sizeof(cell_stats_t)); add_testing_cell_stats_entry(circ, CELL_RELAY, 0, 0, 0); sum_up_cell_stats_by_command(circ, cell_stats); - tt_u64_op(1, ==, cell_stats->added_cells_appward[CELL_RELAY]); + tt_u64_op(1, OP_EQ, cell_stats->added_cells_appward[CELL_RELAY]); /* A single RELAY cell was added to the exitward queue. */ add_testing_cell_stats_entry(circ, CELL_RELAY, 0, 0, 1); sum_up_cell_stats_by_command(circ, cell_stats); - tt_u64_op(1, ==, cell_stats->added_cells_exitward[CELL_RELAY]); + tt_u64_op(1, OP_EQ, cell_stats->added_cells_exitward[CELL_RELAY]); /* A single RELAY cell was removed from the appward queue where it spent * 20 msec. */ add_testing_cell_stats_entry(circ, CELL_RELAY, 2, 1, 0); sum_up_cell_stats_by_command(circ, cell_stats); - tt_u64_op(20, ==, cell_stats->total_time_appward[CELL_RELAY]); - tt_u64_op(1, ==, cell_stats->removed_cells_appward[CELL_RELAY]); + tt_u64_op(20, OP_EQ, cell_stats->total_time_appward[CELL_RELAY]); + tt_u64_op(1, OP_EQ, cell_stats->removed_cells_appward[CELL_RELAY]); /* A single RELAY cell was removed from the exitward queue where it * spent 30 msec. */ add_testing_cell_stats_entry(circ, CELL_RELAY, 3, 1, 1); sum_up_cell_stats_by_command(circ, cell_stats); - tt_u64_op(30, ==, cell_stats->total_time_exitward[CELL_RELAY]); - tt_u64_op(1, ==, cell_stats->removed_cells_exitward[CELL_RELAY]); + tt_u64_op(30, OP_EQ, cell_stats->total_time_exitward[CELL_RELAY]); + tt_u64_op(1, OP_EQ, cell_stats->removed_cells_exitward[CELL_RELAY]); done: tor_free(cell_stats); @@ -164,7 +164,7 @@ test_cntev_append_cell_stats(void *arg) append_cell_stats_by_command(event_parts, key, include_if_non_zero, number_to_include); - tt_int_op(0, ==, smartlist_len(event_parts)); + tt_int_op(0, OP_EQ, smartlist_len(event_parts)); /* There's a RELAY cell to include, but the corresponding field in * include_if_non_zero is still zero. */ @@ -172,7 +172,7 @@ test_cntev_append_cell_stats(void *arg) append_cell_stats_by_command(event_parts, key, include_if_non_zero, number_to_include); - tt_int_op(0, ==, smartlist_len(event_parts)); + tt_int_op(0, OP_EQ, smartlist_len(event_parts)); /* Now include single RELAY cell. */ include_if_non_zero[CELL_RELAY] = 2; @@ -180,7 +180,7 @@ test_cntev_append_cell_stats(void *arg) include_if_non_zero, number_to_include); cp = smartlist_pop_last(event_parts); - tt_str_op("Z=relay:1", ==, cp); + tt_str_op("Z=relay:1", OP_EQ, cp); tor_free(cp); /* Add four CREATE cells. */ @@ -190,7 +190,7 @@ test_cntev_append_cell_stats(void *arg) include_if_non_zero, number_to_include); cp = smartlist_pop_last(event_parts); - tt_str_op("Z=create:4,relay:1", ==, cp); + tt_str_op("Z=create:4,relay:1", OP_EQ, cp); done: tor_free(cp); @@ -220,14 +220,14 @@ test_cntev_format_cell_stats(void *arg) /* Origin circuit was completely idle. */ cell_stats = tor_malloc_zero(sizeof(cell_stats_t)); format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats); - tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1", ==, event_string); + tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1", OP_EQ, event_string); tor_free(event_string); /* Origin circuit had 4 RELAY cells added to its exitward queue. */ cell_stats->added_cells_exitward[CELL_RELAY] = 4; format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats); tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4", - ==, event_string); + OP_EQ, event_string); tor_free(event_string); /* Origin circuit also had 5 CREATE2 cells added to its exitward @@ -235,7 +235,7 @@ test_cntev_format_cell_stats(void *arg) cell_stats->added_cells_exitward[CELL_CREATE2] = 5; format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats); tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4," - "create2:5", ==, event_string); + "create2:5", OP_EQ, event_string); tor_free(event_string); /* Origin circuit also had 7 RELAY cells removed from its exitward queue @@ -245,7 +245,7 @@ test_cntev_format_cell_stats(void *arg) format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats); tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4," "create2:5 OutboundRemoved=relay:7 OutboundTime=relay:6", - ==, event_string); + OP_EQ, event_string); tor_free(event_string); p_chan = tor_malloc_zero(sizeof(channel_tls_t)); @@ -265,14 +265,14 @@ test_cntev_format_cell_stats(void *arg) cell_stats = tor_malloc_zero(sizeof(cell_stats_t)); format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats); tt_str_op("InboundQueue=8 InboundConn=2 OutboundQueue=9 OutboundConn=1", - ==, event_string); + OP_EQ, event_string); tor_free(event_string); /* OR circuit had 3 RELAY cells added to its appward queue. */ cell_stats->added_cells_appward[CELL_RELAY] = 3; format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats); tt_str_op("InboundQueue=8 InboundConn=2 InboundAdded=relay:3 " - "OutboundQueue=9 OutboundConn=1", ==, event_string); + "OutboundQueue=9 OutboundConn=1", OP_EQ, event_string); tor_free(event_string); /* OR circuit had 7 RELAY cells removed from its appward queue which @@ -282,7 +282,7 @@ test_cntev_format_cell_stats(void *arg) format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats); tt_str_op("InboundQueue=8 InboundConn=2 InboundAdded=relay:3 " "InboundRemoved=relay:7 InboundTime=relay:6 " - "OutboundQueue=9 OutboundConn=1", ==, event_string); + "OutboundQueue=9 OutboundConn=1", OP_EQ, event_string); done: tor_free(cell_stats); diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c index 4416134ac4..d3cd013879 100644 --- a/src/test/test_crypto.c +++ b/src/test/test_crypto.c @@ -34,24 +34,24 @@ test_crypto_dh(void *arg) ssize_t s1len, s2len; (void)arg; - tt_int_op(crypto_dh_get_bytes(dh1),==, DH_BYTES); - tt_int_op(crypto_dh_get_bytes(dh2),==, DH_BYTES); + tt_int_op(crypto_dh_get_bytes(dh1),OP_EQ, DH_BYTES); + tt_int_op(crypto_dh_get_bytes(dh2),OP_EQ, DH_BYTES); memset(p1, 0, DH_BYTES); memset(p2, 0, DH_BYTES); - tt_mem_op(p1,==, p2, DH_BYTES); + tt_mem_op(p1,OP_EQ, p2, DH_BYTES); tt_assert(! crypto_dh_get_public(dh1, p1, DH_BYTES)); - tt_mem_op(p1,!=, p2, DH_BYTES); + tt_mem_op(p1,OP_NE, p2, DH_BYTES); tt_assert(! crypto_dh_get_public(dh2, p2, DH_BYTES)); - tt_mem_op(p1,!=, p2, DH_BYTES); + tt_mem_op(p1,OP_NE, p2, DH_BYTES); memset(s1, 0, DH_BYTES); memset(s2, 0xFF, DH_BYTES); s1len = crypto_dh_compute_secret(LOG_WARN, dh1, p2, DH_BYTES, s1, 50); s2len = crypto_dh_compute_secret(LOG_WARN, dh2, p1, DH_BYTES, s2, 50); tt_assert(s1len > 0); - tt_int_op(s1len,==, s2len); - tt_mem_op(s1,==, s2, s1len); + tt_int_op(s1len,OP_EQ, s2len); + tt_mem_op(s1,OP_EQ, s2, s1len); { /* XXXX Now fabricate some bad values and make sure they get caught, @@ -78,7 +78,7 @@ test_crypto_rng(void *arg) tt_assert(! crypto_seed_rng(0)); crypto_rand(data1, 100); crypto_rand(data2, 100); - tt_mem_op(data1,!=, data2,100); + tt_mem_op(data1,OP_NE, data2,100); allok = 1; for (i = 0; i < 100; ++i) { uint64_t big; @@ -133,15 +133,15 @@ test_crypto_aes(void *arg) memset(data2, 0, 1024); memset(data3, 0, 1024); env1 = crypto_cipher_new(NULL); - tt_ptr_op(env1, !=, NULL); + tt_ptr_op(env1, OP_NE, NULL); env2 = crypto_cipher_new(crypto_cipher_get_key(env1)); - tt_ptr_op(env2, !=, NULL); + tt_ptr_op(env2, OP_NE, NULL); /* Try encrypting 512 chars. */ crypto_cipher_encrypt(env1, data2, data1, 512); crypto_cipher_decrypt(env2, data3, data2, 512); - tt_mem_op(data1,==, data3, 512); - tt_mem_op(data1,!=, data2, 512); + tt_mem_op(data1,OP_EQ, data3, 512); + tt_mem_op(data1,OP_NE, data2, 512); /* Now encrypt 1 at a time, and get 1 at a time. */ for (j = 512; j < 560; ++j) { @@ -150,7 +150,7 @@ test_crypto_aes(void *arg) for (j = 512; j < 560; ++j) { crypto_cipher_decrypt(env2, data3+j, data2+j, 1); } - tt_mem_op(data1,==, data3, 560); + tt_mem_op(data1,OP_EQ, data3, 560); /* Now encrypt 3 at a time, and get 5 at a time. */ for (j = 560; j < 1024-5; j += 3) { crypto_cipher_encrypt(env1, data2+j, data1+j, 3); @@ -158,7 +158,7 @@ test_crypto_aes(void *arg) for (j = 560; j < 1024-5; j += 5) { crypto_cipher_decrypt(env2, data3+j, data2+j, 5); } - tt_mem_op(data1,==, data3, 1024-5); + tt_mem_op(data1,OP_EQ, data3, 1024-5); /* Now make sure that when we encrypt with different chunk sizes, we get the same results. */ crypto_cipher_free(env2); @@ -166,7 +166,7 @@ test_crypto_aes(void *arg) memset(data3, 0, 1024); env2 = crypto_cipher_new(crypto_cipher_get_key(env1)); - tt_ptr_op(env2, !=, NULL); + tt_ptr_op(env2, OP_NE, NULL); for (j = 0; j < 1024-16; j += 17) { crypto_cipher_encrypt(env2, data3+j, data1+j, 17); } @@ -175,7 +175,7 @@ test_crypto_aes(void *arg) printf("%d: %d\t%d\n", j, (int) data2[j], (int) data3[j]); } } - tt_mem_op(data2,==, data3, 1024-16); + tt_mem_op(data2,OP_EQ, data3, 1024-16); crypto_cipher_free(env1); env1 = NULL; crypto_cipher_free(env2); @@ -271,25 +271,25 @@ test_crypto_sha(void *arg) (void)arg; i = crypto_digest(data, "abc", 3); test_memeq_hex(data, "A9993E364706816ABA3E25717850C26C9CD0D89D"); - tt_int_op(i, ==, 0); + tt_int_op(i, OP_EQ, 0); /* Test SHA-256 with a test vector from the specification. */ i = crypto_digest256(data, "abc", 3, DIGEST_SHA256); test_memeq_hex(data, "BA7816BF8F01CFEA414140DE5DAE2223B00361A3" "96177A9CB410FF61F20015AD"); - tt_int_op(i, ==, 0); + tt_int_op(i, OP_EQ, 0); /* Test HMAC-SHA256 with test cases from wikipedia and RFC 4231 */ /* Case empty (wikipedia) */ crypto_hmac_sha256(digest, "", 0, "", 0); - tt_str_op(hex_str(digest, 32),==, + tt_str_op(hex_str(digest, 32),OP_EQ, "B613679A0814D9EC772F95D778C35FC5FF1697C493715653C6C712144292C5AD"); /* Case quick-brown (wikipedia) */ crypto_hmac_sha256(digest, "key", 3, "The quick brown fox jumps over the lazy dog", 43); - tt_str_op(hex_str(digest, 32),==, + tt_str_op(hex_str(digest, 32),OP_EQ, "F7BC83F430538424B13298E6AA6FB143EF4D59A14946175997479DBC2D1A3CD8"); /* "Test Case 1" from RFC 4231 */ @@ -357,15 +357,15 @@ test_crypto_sha(void *arg) crypto_digest_add_bytes(d2, "ghijkl", 6); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest(d_out2, "abcdefghijkl", 12); - tt_mem_op(d_out1,==, d_out2, DIGEST_LEN); + tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN); crypto_digest_assign(d2, d1); crypto_digest_add_bytes(d2, "mno", 3); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest(d_out2, "abcdefmno", 9); - tt_mem_op(d_out1,==, d_out2, DIGEST_LEN); + tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN); crypto_digest_get_digest(d1, d_out1, sizeof(d_out1)); crypto_digest(d_out2, "abcdef", 6); - tt_mem_op(d_out1,==, d_out2, DIGEST_LEN); + tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN); crypto_digest_free(d1); crypto_digest_free(d2); @@ -378,15 +378,15 @@ test_crypto_sha(void *arg) crypto_digest_add_bytes(d2, "ghijkl", 6); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest256(d_out2, "abcdefghijkl", 12, DIGEST_SHA256); - tt_mem_op(d_out1,==, d_out2, DIGEST_LEN); + tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN); crypto_digest_assign(d2, d1); crypto_digest_add_bytes(d2, "mno", 3); crypto_digest_get_digest(d2, d_out1, sizeof(d_out1)); crypto_digest256(d_out2, "abcdefmno", 9, DIGEST_SHA256); - tt_mem_op(d_out1,==, d_out2, DIGEST_LEN); + tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN); crypto_digest_get_digest(d1, d_out1, sizeof(d_out1)); crypto_digest256(d_out2, "abcdef", 6, DIGEST_SHA256); - tt_mem_op(d_out1,==, d_out2, DIGEST_LEN); + tt_mem_op(d_out1,OP_EQ, d_out2, DIGEST_LEN); done: if (d1) @@ -413,42 +413,42 @@ test_crypto_pk(void *arg) tt_assert(pk1 && pk2); tt_assert(! crypto_pk_write_public_key_to_string(pk1, &encoded, &size)); tt_assert(! crypto_pk_read_public_key_from_string(pk2, encoded, size)); - tt_int_op(0,==, crypto_pk_cmp_keys(pk1, pk2)); + tt_int_op(0,OP_EQ, crypto_pk_cmp_keys(pk1, pk2)); /* comparison between keys and NULL */ - tt_int_op(crypto_pk_cmp_keys(NULL, pk1), <, 0); - tt_int_op(crypto_pk_cmp_keys(NULL, NULL), ==, 0); - tt_int_op(crypto_pk_cmp_keys(pk1, NULL), >, 0); + tt_int_op(crypto_pk_cmp_keys(NULL, pk1), OP_LT, 0); + tt_int_op(crypto_pk_cmp_keys(NULL, NULL), OP_EQ, 0); + tt_int_op(crypto_pk_cmp_keys(pk1, NULL), OP_GT, 0); - tt_int_op(128,==, crypto_pk_keysize(pk1)); - tt_int_op(1024,==, crypto_pk_num_bits(pk1)); - tt_int_op(128,==, crypto_pk_keysize(pk2)); - tt_int_op(1024,==, crypto_pk_num_bits(pk2)); + tt_int_op(128,OP_EQ, crypto_pk_keysize(pk1)); + tt_int_op(1024,OP_EQ, crypto_pk_num_bits(pk1)); + tt_int_op(128,OP_EQ, crypto_pk_keysize(pk2)); + tt_int_op(1024,OP_EQ, crypto_pk_num_bits(pk2)); - tt_int_op(128,==, crypto_pk_public_encrypt(pk2, data1, sizeof(data1), + tt_int_op(128,OP_EQ, crypto_pk_public_encrypt(pk2, data1, sizeof(data1), "Hello whirled.", 15, PK_PKCS1_OAEP_PADDING)); - tt_int_op(128,==, crypto_pk_public_encrypt(pk1, data2, sizeof(data1), + tt_int_op(128,OP_EQ, crypto_pk_public_encrypt(pk1, data2, sizeof(data1), "Hello whirled.", 15, PK_PKCS1_OAEP_PADDING)); /* oaep padding should make encryption not match */ - tt_mem_op(data1,!=, data2, 128); - tt_int_op(15,==, + tt_mem_op(data1,OP_NE, data2, 128); + tt_int_op(15,OP_EQ, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data1, 128, PK_PKCS1_OAEP_PADDING,1)); - tt_str_op(data3,==, "Hello whirled."); + tt_str_op(data3,OP_EQ, "Hello whirled."); memset(data3, 0, 1024); - tt_int_op(15,==, + tt_int_op(15,OP_EQ, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128, PK_PKCS1_OAEP_PADDING,1)); - tt_str_op(data3,==, "Hello whirled."); + tt_str_op(data3,OP_EQ, "Hello whirled."); /* Can't decrypt with public key. */ - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data2, 128, PK_PKCS1_OAEP_PADDING,1)); /* Try again with bad padding */ memcpy(data2+1, "XYZZY", 5); /* This has fails ~ once-in-2^40 */ - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, crypto_pk_private_decrypt(pk1, data3, sizeof(data3), data2, 128, PK_PKCS1_OAEP_PADDING,1)); @@ -464,25 +464,25 @@ test_crypto_pk(void *arg) get_fname("xyzzy")) < 0); tt_assert(! crypto_pk_read_private_key_from_filename(pk2, get_fname("pkey1"))); - tt_int_op(15,==, + tt_int_op(15,OP_EQ, crypto_pk_private_decrypt(pk2, data3, sizeof(data3), data1, 128, PK_PKCS1_OAEP_PADDING,1)); /* Now try signing. */ strlcpy(data1, "Ossifrage", 1024); - tt_int_op(128,==, + tt_int_op(128,OP_EQ, crypto_pk_private_sign(pk1, data2, sizeof(data2), data1, 10)); - tt_int_op(10,==, + tt_int_op(10,OP_EQ, crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128)); - tt_str_op(data3,==, "Ossifrage"); + tt_str_op(data3,OP_EQ, "Ossifrage"); /* Try signing digests. */ - tt_int_op(128,==, crypto_pk_private_sign_digest(pk1, data2, sizeof(data2), + tt_int_op(128,OP_EQ, crypto_pk_private_sign_digest(pk1, data2, sizeof(data2), data1, 10)); - tt_int_op(20,==, + tt_int_op(20,OP_EQ, crypto_pk_public_checksig(pk1, data3, sizeof(data3), data2, 128)); - tt_int_op(0,==, + tt_int_op(0,OP_EQ, crypto_pk_public_checksig_digest(pk1, data1, 10, data2, 128)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, crypto_pk_public_checksig_digest(pk1, data1, 11, data2, 128)); /*XXXX test failed signing*/ @@ -491,7 +491,7 @@ test_crypto_pk(void *arg) crypto_pk_free(pk2); pk2 = NULL; i = crypto_pk_asn1_encode(pk1, data1, 1024); - tt_int_op(i, >, 0); + tt_int_op(i, OP_GT, 0); pk2 = crypto_pk_asn1_decode(data1, i); tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0); @@ -502,18 +502,18 @@ test_crypto_pk(void *arg) memset(data3,0,1024); len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2), data1,i,PK_PKCS1_OAEP_PADDING,0); - tt_int_op(len, >=, 0); + tt_int_op(len, OP_GE, 0); len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3), data2,len,PK_PKCS1_OAEP_PADDING,1); - tt_int_op(len,==, i); - tt_mem_op(data1,==, data3,i); + tt_int_op(len,OP_EQ, i); + tt_mem_op(data1,OP_EQ, data3,i); } /* Try copy_full */ crypto_pk_free(pk2); pk2 = crypto_pk_copy_full(pk1); tt_assert(pk2 != NULL); - tt_ptr_op(pk1, !=, pk2); + tt_ptr_op(pk1, OP_NE, pk2); tt_assert(crypto_pk_cmp_keys(pk1,pk2) == 0); done: @@ -540,33 +540,33 @@ test_crypto_pk_fingerprints(void *arg) pk = pk_generate(1); tt_assert(pk); n = crypto_pk_asn1_encode(pk, encoded, sizeof(encoded)); - tt_int_op(n, >, 0); - tt_int_op(n, >, 128); - tt_int_op(n, <, 256); + tt_int_op(n, OP_GT, 0); + tt_int_op(n, OP_GT, 128); + tt_int_op(n, OP_LT, 256); /* Is digest as expected? */ crypto_digest(d, encoded, n); - tt_int_op(0, ==, crypto_pk_get_digest(pk, d2)); - tt_mem_op(d,==, d2, DIGEST_LEN); + tt_int_op(0, OP_EQ, crypto_pk_get_digest(pk, d2)); + tt_mem_op(d,OP_EQ, d2, DIGEST_LEN); /* Is fingerprint right? */ - tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 0)); - tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2); + tt_int_op(0, OP_EQ, crypto_pk_get_fingerprint(pk, fingerprint, 0)); + tt_int_op(strlen(fingerprint), OP_EQ, DIGEST_LEN * 2); test_memeq_hex(d, fingerprint); /* Are spaces right? */ - tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 1)); + tt_int_op(0, OP_EQ, crypto_pk_get_fingerprint(pk, fingerprint, 1)); for (i = 4; i < strlen(fingerprint); i += 5) { - tt_int_op(fingerprint[i], ==, ' '); + tt_int_op(fingerprint[i], OP_EQ, ' '); } tor_strstrip(fingerprint, " "); - tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2); + tt_int_op(strlen(fingerprint), OP_EQ, DIGEST_LEN * 2); test_memeq_hex(d, fingerprint); /* Now hash again and check crypto_pk_get_hashed_fingerprint. */ crypto_digest(d2, d, sizeof(d)); - tt_int_op(0, ==, crypto_pk_get_hashed_fingerprint(pk, fingerprint)); - tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2); + tt_int_op(0, OP_EQ, crypto_pk_get_hashed_fingerprint(pk, fingerprint)); + tt_int_op(strlen(fingerprint), OP_EQ, DIGEST_LEN * 2); test_memeq_hex(d2, fingerprint); done: @@ -591,14 +591,14 @@ test_crypto_digests(void *arg) r = crypto_pk_get_digest(k, digest); tt_assert(r == 0); - tt_mem_op(hex_str(digest, DIGEST_LEN),==, + tt_mem_op(hex_str(digest, DIGEST_LEN),OP_EQ, AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN); r = crypto_pk_get_all_digests(k, &pkey_digests); - tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),==, + tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),OP_EQ, AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN); - tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),==, + tt_mem_op(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),OP_EQ, AUTHORITY_SIGNKEY_A_DIGEST256, HEX_DIGEST256_LEN); done: crypto_pk_free(k); @@ -622,31 +622,31 @@ test_crypto_formats(void *arg) memset(data1, 6, 1024); for (idx = 0; idx < 10; ++idx) { i = base64_encode(data2, 1024, data1, idx); - tt_int_op(i, >=, 0); + tt_int_op(i, OP_GE, 0); j = base64_decode(data3, 1024, data2, i); - tt_int_op(j,==, idx); - tt_mem_op(data3,==, data1, idx); + tt_int_op(j,OP_EQ, idx); + tt_mem_op(data3,OP_EQ, data1, idx); } strlcpy(data1, "Test string that contains 35 chars.", 1024); strlcat(data1, " 2nd string that contains 35 chars.", 1024); i = base64_encode(data2, 1024, data1, 71); - tt_int_op(i, >=, 0); + tt_int_op(i, OP_GE, 0); j = base64_decode(data3, 1024, data2, i); - tt_int_op(j,==, 71); - tt_str_op(data3,==, data1); - tt_int_op(data2[i], ==, '\0'); + tt_int_op(j,OP_EQ, 71); + tt_str_op(data3,OP_EQ, data1); + tt_int_op(data2[i], OP_EQ, '\0'); crypto_rand(data1, DIGEST_LEN); memset(data2, 100, 1024); digest_to_base64(data2, data1); - tt_int_op(BASE64_DIGEST_LEN,==, strlen(data2)); - tt_int_op(100,==, data2[BASE64_DIGEST_LEN+2]); + tt_int_op(BASE64_DIGEST_LEN,OP_EQ, strlen(data2)); + tt_int_op(100,OP_EQ, data2[BASE64_DIGEST_LEN+2]); memset(data3, 99, 1024); - tt_int_op(digest_from_base64(data3, data2),==, 0); - tt_mem_op(data1,==, data3, DIGEST_LEN); - tt_int_op(99,==, data3[DIGEST_LEN+1]); + tt_int_op(digest_from_base64(data3, data2),OP_EQ, 0); + tt_mem_op(data1,OP_EQ, data3, DIGEST_LEN); + tt_int_op(99,OP_EQ, data3[DIGEST_LEN+1]); tt_assert(digest_from_base64(data3, "###") < 0); @@ -654,12 +654,12 @@ test_crypto_formats(void *arg) crypto_rand(data2, DIGEST256_LEN); memset(data2, 100, 1024); digest256_to_base64(data2, data1); - tt_int_op(BASE64_DIGEST256_LEN,==, strlen(data2)); - tt_int_op(100,==, data2[BASE64_DIGEST256_LEN+2]); + tt_int_op(BASE64_DIGEST256_LEN,OP_EQ, strlen(data2)); + tt_int_op(100,OP_EQ, data2[BASE64_DIGEST256_LEN+2]); memset(data3, 99, 1024); - tt_int_op(digest256_from_base64(data3, data2),==, 0); - tt_mem_op(data1,==, data3, DIGEST256_LEN); - tt_int_op(99,==, data3[DIGEST256_LEN+1]); + tt_int_op(digest256_from_base64(data3, data2),OP_EQ, 0); + tt_mem_op(data1,OP_EQ, data3, DIGEST256_LEN); + tt_int_op(99,OP_EQ, data3[DIGEST256_LEN+1]); /* Base32 tests */ strlcpy(data1, "5chrs", 1024); @@ -668,27 +668,27 @@ test_crypto_formats(void *arg) * By 5s: [00110 10101 10001 10110 10000 11100 10011 10011] */ base32_encode(data2, 9, data1, 5); - tt_str_op(data2,==, "gvrwq4tt"); + tt_str_op(data2,OP_EQ, "gvrwq4tt"); strlcpy(data1, "\xFF\xF5\x6D\x44\xAE\x0D\x5C\xC9\x62\xC4", 1024); base32_encode(data2, 30, data1, 10); - tt_str_op(data2,==, "772w2rfobvomsywe"); + tt_str_op(data2,OP_EQ, "772w2rfobvomsywe"); /* Base16 tests */ strlcpy(data1, "6chrs\xff", 1024); base16_encode(data2, 13, data1, 6); - tt_str_op(data2,==, "3663687273FF"); + tt_str_op(data2,OP_EQ, "3663687273FF"); strlcpy(data1, "f0d678affc000100", 1024); i = base16_decode(data2, 8, data1, 16); - tt_int_op(i,==, 0); - tt_mem_op(data2,==, "\xf0\xd6\x78\xaf\xfc\x00\x01\x00",8); + tt_int_op(i,OP_EQ, 0); + tt_mem_op(data2,OP_EQ, "\xf0\xd6\x78\xaf\xfc\x00\x01\x00",8); /* now try some failing base16 decodes */ - tt_int_op(-1,==, base16_decode(data2, 8, data1, 15)); /* odd input len */ - tt_int_op(-1,==, base16_decode(data2, 7, data1, 16)); /* dest too short */ + tt_int_op(-1,OP_EQ, base16_decode(data2, 8, data1, 15)); /* odd input len */ + tt_int_op(-1,OP_EQ, base16_decode(data2, 7, data1, 16)); /* dest too short */ strlcpy(data1, "f0dz!8affc000100", 1024); - tt_int_op(-1,==, base16_decode(data2, 8, data1, 16)); + tt_int_op(-1,OP_EQ, base16_decode(data2, 8, data1, 16)); tor_free(data1); tor_free(data2); @@ -697,10 +697,10 @@ test_crypto_formats(void *arg) /* Add spaces to fingerprint */ { data1 = tor_strdup("ABCD1234ABCD56780000ABCD1234ABCD56780000"); - tt_int_op(strlen(data1),==, 40); + tt_int_op(strlen(data1),OP_EQ, 40); data2 = tor_malloc(FINGERPRINT_LEN+1); crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1); - tt_str_op(data2,==, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"); + tt_str_op(data2,OP_EQ, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"); tor_free(data1); tor_free(data2); } @@ -728,7 +728,7 @@ test_crypto_s2k_rfc2440(void *arg) secret_to_key_rfc2440(buf+9, 20, "", 0, buf); crypto_digest(buf2+9, buf3, 1024); - tt_mem_op(buf,==, buf2, 29); + tt_mem_op(buf,OP_EQ, buf2, 29); memcpy(buf,"vrbacrda",8); memcpy(buf2,"vrbacrda",8); @@ -739,7 +739,7 @@ test_crypto_s2k_rfc2440(void *arg) memcpy(buf3+i, "vrbacrda12345678", 16); } crypto_digest(buf2+9, buf3, 65536); - tt_mem_op(buf,==, buf2, 29); + tt_mem_op(buf,OP_EQ, buf2, 29); done: tor_free(buf3); @@ -757,10 +757,10 @@ run_s2k_tests(const unsigned flags, const unsigned type, r = secret_to_key_new(buf, sizeof(buf), &sz, pw1, strlen(pw1), flags); - tt_int_op(r, ==, S2K_OKAY); - tt_int_op(buf[0], ==, type); + tt_int_op(r, OP_EQ, S2K_OKAY); + tt_int_op(buf[0], OP_EQ, type); - tt_int_op(sz, ==, keylen + speclen); + tt_int_op(sz, OP_EQ, keylen + speclen); if (legacy) { memmove(buf, buf+1, sz-1); @@ -768,10 +768,10 @@ run_s2k_tests(const unsigned flags, const unsigned type, --speclen; } - tt_int_op(S2K_OKAY, ==, + tt_int_op(S2K_OKAY, OP_EQ, secret_to_key_check(buf, sz, pw1, strlen(pw1))); - tt_int_op(S2K_BAD_SECRET, ==, + tt_int_op(S2K_BAD_SECRET, OP_EQ, secret_to_key_check(buf, sz, pw2, strlen(pw2))); /* Move key to buf2, and clear it. */ @@ -780,24 +780,24 @@ run_s2k_tests(const unsigned flags, const unsigned type, memset(buf+speclen, 0, sz - speclen); /* Derivekey should produce the same results. */ - tt_int_op(S2K_OKAY, ==, + tt_int_op(S2K_OKAY, OP_EQ, secret_to_key_derivekey(buf3, keylen, buf, speclen, pw1, strlen(pw1))); - tt_mem_op(buf2, ==, buf3, keylen); + tt_mem_op(buf2, OP_EQ, buf3, keylen); /* Derivekey with a longer output should fill the output. */ memset(buf2, 0, sizeof(buf2)); - tt_int_op(S2K_OKAY, ==, + tt_int_op(S2K_OKAY, OP_EQ, secret_to_key_derivekey(buf2, sizeof(buf2), buf, speclen, pw1, strlen(pw1))); - tt_mem_op(buf2, !=, buf3, sizeof(buf2)); + tt_mem_op(buf2, OP_NE, buf3, sizeof(buf2)); memset(buf3, 0, sizeof(buf3)); - tt_int_op(S2K_OKAY, ==, + tt_int_op(S2K_OKAY, OP_EQ, secret_to_key_derivekey(buf3, sizeof(buf3), buf, speclen, pw1, strlen(pw1))); - tt_mem_op(buf2, ==, buf3, sizeof(buf3)); + tt_mem_op(buf2, OP_EQ, buf3, sizeof(buf3)); tt_assert(!tor_mem_is_zero((char*)buf2+keylen, sizeof(buf2)-keylen)); done: @@ -833,50 +833,50 @@ test_crypto_s2k_errors(void *arg) (void)arg; /* Bogus specifiers: simple */ - tt_int_op(S2K_BAD_LEN, ==, + tt_int_op(S2K_BAD_LEN, OP_EQ, secret_to_key_derivekey(buf, sizeof(buf), (const uint8_t*)"", 0, "ABC", 3)); - tt_int_op(S2K_BAD_ALGORITHM, ==, + tt_int_op(S2K_BAD_ALGORITHM, OP_EQ, secret_to_key_derivekey(buf, sizeof(buf), (const uint8_t*)"\x10", 1, "ABC", 3)); - tt_int_op(S2K_BAD_LEN, ==, + tt_int_op(S2K_BAD_LEN, OP_EQ, secret_to_key_derivekey(buf, sizeof(buf), (const uint8_t*)"\x01\x02", 2, "ABC", 3)); - tt_int_op(S2K_BAD_LEN, ==, + tt_int_op(S2K_BAD_LEN, OP_EQ, secret_to_key_check((const uint8_t*)"", 0, "ABC", 3)); - tt_int_op(S2K_BAD_ALGORITHM, ==, + tt_int_op(S2K_BAD_ALGORITHM, OP_EQ, secret_to_key_check((const uint8_t*)"\x10", 1, "ABC", 3)); - tt_int_op(S2K_BAD_LEN, ==, + tt_int_op(S2K_BAD_LEN, OP_EQ, secret_to_key_check((const uint8_t*)"\x01\x02", 2, "ABC", 3)); /* too long gets "BAD_LEN" too */ memset(buf, 0, sizeof(buf)); buf[0] = 2; - tt_int_op(S2K_BAD_LEN, ==, + tt_int_op(S2K_BAD_LEN, OP_EQ, secret_to_key_derivekey(buf2, sizeof(buf2), buf, sizeof(buf), "ABC", 3)); /* Truncated output */ #ifdef HAVE_LIBSCRYPT_H - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_new(buf, 50, &sz, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz, "ABC", 3, 0)); - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_new(buf, 50, &sz, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 50, &sz, "ABC", 3, S2K_FLAG_LOW_MEM)); #endif - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_new(buf, 37, &sz, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 37, &sz, "ABC", 3, S2K_FLAG_USE_PBKDF2)); - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_new(buf, 29, &sz, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_new(buf, 29, &sz, "ABC", 3, S2K_FLAG_NO_SCRYPT)); #ifdef HAVE_LIBSCRYPT_H - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_make_specifier(buf, 18, 0)); - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_make_specifier(buf, 18, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18, 0)); + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 18, S2K_FLAG_LOW_MEM)); #endif - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_make_specifier(buf, 17, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 17, S2K_FLAG_USE_PBKDF2)); - tt_int_op(S2K_TRUNCATED, ==, secret_to_key_make_specifier(buf, 9, + tt_int_op(S2K_TRUNCATED, OP_EQ, secret_to_key_make_specifier(buf, 9, S2K_FLAG_NO_SCRYPT)); /* Now try using type-specific bogus specifiers. */ @@ -886,7 +886,7 @@ test_crypto_s2k_errors(void *arg) memset(buf, 0, sizeof(buf)); buf[0] = 1; /* pbkdf2 */ buf[17] = 100; /* 1<<100 is much bigger than INT32_MAX */ - tt_int_op(S2K_BAD_PARAMS, ==, + tt_int_op(S2K_BAD_PARAMS, OP_EQ, secret_to_key_derivekey(buf2, sizeof(buf2), buf, 18, "ABC", 3)); @@ -895,7 +895,7 @@ test_crypto_s2k_errors(void *arg) memset(buf, 0, sizeof(buf)); buf[0] = 2; /* scrypt */ buf[17] = 100; /* 1<<100 is much bigger than UINT64_MAX */ - tt_int_op(S2K_BAD_PARAMS, ==, + tt_int_op(S2K_BAD_PARAMS, OP_EQ, secret_to_key_derivekey(buf2, sizeof(buf2), buf, 19, "ABC", 3)); #endif @@ -926,7 +926,7 @@ test_crypto_scrypt_vectors(void *arg) base16_decode((char*)spec, sizeof(spec), "0400", 4); memset(out, 0x00, sizeof(out)); - tt_int_op(64, ==, + tt_int_op(64, OP_EQ, secret_to_key_compute_key(out, 64, spec, 2, "", 0, 2)); test_memeq_hex(out, "77d6576238657b203b19ca42c18a0497" @@ -937,7 +937,7 @@ test_crypto_scrypt_vectors(void *arg) base16_decode((char*)spec, sizeof(spec), "4e61436c" "0A34", 12); memset(out, 0x00, sizeof(out)); - tt_int_op(64, ==, + tt_int_op(64, OP_EQ, secret_to_key_compute_key(out, 64, spec, 6, "password", 8, 2)); test_memeq_hex(out, "fdbabe1c9d3472007856e7190d01e9fe" @@ -948,7 +948,7 @@ test_crypto_scrypt_vectors(void *arg) base16_decode((char*)spec, sizeof(spec), "536f6469756d43686c6f72696465" "0e30", 32); memset(out, 0x00, sizeof(out)); - tt_int_op(64, ==, + tt_int_op(64, OP_EQ, secret_to_key_compute_key(out, 64, spec, 16, "pleaseletmein", 13, 2)); test_memeq_hex(out, @@ -960,7 +960,7 @@ test_crypto_scrypt_vectors(void *arg) base16_decode((char*)spec, sizeof(spec), "536f6469756d43686c6f72696465" "1430", 32); memset(out, 0x00, sizeof(out)); - tt_int_op(64, ==, + tt_int_op(64, OP_EQ, secret_to_key_compute_key(out, 64, spec, 16, "pleaseletmein", 13, 2)); test_memeq_hex(out, @@ -984,28 +984,28 @@ test_crypto_pbkdf2_vectors(void *arg) base16_decode((char*)spec, sizeof(spec), "73616c74" "00" , 10); memset(out, 0x00, sizeof(out)); - tt_int_op(20, ==, + tt_int_op(20, OP_EQ, secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1)); test_memeq_hex(out, "0c60c80f961f0e71f3a9b524af6012062fe037a6"); base16_decode((char*)spec, sizeof(spec), "73616c74" "01" , 10); memset(out, 0x00, sizeof(out)); - tt_int_op(20, ==, + tt_int_op(20, OP_EQ, secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1)); test_memeq_hex(out, "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957"); base16_decode((char*)spec, sizeof(spec), "73616c74" "0C" , 10); memset(out, 0x00, sizeof(out)); - tt_int_op(20, ==, + tt_int_op(20, OP_EQ, secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1)); test_memeq_hex(out, "4b007901b765489abead49d926f721d065a429c1"); base16_decode((char*)spec, sizeof(spec), "73616c74" "18" , 10); memset(out, 0x00, sizeof(out)); - tt_int_op(20, ==, + tt_int_op(20, OP_EQ, secret_to_key_compute_key(out, 20, spec, 5, "password", 8, 1)); test_memeq_hex(out, "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984"); @@ -1013,7 +1013,7 @@ test_crypto_pbkdf2_vectors(void *arg) "73616c7453414c5473616c7453414c5473616c745" "3414c5473616c7453414c5473616c74" "0C" , 74); memset(out, 0x00, sizeof(out)); - tt_int_op(25, ==, + tt_int_op(25, OP_EQ, secret_to_key_compute_key(out, 25, spec, 37, "passwordPASSWORDpassword", 24, 1)); test_memeq_hex(out, "3d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038"); @@ -1021,7 +1021,7 @@ test_crypto_pbkdf2_vectors(void *arg) base16_decode((char*)spec, sizeof(spec), "7361006c74" "0c" , 12); memset(out, 0x00, sizeof(out)); - tt_int_op(16, ==, + tt_int_op(16, OP_EQ, secret_to_key_compute_key(out, 16, spec, 6, "pass\0word", 9, 1)); test_memeq_hex(out, "56fa6aa75548099dcc37d7f03425e0c3"); @@ -1049,30 +1049,30 @@ test_crypto_pwbox(void *arg) (void)arg; for (i = 0; i < ARRAY_LENGTH(flags); ++i) { - tt_int_op(0, ==, crypto_pwbox(&boxed, &len, + tt_int_op(0, OP_EQ, crypto_pwbox(&boxed, &len, (const uint8_t*)msg, strlen(msg), pw, strlen(pw), flags[i])); tt_assert(boxed); tt_assert(len > 128+32); - tt_int_op(0, ==, crypto_unpwbox(&decoded, &dlen, boxed, len, + tt_int_op(0, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len, pw, strlen(pw))); tt_assert(decoded); - tt_uint_op(dlen, ==, strlen(msg)); - tt_mem_op(decoded, ==, msg, dlen); + tt_uint_op(dlen, OP_EQ, strlen(msg)); + tt_mem_op(decoded, OP_EQ, msg, dlen); tor_free(decoded); - tt_int_op(UNPWBOX_BAD_SECRET, ==, crypto_unpwbox(&decoded, &dlen, + tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len, pw, strlen(pw)-1)); boxed[len-1] ^= 1; - tt_int_op(UNPWBOX_BAD_SECRET, ==, crypto_unpwbox(&decoded, &dlen, + tt_int_op(UNPWBOX_BAD_SECRET, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len, pw, strlen(pw))); boxed[0] = 255; - tt_int_op(UNPWBOX_CORRUPTED, ==, crypto_unpwbox(&decoded, &dlen, + tt_int_op(UNPWBOX_CORRUPTED, OP_EQ, crypto_unpwbox(&decoded, &dlen, boxed, len, pw, strlen(pw))); @@ -1114,79 +1114,79 @@ test_crypto_aes_iv(void *arg) encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 4095, plain, 4095); - tt_int_op(encrypted_size,==, 16 + 4095); + tt_int_op(encrypted_size,OP_EQ, 16 + 4095); tt_assert(encrypted_size > 0); /* This is obviously true, since 4111 is * greater than 0, but its truth is not * obvious to all analysis tools. */ decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 4095); + tt_int_op(decrypted_size,OP_EQ, 4095); tt_assert(decrypted_size > 0); - tt_mem_op(plain,==, decrypted1, 4095); + tt_mem_op(plain,OP_EQ, decrypted1, 4095); /* Encrypt a second time (with a new random initialization vector). */ encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted2, 16 + 4095, plain, 4095); - tt_int_op(encrypted_size,==, 16 + 4095); + tt_int_op(encrypted_size,OP_EQ, 16 + 4095); tt_assert(encrypted_size > 0); decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted2, 4095, encrypted2, encrypted_size); - tt_int_op(decrypted_size,==, 4095); + tt_int_op(decrypted_size,OP_EQ, 4095); tt_assert(decrypted_size > 0); - tt_mem_op(plain,==, decrypted2, 4095); - tt_mem_op(encrypted1,!=, encrypted2, encrypted_size); + tt_mem_op(plain,OP_EQ, decrypted2, 4095); + tt_mem_op(encrypted1,OP_NE, encrypted2, encrypted_size); /* Decrypt with the wrong key. */ decrypted_size = crypto_cipher_decrypt_with_iv(key2, decrypted2, 4095, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 4095); - tt_mem_op(plain,!=, decrypted2, decrypted_size); + tt_int_op(decrypted_size,OP_EQ, 4095); + tt_mem_op(plain,OP_NE, decrypted2, decrypted_size); /* Alter the initialization vector. */ encrypted1[0] += 42; decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 4095); - tt_mem_op(plain,!=, decrypted2, 4095); + tt_int_op(decrypted_size,OP_EQ, 4095); + tt_mem_op(plain,OP_NE, decrypted2, 4095); /* Special length case: 1. */ encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 1, plain_1, 1); - tt_int_op(encrypted_size,==, 16 + 1); + tt_int_op(encrypted_size,OP_EQ, 16 + 1); tt_assert(encrypted_size > 0); decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 1, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 1); + tt_int_op(decrypted_size,OP_EQ, 1); tt_assert(decrypted_size > 0); - tt_mem_op(plain_1,==, decrypted1, 1); + tt_mem_op(plain_1,OP_EQ, decrypted1, 1); /* Special length case: 15. */ encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 15, plain_15, 15); - tt_int_op(encrypted_size,==, 16 + 15); + tt_int_op(encrypted_size,OP_EQ, 16 + 15); tt_assert(encrypted_size > 0); decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 15, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 15); + tt_int_op(decrypted_size,OP_EQ, 15); tt_assert(decrypted_size > 0); - tt_mem_op(plain_15,==, decrypted1, 15); + tt_mem_op(plain_15,OP_EQ, decrypted1, 15); /* Special length case: 16. */ encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 16, plain_16, 16); - tt_int_op(encrypted_size,==, 16 + 16); + tt_int_op(encrypted_size,OP_EQ, 16 + 16); tt_assert(encrypted_size > 0); decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 16, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 16); + tt_int_op(decrypted_size,OP_EQ, 16); tt_assert(decrypted_size > 0); - tt_mem_op(plain_16,==, decrypted1, 16); + tt_mem_op(plain_16,OP_EQ, decrypted1, 16); /* Special length case: 17. */ encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 17, plain_17, 17); - tt_int_op(encrypted_size,==, 16 + 17); + tt_int_op(encrypted_size,OP_EQ, 16 + 17); tt_assert(encrypted_size > 0); decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 17, encrypted1, encrypted_size); - tt_int_op(decrypted_size,==, 17); + tt_int_op(decrypted_size,OP_EQ, 17); tt_assert(decrypted_size > 0); - tt_mem_op(plain_17,==, decrypted1, 17); + tt_mem_op(plain_17,OP_EQ, decrypted1, 17); done: /* Free memory. */ @@ -1208,26 +1208,26 @@ test_crypto_base32_decode(void *arg) /* Encode and decode a random string. */ base32_encode(encoded, 96 + 1, plain, 60); res = base32_decode(decoded, 60, encoded, 96); - tt_int_op(res,==, 0); - tt_mem_op(plain,==, decoded, 60); + tt_int_op(res,OP_EQ, 0); + tt_mem_op(plain,OP_EQ, decoded, 60); /* Encode, uppercase, and decode a random string. */ base32_encode(encoded, 96 + 1, plain, 60); tor_strupper(encoded); res = base32_decode(decoded, 60, encoded, 96); - tt_int_op(res,==, 0); - tt_mem_op(plain,==, decoded, 60); + tt_int_op(res,OP_EQ, 0); + tt_mem_op(plain,OP_EQ, decoded, 60); /* Change encoded string and decode. */ if (encoded[0] == 'A' || encoded[0] == 'a') encoded[0] = 'B'; else encoded[0] = 'A'; res = base32_decode(decoded, 60, encoded, 96); - tt_int_op(res,==, 0); - tt_mem_op(plain,!=, decoded, 60); + tt_int_op(res,OP_EQ, 0); + tt_mem_op(plain,OP_NE, decoded, 60); /* Bad encodings. */ encoded[0] = '!'; res = base32_decode(decoded, 60, encoded, 96); - tt_int_op(0, >, res); + tt_int_op(0, OP_GT, res); done: ; @@ -1250,7 +1250,7 @@ test_crypto_kdf_TAP(void *arg) * your own. */ memset(key_material, 0, sizeof(key_material)); EXPAND(""); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); test_memeq_hex(key_material, "5ba93c9db0cff93f52b521d7420e43f6eda2784fbf8b4530d8" "d246dd74ac53a13471bba17941dff7c4ea21bb365bbeeaf5f2" @@ -1258,7 +1258,7 @@ test_crypto_kdf_TAP(void *arg) "f07b01e13da42c6cf1de3abfdea9b95f34687cbbe92b9a7383"); EXPAND("Tor"); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); test_memeq_hex(key_material, "776c6214fc647aaa5f683c737ee66ec44f03d0372e1cce6922" "7950f236ddf1e329a7ce7c227903303f525a8c6662426e8034" @@ -1266,7 +1266,7 @@ test_crypto_kdf_TAP(void *arg) "3f45dfda1a80bdc8b80de01b23e3e0ffae099b3e4ccf28dc28"); EXPAND("AN ALARMING ITEM TO FIND ON A MONTHLY AUTO-DEBIT NOTICE"); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); test_memeq_hex(key_material, "a340b5d126086c3ab29c2af4179196dbf95e1c72431419d331" "4844bf8f6afb6098db952b95581fb6c33625709d6f4400b8e7" @@ -1302,7 +1302,7 @@ test_crypto_hkdf_sha256(void *arg) /* Test vectors generated with ntor_ref.py */ memset(key_material, 0, sizeof(key_material)); EXPAND(""); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); test_memeq_hex(key_material, "d3490ed48b12a48f9547861583573fe3f19aafe3f81dc7fc75" "eeed96d741b3290f941576c1f9f0b2d463d1ec7ab2c6bf71cd" @@ -1310,7 +1310,7 @@ test_crypto_hkdf_sha256(void *arg) "dcf6abe0d20c77cf363e8ffe358927817a3d3e73712cee28d8"); EXPAND("Tor"); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); test_memeq_hex(key_material, "5521492a85139a8d9107a2d5c0d9c91610d0f95989975ebee6" "c02a4f8d622a6cfdf9b7c7edd3832e2760ded1eac309b76f8d" @@ -1318,7 +1318,7 @@ test_crypto_hkdf_sha256(void *arg) "961be9fdb9f93197ea8e5977180801926d3321fa21513e59ac"); EXPAND("AN ALARMING ITEM TO FIND ON YOUR CREDIT-RATING STATEMENT"); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); test_memeq_hex(key_material, "a2aa9b50da7e481d30463adb8f233ff06e9571a0ca6ab6df0f" "b206fa34e5bc78d063fc291501beec53b36e5a0e434561200c" @@ -1381,7 +1381,7 @@ test_crypto_curve25519_impl(void *arg) e2k[31] |= (byte & 0x80); } curve25519_impl(e1e2k,e1,e2k); - tt_mem_op(e1e2k,==, e2e1k, 32); + tt_mem_op(e1e2k,OP_EQ, e2e1k, 32); if (loop == loop_max-1) { break; } @@ -1417,7 +1417,7 @@ test_crypto_curve25519_wrappers(void *arg) tt_assert(curve25519_public_key_is_ok(&pubkey2)); curve25519_handshake(output1, &seckey1, &pubkey2); curve25519_handshake(output2, &seckey2, &pubkey1); - tt_mem_op(output1,==, output2, sizeof(output1)); + tt_mem_op(output1,OP_EQ, output2, sizeof(output1)); done: ; @@ -1434,26 +1434,26 @@ test_crypto_curve25519_encode(void *arg) curve25519_secret_key_generate(&seckey, 0); curve25519_public_key_generate(&key1, &seckey); - tt_int_op(0, ==, curve25519_public_to_base64(buf, &key1)); - tt_int_op(CURVE25519_BASE64_PADDED_LEN, ==, strlen(buf)); + tt_int_op(0, OP_EQ, curve25519_public_to_base64(buf, &key1)); + tt_int_op(CURVE25519_BASE64_PADDED_LEN, OP_EQ, strlen(buf)); - tt_int_op(0, ==, curve25519_public_from_base64(&key2, buf)); - tt_mem_op(key1.public_key,==, key2.public_key, CURVE25519_PUBKEY_LEN); + tt_int_op(0, OP_EQ, curve25519_public_from_base64(&key2, buf)); + tt_mem_op(key1.public_key,OP_EQ, key2.public_key, CURVE25519_PUBKEY_LEN); buf[CURVE25519_BASE64_PADDED_LEN - 1] = '\0'; - tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, ==, strlen(buf)); - tt_int_op(0, ==, curve25519_public_from_base64(&key3, buf)); - tt_mem_op(key1.public_key,==, key3.public_key, CURVE25519_PUBKEY_LEN); + tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, OP_EQ, strlen(buf)); + tt_int_op(0, OP_EQ, curve25519_public_from_base64(&key3, buf)); + tt_mem_op(key1.public_key,OP_EQ, key3.public_key, CURVE25519_PUBKEY_LEN); /* Now try bogus parses. */ strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=", sizeof(buf)); - tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf)); + tt_int_op(-1, OP_EQ, curve25519_public_from_base64(&key3, buf)); strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", sizeof(buf)); - tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf)); + tt_int_op(-1, OP_EQ, curve25519_public_from_base64(&key3, buf)); strlcpy(buf, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", sizeof(buf)); - tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf)); + tt_int_op(-1, OP_EQ, curve25519_public_from_base64(&key3, buf)); done: ; @@ -1472,45 +1472,45 @@ test_crypto_curve25519_persist(void *arg) (void)arg; - tt_int_op(0,==,curve25519_keypair_generate(&keypair, 0)); + tt_int_op(0,OP_EQ,curve25519_keypair_generate(&keypair, 0)); - tt_int_op(0,==,curve25519_keypair_write_to_file(&keypair, fname, "testing")); - tt_int_op(0,==,curve25519_keypair_read_from_file(&keypair2, &tag, fname)); - tt_str_op(tag,==,"testing"); + tt_int_op(0,OP_EQ,curve25519_keypair_write_to_file(&keypair, fname, "testing")); + tt_int_op(0,OP_EQ,curve25519_keypair_read_from_file(&keypair2, &tag, fname)); + tt_str_op(tag,OP_EQ,"testing"); tor_free(tag); - tt_mem_op(keypair.pubkey.public_key,==, + tt_mem_op(keypair.pubkey.public_key,OP_EQ, keypair2.pubkey.public_key, CURVE25519_PUBKEY_LEN); - tt_mem_op(keypair.seckey.secret_key,==, + tt_mem_op(keypair.seckey.secret_key,OP_EQ, keypair2.seckey.secret_key, CURVE25519_SECKEY_LEN); content = read_file_to_str(fname, RFTS_BIN, &st); tt_assert(content); taglen = strlen("== c25519v1: testing =="); - tt_u64_op((uint64_t)st.st_size, ==, + tt_u64_op((uint64_t)st.st_size, OP_EQ, 32+CURVE25519_PUBKEY_LEN+CURVE25519_SECKEY_LEN); tt_assert(fast_memeq(content, "== c25519v1: testing ==", taglen)); tt_assert(tor_mem_is_zero(content+taglen, 32-taglen)); cp = content + 32; - tt_mem_op(keypair.seckey.secret_key,==, + tt_mem_op(keypair.seckey.secret_key,OP_EQ, cp, CURVE25519_SECKEY_LEN); cp += CURVE25519_SECKEY_LEN; - tt_mem_op(keypair.pubkey.public_key,==, + tt_mem_op(keypair.pubkey.public_key,OP_EQ, cp, CURVE25519_SECKEY_LEN); tor_free(fname); fname = tor_strdup(get_fname("bogus_keypair")); - tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); + tt_int_op(-1, OP_EQ, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); tor_free(tag); content[69] ^= 0xff; - tt_int_op(0, ==, write_bytes_to_file(fname, content, (size_t)st.st_size, 1)); - tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); + tt_int_op(0, OP_EQ, write_bytes_to_file(fname, content, (size_t)st.st_size, 1)); + tt_int_op(-1, OP_EQ, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); done: tor_free(fname); @@ -1536,41 +1536,41 @@ test_crypto_ed25519_simple(void *arg) (void)arg; - tt_int_op(0, ==, ed25519_secret_key_generate(&sec1, 0)); - tt_int_op(0, ==, ed25519_secret_key_generate(&sec2, 1)); + tt_int_op(0, OP_EQ, ed25519_secret_key_generate(&sec1, 0)); + tt_int_op(0, OP_EQ, ed25519_secret_key_generate(&sec2, 1)); - tt_int_op(0, ==, ed25519_public_key_generate(&pub1, &sec1)); - tt_int_op(0, ==, ed25519_public_key_generate(&pub2, &sec1)); + tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pub1, &sec1)); + tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pub2, &sec1)); - tt_mem_op(pub1.pubkey, ==, pub2.pubkey, sizeof(pub1.pubkey)); + tt_mem_op(pub1.pubkey, OP_EQ, pub2.pubkey, sizeof(pub1.pubkey)); memcpy(&kp1.pubkey, &pub1, sizeof(pub1)); memcpy(&kp1.seckey, &sec1, sizeof(sec1)); - tt_int_op(0, ==, ed25519_sign(&sig1, msg, msg_len, &kp1)); - tt_int_op(0, ==, ed25519_sign(&sig2, msg, msg_len, &kp1)); + tt_int_op(0, OP_EQ, ed25519_sign(&sig1, msg, msg_len, &kp1)); + tt_int_op(0, OP_EQ, ed25519_sign(&sig2, msg, msg_len, &kp1)); /* Ed25519 signatures are deterministic */ - tt_mem_op(sig1.sig, ==, sig2.sig, sizeof(sig1.sig)); + tt_mem_op(sig1.sig, OP_EQ, sig2.sig, sizeof(sig1.sig)); /* Basic signature is valid. */ - tt_int_op(0, ==, ed25519_checksig(&sig1, msg, msg_len, &pub1)); + tt_int_op(0, OP_EQ, ed25519_checksig(&sig1, msg, msg_len, &pub1)); /* Altered signature doesn't work. */ sig1.sig[0] ^= 3; - tt_int_op(-1, ==, ed25519_checksig(&sig1, msg, msg_len, &pub1)); + tt_int_op(-1, OP_EQ, ed25519_checksig(&sig1, msg, msg_len, &pub1)); /* Wrong public key doesn't work. */ - tt_int_op(0, ==, ed25519_public_key_generate(&pub2, &sec2)); - tt_int_op(-1, ==, ed25519_checksig(&sig2, msg, msg_len, &pub2)); + tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pub2, &sec2)); + tt_int_op(-1, OP_EQ, ed25519_checksig(&sig2, msg, msg_len, &pub2)); /* Wrong message doesn't work. */ - tt_int_op(0, ==, ed25519_checksig(&sig2, msg, msg_len, &pub1)); - tt_int_op(-1, ==, ed25519_checksig(&sig2, msg, msg_len-1, &pub1)); - tt_int_op(-1, ==, ed25519_checksig(&sig2, msg2, msg2_len, &pub1)); + tt_int_op(0, OP_EQ, ed25519_checksig(&sig2, msg, msg_len, &pub1)); + tt_int_op(-1, OP_EQ, ed25519_checksig(&sig2, msg, msg_len-1, &pub1)); + tt_int_op(-1, OP_EQ, ed25519_checksig(&sig2, msg2, msg2_len, &pub1)); /* Batch signature checking works with some bad. */ - tt_int_op(0, ==, ed25519_keypair_generate(&kp2, 0)); - tt_int_op(0, ==, ed25519_sign(&sig1, msg, msg_len, &kp2)); + tt_int_op(0, OP_EQ, ed25519_keypair_generate(&kp2, 0)); + tt_int_op(0, OP_EQ, ed25519_sign(&sig1, msg, msg_len, &kp2)); { ed25519_checkable_t ch[] = { { &pub1, sig2, msg, msg_len }, /*ok*/ @@ -1579,12 +1579,12 @@ test_crypto_ed25519_simple(void *arg) { &kp2.pubkey, sig1, msg, msg_len }, /*ok*/ }; int okay[4]; - tt_int_op(-2, ==, ed25519_checksig_batch(okay, ch, 4)); - tt_int_op(okay[0], ==, 1); - tt_int_op(okay[1], ==, 0); - tt_int_op(okay[2], ==, 0); - tt_int_op(okay[3], ==, 1); - tt_int_op(-2, ==, ed25519_checksig_batch(NULL, ch, 4)); + tt_int_op(-2, OP_EQ, ed25519_checksig_batch(okay, ch, 4)); + tt_int_op(okay[0], OP_EQ, 1); + tt_int_op(okay[1], OP_EQ, 0); + tt_int_op(okay[2], OP_EQ, 0); + tt_int_op(okay[3], OP_EQ, 1); + tt_int_op(-2, OP_EQ, ed25519_checksig_batch(NULL, ch, 4)); } /* Batch signature checking works with all good. */ @@ -1594,10 +1594,10 @@ test_crypto_ed25519_simple(void *arg) { &kp2.pubkey, sig1, msg, msg_len }, /*ok*/ }; int okay[2]; - tt_int_op(0, ==, ed25519_checksig_batch(okay, ch, 2)); - tt_int_op(okay[0], ==, 1); - tt_int_op(okay[1], ==, 1); - tt_int_op(0, ==, ed25519_checksig_batch(NULL, ch, 2)); + tt_int_op(0, OP_EQ, ed25519_checksig_batch(okay, ch, 2)); + tt_int_op(okay[0], OP_EQ, 1); + tt_int_op(okay[1], OP_EQ, 1); + tt_int_op(0, OP_EQ, ed25519_checksig_batch(NULL, ch, 2)); } done: @@ -1680,14 +1680,14 @@ test_crypto_ed25519_test_vectors(void *arg) base16_decode((char*)sk_seed, sizeof(sk_seed), items[i].sk, 64); ed25519_secret_key_from_seed(&kp.seckey, sk_seed); - tt_int_op(0, ==, ed25519_public_key_generate(&kp.pubkey, &kp.seckey)); + tt_int_op(0, OP_EQ, ed25519_public_key_generate(&kp.pubkey, &kp.seckey)); test_memeq_hex(kp.pubkey.pubkey, items[i].pk); msg_len = strlen(items[i].msg) / 2; msg = tor_malloc(msg_len); base16_decode((char*)msg, msg_len, items[i].msg, strlen(items[i].msg)); - tt_int_op(0, ==, ed25519_sign(&sig, msg, msg_len, &kp)); + tt_int_op(0, OP_EQ, ed25519_sign(&sig, msg, msg_len, &kp)); test_memeq_hex(sig.sig, items[i].sig); tor_free(msg); @@ -1707,14 +1707,14 @@ test_crypto_ed25519_encode(void *arg) (void) arg; /* Test roundtrip. */ - tt_int_op(0, ==, ed25519_keypair_generate(&kp, 0)); - tt_int_op(0, ==, ed25519_public_to_base64(buf, &kp.pubkey)); - tt_int_op(ED25519_BASE64_LEN, ==, strlen(buf)); - tt_int_op(0, ==, ed25519_public_from_base64(&pk, buf)); - tt_mem_op(kp.pubkey.pubkey, ==, pk.pubkey, ED25519_PUBKEY_LEN); + tt_int_op(0, OP_EQ, ed25519_keypair_generate(&kp, 0)); + tt_int_op(0, OP_EQ, ed25519_public_to_base64(buf, &kp.pubkey)); + tt_int_op(ED25519_BASE64_LEN, OP_EQ, strlen(buf)); + tt_int_op(0, OP_EQ, ed25519_public_from_base64(&pk, buf)); + tt_mem_op(kp.pubkey.pubkey, OP_EQ, pk.pubkey, ED25519_PUBKEY_LEN); /* Test known value. */ - tt_int_op(0, ==, ed25519_public_from_base64(&pk, + tt_int_op(0, OP_EQ, ed25519_public_from_base64(&pk, "lVIuIctLjbGZGU5wKMNXxXlSE3cW4kaqkqm04u6pxvM")); test_memeq_hex(pk.pubkey, "95522e21cb4b8db199194e7028c357c57952137716e246aa92a9b4e2eea9c6f3"); @@ -1740,21 +1740,21 @@ test_crypto_ed25519_convert(void *arg) int bit=0; ed25519_signature_t sig; - tt_int_op(0,==,curve25519_keypair_generate(&curve25519_keypair, i&1)); - tt_int_op(0,==,ed25519_keypair_from_curve25519_keypair( + tt_int_op(0,OP_EQ,curve25519_keypair_generate(&curve25519_keypair, i&1)); + tt_int_op(0,OP_EQ,ed25519_keypair_from_curve25519_keypair( &ed25519_keypair, &bit, &curve25519_keypair)); - tt_int_op(0,==,ed25519_public_key_from_curve25519_public_key( + tt_int_op(0,OP_EQ,ed25519_public_key_from_curve25519_public_key( &ed25519_pubkey, &curve25519_keypair.pubkey, bit)); - tt_mem_op(ed25519_pubkey.pubkey, ==, ed25519_keypair.pubkey.pubkey, 32); + tt_mem_op(ed25519_pubkey.pubkey, OP_EQ, ed25519_keypair.pubkey.pubkey, 32); - tt_int_op(0,==,ed25519_sign(&sig, msg, sizeof(msg), &ed25519_keypair)); - tt_int_op(0,==,ed25519_checksig(&sig, msg, sizeof(msg), + tt_int_op(0,OP_EQ,ed25519_sign(&sig, msg, sizeof(msg), &ed25519_keypair)); + tt_int_op(0,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg), &ed25519_pubkey)); - tt_int_op(-1,==,ed25519_checksig(&sig, msg, sizeof(msg)-1, + tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg)-1, &ed25519_pubkey)); sig.sig[0] ^= 15; - tt_int_op(-1,==,ed25519_checksig(&sig, msg, sizeof(msg), + tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg), &ed25519_pubkey)); } @@ -1782,26 +1782,26 @@ test_crypto_ed25519_blinding(void *arg) crypto_rand((char*) blinding, sizeof(blinding)); - tt_int_op(0,==,ed25519_keypair_generate(&ed25519_keypair, 0)); - tt_int_op(0,==,ed25519_keypair_blind(&ed25519_keypair_blinded, + tt_int_op(0,OP_EQ,ed25519_keypair_generate(&ed25519_keypair, 0)); + tt_int_op(0,OP_EQ,ed25519_keypair_blind(&ed25519_keypair_blinded, &ed25519_keypair, blinding)); - tt_int_op(0,==,ed25519_public_blind(&ed25519_pubkey_blinded, + tt_int_op(0,OP_EQ,ed25519_public_blind(&ed25519_pubkey_blinded, &ed25519_keypair.pubkey, blinding)); - tt_mem_op(ed25519_pubkey_blinded.pubkey, ==, + tt_mem_op(ed25519_pubkey_blinded.pubkey, OP_EQ, ed25519_keypair_blinded.pubkey.pubkey, 32); - tt_int_op(0,==,ed25519_sign(&sig, msg, sizeof(msg), + tt_int_op(0,OP_EQ,ed25519_sign(&sig, msg, sizeof(msg), &ed25519_keypair_blinded)); - tt_int_op(0,==,ed25519_checksig(&sig, msg, sizeof(msg), + tt_int_op(0,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg), &ed25519_pubkey_blinded)); - tt_int_op(-1,==,ed25519_checksig(&sig, msg, sizeof(msg)-1, + tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg)-1, &ed25519_pubkey_blinded)); sig.sig[0] ^= 15; - tt_int_op(-1,==,ed25519_checksig(&sig, msg, sizeof(msg), + tt_int_op(-1,OP_EQ,ed25519_checksig(&sig, msg, sizeof(msg), &ed25519_pubkey_blinded)); } @@ -1829,43 +1829,43 @@ test_crypto_ed25519_testvectors(void *arg) #define DECODE(p,s) base16_decode((char*)(p),sizeof(p),(s),strlen(s)) #define EQ(a,h) test_memeq_hex((const char*)(a), (h)) - tt_int_op(0, ==, DECODE(sk, ED25519_SECRET_KEYS[i])); - tt_int_op(0, ==, DECODE(blinding_param, ED25519_BLINDING_PARAMS[i])); + tt_int_op(0, OP_EQ, DECODE(sk, ED25519_SECRET_KEYS[i])); + tt_int_op(0, OP_EQ, DECODE(blinding_param, ED25519_BLINDING_PARAMS[i])); - tt_int_op(0, ==, ed25519_secret_key_from_seed(&esk, sk)); + tt_int_op(0, OP_EQ, ed25519_secret_key_from_seed(&esk, sk)); EQ(esk.seckey, ED25519_EXPANDED_SECRET_KEYS[i]); - tt_int_op(0, ==, ed25519_public_key_generate(&pk, &esk)); + tt_int_op(0, OP_EQ, ed25519_public_key_generate(&pk, &esk)); EQ(pk.pubkey, ED25519_PUBLIC_KEYS[i]); memcpy(&curvekp.seckey.secret_key, esk.seckey, 32); curve25519_public_key_generate(&curvekp.pubkey, &curvekp.seckey); - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, ed25519_keypair_from_curve25519_keypair(&keypair, &sign, &curvekp)); - tt_int_op(0, ==, ed25519_public_key_from_curve25519_public_key( + tt_int_op(0, OP_EQ, ed25519_public_key_from_curve25519_public_key( &pkfromcurve, &curvekp.pubkey, sign)); - tt_mem_op(keypair.pubkey.pubkey, ==, pkfromcurve.pubkey, 32); + tt_mem_op(keypair.pubkey.pubkey, OP_EQ, pkfromcurve.pubkey, 32); EQ(curvekp.pubkey.public_key, ED25519_CURVE25519_PUBLIC_KEYS[i]); /* Self-signing */ memcpy(&keypair.seckey, &esk, sizeof(esk)); memcpy(&keypair.pubkey, &pk, sizeof(pk)); - tt_int_op(0, ==, ed25519_sign(&sig, pk.pubkey, 32, &keypair)); + tt_int_op(0, OP_EQ, ed25519_sign(&sig, pk.pubkey, 32, &keypair)); EQ(sig.sig, ED25519_SELF_SIGNATURES[i]); /* Blinding */ - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, ed25519_keypair_blind(&blind_keypair, &keypair, blinding_param)); - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, ed25519_public_blind(&blind_pk, &pk, blinding_param)); EQ(blind_keypair.seckey.seckey, ED25519_BLINDED_SECRET_KEYS[i]); EQ(blind_pk.pubkey, ED25519_BLINDED_PUBLIC_KEYS[i]); - tt_mem_op(blind_pk.pubkey, ==, blind_keypair.pubkey.pubkey, 32); + tt_mem_op(blind_pk.pubkey, OP_EQ, blind_keypair.pubkey.pubkey, 32); #undef DECODE #undef EQ @@ -1962,7 +1962,7 @@ test_crypto_siphash(void *arg) for (i = 0; i < 64; ++i) { uint64_t r = siphash24(input, i, &K); for (j = 0; j < 8; ++j) { - tt_int_op( (r >> (j*8)) & 0xff, ==, VECTORS[i][j]); + tt_int_op( (r >> (j*8)) & 0xff, OP_EQ, VECTORS[i][j]); } } diff --git a/src/test/test_dir.c b/src/test/test_dir.c index c7e22d8cec..cdf16aded4 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -180,7 +180,7 @@ test_dir_formats(void *arg) buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same * twice */ - tt_str_op(buf,==, buf2); + tt_str_op(buf,OP_EQ, buf2); tor_free(buf); buf = router_dump_router_to_string(r1, pk2); @@ -188,12 +188,12 @@ test_dir_formats(void *arg) cp = buf; rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL,NULL); tt_assert(rp1); - tt_int_op(rp1->addr,==, r1->addr); - tt_int_op(rp1->or_port,==, r1->or_port); + tt_int_op(rp1->addr,OP_EQ, r1->addr); + tt_int_op(rp1->or_port,OP_EQ, r1->or_port); //test_eq(rp1->dir_port, r1->dir_port); - tt_int_op(rp1->bandwidthrate,==, r1->bandwidthrate); - tt_int_op(rp1->bandwidthburst,==, r1->bandwidthburst); - tt_int_op(rp1->bandwidthcapacity,==, r1->bandwidthcapacity); + tt_int_op(rp1->bandwidthrate,OP_EQ, r1->bandwidthrate); + tt_int_op(rp1->bandwidthburst,OP_EQ, r1->bandwidthburst); + tt_int_op(rp1->bandwidthcapacity,OP_EQ, r1->bandwidthcapacity); tt_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0); tt_assert(crypto_pk_cmp_keys(rp1->identity_pkey, pk2) == 0); //tt_assert(rp1->exit_policy == NULL); @@ -224,40 +224,40 @@ test_dir_formats(void *arg) buf = router_dump_router_to_string(r2, pk1); buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same * twice */ - tt_str_op(buf,==, buf2); + tt_str_op(buf,OP_EQ, buf2); tor_free(buf); buf = router_dump_router_to_string(r2, pk1); cp = buf; rp2 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL,NULL); tt_assert(rp2); - tt_int_op(rp2->addr,==, r2->addr); - tt_int_op(rp2->or_port,==, r2->or_port); - tt_int_op(rp2->dir_port,==, r2->dir_port); - tt_int_op(rp2->bandwidthrate,==, r2->bandwidthrate); - tt_int_op(rp2->bandwidthburst,==, r2->bandwidthburst); - tt_int_op(rp2->bandwidthcapacity,==, r2->bandwidthcapacity); - tt_mem_op(rp2->onion_curve25519_pkey->public_key,==, + tt_int_op(rp2->addr,OP_EQ, r2->addr); + tt_int_op(rp2->or_port,OP_EQ, r2->or_port); + tt_int_op(rp2->dir_port,OP_EQ, r2->dir_port); + tt_int_op(rp2->bandwidthrate,OP_EQ, r2->bandwidthrate); + tt_int_op(rp2->bandwidthburst,OP_EQ, r2->bandwidthburst); + tt_int_op(rp2->bandwidthcapacity,OP_EQ, r2->bandwidthcapacity); + tt_mem_op(rp2->onion_curve25519_pkey->public_key,OP_EQ, r2->onion_curve25519_pkey->public_key, CURVE25519_PUBKEY_LEN); tt_assert(crypto_pk_cmp_keys(rp2->onion_pkey, pk2) == 0); tt_assert(crypto_pk_cmp_keys(rp2->identity_pkey, pk1) == 0); - tt_int_op(smartlist_len(rp2->exit_policy),==, 2); + tt_int_op(smartlist_len(rp2->exit_policy),OP_EQ, 2); p = smartlist_get(rp2->exit_policy, 0); - tt_int_op(p->policy_type,==, ADDR_POLICY_ACCEPT); + tt_int_op(p->policy_type,OP_EQ, ADDR_POLICY_ACCEPT); tt_assert(tor_addr_is_null(&p->addr)); - tt_int_op(p->maskbits,==, 0); - tt_int_op(p->prt_min,==, 80); - tt_int_op(p->prt_max,==, 80); + tt_int_op(p->maskbits,OP_EQ, 0); + tt_int_op(p->prt_min,OP_EQ, 80); + tt_int_op(p->prt_max,OP_EQ, 80); p = smartlist_get(rp2->exit_policy, 1); - tt_int_op(p->policy_type,==, ADDR_POLICY_REJECT); + tt_int_op(p->policy_type,OP_EQ, ADDR_POLICY_REJECT); tt_assert(tor_addr_eq(&p->addr, &ex2->addr)); - tt_int_op(p->maskbits,==, 8); - tt_int_op(p->prt_min,==, 24); - tt_int_op(p->prt_max,==, 24); + tt_int_op(p->maskbits,OP_EQ, 8); + tt_int_op(p->prt_min,OP_EQ, 24); + tt_int_op(p->prt_max,OP_EQ, 24); #if 0 /* Okay, now for the directories. */ @@ -312,7 +312,7 @@ test_dir_routerparse_bad(void *arg) again = 999; \ ri = router_parse_entry_from_string((s), NULL, 0, 0, NULL, &again); \ tt_assert(ri == NULL); \ - tt_int_op(again, ==, (againval)); \ + tt_int_op(again, OP_EQ, (againval)); \ } while (0) CHECK_OK(EX_RI_MINIMAL); @@ -404,7 +404,7 @@ test_dir_extrainfo_parsing(void *arg) again = 999; \ ei = extrainfo_parse_entry_from_string((s), NULL, 0, map, &again); \ tt_assert(ei == NULL); \ - tt_int_op(again, ==, (againval)); \ + tt_int_op(again, OP_EQ, (againval)); \ } while (0) #define ADD(name) \ do { \ @@ -412,7 +412,7 @@ test_dir_extrainfo_parsing(void *arg) crypto_pk_t *pk = ri->identity_pkey = crypto_pk_new(); \ tt_assert(! crypto_pk_read_public_key_from_string(pk, \ name##_KEY, strlen(name##_KEY))); \ - tt_int_op(0,==,base16_decode(d, 20, name##_FP, strlen(name##_FP))); \ + tt_int_op(0,OP_EQ,base16_decode(d, 20, name##_FP, strlen(name##_FP))); \ digestmap_set((digestmap_t*)map, d, ri); \ ri = NULL; \ } while (0) @@ -490,20 +490,20 @@ test_dir_parse_router_list(void *arg) /* First, parse the routers. */ cp = list; - tt_int_op(0,==, + tt_int_op(0,OP_EQ, router_parse_list_from_string(&cp, NULL, dest, SAVED_NOWHERE, 0, 0, NULL, invalid)); - tt_int_op(2, ==, smartlist_len(dest)); - tt_ptr_op(cp, ==, list + strlen(list)); + tt_int_op(2, OP_EQ, smartlist_len(dest)); + tt_ptr_op(cp, OP_EQ, list + strlen(list)); routerinfo_t *r = smartlist_get(dest, 0); - tt_mem_op(r->cache_info.signed_descriptor_body, ==, + tt_mem_op(r->cache_info.signed_descriptor_body, OP_EQ, EX_RI_MINIMAL, strlen(EX_RI_MINIMAL)); r = smartlist_get(dest, 1); - tt_mem_op(r->cache_info.signed_descriptor_body, ==, + tt_mem_op(r->cache_info.signed_descriptor_body, OP_EQ, EX_RI_MAXIMAL, strlen(EX_RI_MAXIMAL)); - tt_int_op(2, ==, smartlist_len(invalid)); + tt_int_op(2, OP_EQ, smartlist_len(invalid)); test_memeq_hex(smartlist_get(invalid, 0), "ab9eeaa95e7d45740185b4e519c76ead756277a9"); test_memeq_hex(smartlist_get(invalid, 1), @@ -523,18 +523,18 @@ test_dir_parse_router_list(void *arg) ADD(EX_EI_BAD_NICKNAME); ADD(EX_EI_BAD_PUBLISHED); cp = list; - tt_int_op(0,==, + tt_int_op(0,OP_EQ, router_parse_list_from_string(&cp, NULL, dest, SAVED_NOWHERE, 1, 0, NULL, invalid)); - tt_int_op(2, ==, smartlist_len(dest)); + tt_int_op(2, OP_EQ, smartlist_len(dest)); extrainfo_t *e = smartlist_get(dest, 0); - tt_mem_op(e->cache_info.signed_descriptor_body, ==, + tt_mem_op(e->cache_info.signed_descriptor_body, OP_EQ, EX_EI_MAXIMAL, strlen(EX_EI_MAXIMAL)); e = smartlist_get(dest, 1); - tt_mem_op(e->cache_info.signed_descriptor_body, ==, + tt_mem_op(e->cache_info.signed_descriptor_body, OP_EQ, EX_EI_MINIMAL, strlen(EX_EI_MINIMAL)); - tt_int_op(2, ==, smartlist_len(invalid)); + tt_int_op(2, OP_EQ, smartlist_len(invalid)); test_memeq_hex(smartlist_get(invalid, 0), "d5df4aa62ee9ffc9543d41150c9864908e0390af"); test_memeq_hex(smartlist_get(invalid, 1), @@ -608,7 +608,7 @@ test_dir_load_routers(void *arg) #define ADD(str) \ do { \ - tt_int_op(0,==,router_get_router_hash(str, strlen(str), buf)); \ + tt_int_op(0,OP_EQ,router_get_router_hash(str, strlen(str), buf)); \ smartlist_add(wanted, tor_strdup(hex_str(buf, DIGEST_LEN))); \ } while (0) @@ -631,34 +631,34 @@ test_dir_load_routers(void *arg) ADD(EX_RI_BAD_TOKENS); char *list = smartlist_join_strings(chunks, "", 0, NULL); - tt_int_op(1, ==, + tt_int_op(1, OP_EQ, router_load_routers_from_string(list, NULL, SAVED_IN_JOURNAL, wanted, 1, NULL)); /* The "maximal" router was added. */ /* "minimal" was not. */ - tt_int_op(smartlist_len(router_get_routerlist()->routers),==,1); + tt_int_op(smartlist_len(router_get_routerlist()->routers),OP_EQ,1); routerinfo_t *r = smartlist_get(router_get_routerlist()->routers, 0); test_memeq_hex(r->cache_info.signed_descriptor_digest, "581D8A368A0FA854ECDBFAB841D88B3F1B004038"); - tt_int_op(dls_minimal.n_download_failures, ==, 0); - tt_int_op(dls_maximal.n_download_failures, ==, 0); + tt_int_op(dls_minimal.n_download_failures, OP_EQ, 0); + tt_int_op(dls_maximal.n_download_failures, OP_EQ, 0); /* "Bad fingerprint" and "Bad tokens" should have gotten marked * non-retriable. */ - tt_want_int_op(mock_router_get_dl_status_calls, ==, 2); - tt_want_int_op(mock_router_get_dl_status_unrecognized, ==, 0); - tt_int_op(dls_bad_fingerprint.n_download_failures, ==, 255); - tt_int_op(dls_bad_tokens.n_download_failures, ==, 255); + tt_want_int_op(mock_router_get_dl_status_calls, OP_EQ, 2); + tt_want_int_op(mock_router_get_dl_status_unrecognized, OP_EQ, 0); + tt_int_op(dls_bad_fingerprint.n_download_failures, OP_EQ, 255); + tt_int_op(dls_bad_tokens.n_download_failures, OP_EQ, 255); /* bad_sig2 and bad ports" are retriable -- one since only the signature * was bad, and one because we didn't ask for it. */ - tt_int_op(dls_bad_sig2.n_download_failures, ==, 0); - tt_int_op(dls_bad_ports.n_download_failures, ==, 0); + tt_int_op(dls_bad_sig2.n_download_failures, OP_EQ, 0); + tt_int_op(dls_bad_ports.n_download_failures, OP_EQ, 0); /* Wanted still contains "BAD_SIG2" */ - tt_int_op(smartlist_len(wanted), ==, 1); - tt_str_op(smartlist_get(wanted, 0), ==, + tt_int_op(smartlist_len(wanted), OP_EQ, 1); + tt_str_op(smartlist_get(wanted, 0), OP_EQ, "E0A3753CEFD54128EAB239F294954121DB23D2EF"); #undef ADD @@ -725,7 +725,7 @@ test_dir_load_extrainfo(void *arg) #define ADD(str) \ do { \ - tt_int_op(0,==,router_get_extrainfo_hash(str, strlen(str), buf)); \ + tt_int_op(0,OP_EQ,router_get_extrainfo_hash(str, strlen(str), buf)); \ smartlist_add(wanted, tor_strdup(hex_str(buf, DIGEST_LEN))); \ } while (0) @@ -752,7 +752,7 @@ test_dir_load_extrainfo(void *arg) /* The "maximal" router was added. */ /* "minimal" was also added, even though we didn't ask for it, since * that's what we do with extrainfos. */ - tt_int_op(smartlist_len(mock_ei_insert_list),==,2); + tt_int_op(smartlist_len(mock_ei_insert_list),OP_EQ,2); extrainfo_t *e = smartlist_get(mock_ei_insert_list, 0); test_memeq_hex(e->cache_info.signed_descriptor_digest, @@ -761,22 +761,22 @@ test_dir_load_extrainfo(void *arg) e = smartlist_get(mock_ei_insert_list, 1); test_memeq_hex(e->cache_info.signed_descriptor_digest, "47803B02A0E70E9E8BDA226CB1D74DE354D67DFF"); - tt_int_op(dls_minimal.n_download_failures, ==, 0); - tt_int_op(dls_maximal.n_download_failures, ==, 0); + tt_int_op(dls_minimal.n_download_failures, OP_EQ, 0); + tt_int_op(dls_maximal.n_download_failures, OP_EQ, 0); /* "Bad nickname" and "Bad tokens" should have gotten marked * non-retriable. */ - tt_want_int_op(mock_get_by_ei_dd_calls, ==, 2); - tt_want_int_op(mock_get_by_ei_dd_unrecognized, ==, 0); - tt_int_op(sd_ei_bad_nickname.ei_dl_status.n_download_failures, ==, 255); - tt_int_op(sd_ei_bad_tokens.ei_dl_status.n_download_failures, ==, 255); + tt_want_int_op(mock_get_by_ei_dd_calls, OP_EQ, 2); + tt_want_int_op(mock_get_by_ei_dd_unrecognized, OP_EQ, 0); + tt_int_op(sd_ei_bad_nickname.ei_dl_status.n_download_failures, OP_EQ, 255); + tt_int_op(sd_ei_bad_tokens.ei_dl_status.n_download_failures, OP_EQ, 255); /* bad_ports is retriable -- because we didn't ask for it. */ - tt_int_op(dls_bad_ports.n_download_failures, ==, 0); + tt_int_op(dls_bad_ports.n_download_failures, OP_EQ, 0); /* Wanted still contains "BAD_SIG2" */ - tt_int_op(smartlist_len(wanted), ==, 1); - tt_str_op(smartlist_get(wanted, 0), ==, + tt_int_op(smartlist_len(wanted), OP_EQ, 1); + tt_str_op(smartlist_get(wanted, 0), OP_EQ, "16D387D3A58F7DB3CF46638F8D0B90C45C7D769C"); #undef ADD @@ -797,50 +797,50 @@ test_dir_versions(void *arg) /* Try out version parsing functionality */ (void)arg; - tt_int_op(0,==, tor_version_parse("0.3.4pre2-cvs", &ver1)); - tt_int_op(0,==, ver1.major); - tt_int_op(3,==, ver1.minor); - tt_int_op(4,==, ver1.micro); - tt_int_op(VER_PRE,==, ver1.status); - tt_int_op(2,==, ver1.patchlevel); - tt_int_op(0,==, tor_version_parse("0.3.4rc1", &ver1)); - tt_int_op(0,==, ver1.major); - tt_int_op(3,==, ver1.minor); - tt_int_op(4,==, ver1.micro); - tt_int_op(VER_RC,==, ver1.status); - tt_int_op(1,==, ver1.patchlevel); - tt_int_op(0,==, tor_version_parse("1.3.4", &ver1)); - tt_int_op(1,==, ver1.major); - tt_int_op(3,==, ver1.minor); - tt_int_op(4,==, ver1.micro); - tt_int_op(VER_RELEASE,==, ver1.status); - tt_int_op(0,==, ver1.patchlevel); - tt_int_op(0,==, tor_version_parse("1.3.4.999", &ver1)); - tt_int_op(1,==, ver1.major); - tt_int_op(3,==, ver1.minor); - tt_int_op(4,==, ver1.micro); - tt_int_op(VER_RELEASE,==, ver1.status); - tt_int_op(999,==, ver1.patchlevel); - tt_int_op(0,==, tor_version_parse("0.1.2.4-alpha", &ver1)); - tt_int_op(0,==, ver1.major); - tt_int_op(1,==, ver1.minor); - tt_int_op(2,==, ver1.micro); - tt_int_op(4,==, ver1.patchlevel); - tt_int_op(VER_RELEASE,==, ver1.status); - tt_str_op("alpha",==, ver1.status_tag); - tt_int_op(0,==, tor_version_parse("0.1.2.4", &ver1)); - tt_int_op(0,==, ver1.major); - tt_int_op(1,==, ver1.minor); - tt_int_op(2,==, ver1.micro); - tt_int_op(4,==, ver1.patchlevel); - tt_int_op(VER_RELEASE,==, ver1.status); - tt_str_op("",==, ver1.status_tag); + tt_int_op(0,OP_EQ, tor_version_parse("0.3.4pre2-cvs", &ver1)); + tt_int_op(0,OP_EQ, ver1.major); + tt_int_op(3,OP_EQ, ver1.minor); + tt_int_op(4,OP_EQ, ver1.micro); + tt_int_op(VER_PRE,OP_EQ, ver1.status); + tt_int_op(2,OP_EQ, ver1.patchlevel); + tt_int_op(0,OP_EQ, tor_version_parse("0.3.4rc1", &ver1)); + tt_int_op(0,OP_EQ, ver1.major); + tt_int_op(3,OP_EQ, ver1.minor); + tt_int_op(4,OP_EQ, ver1.micro); + tt_int_op(VER_RC,OP_EQ, ver1.status); + tt_int_op(1,OP_EQ, ver1.patchlevel); + tt_int_op(0,OP_EQ, tor_version_parse("1.3.4", &ver1)); + tt_int_op(1,OP_EQ, ver1.major); + tt_int_op(3,OP_EQ, ver1.minor); + tt_int_op(4,OP_EQ, ver1.micro); + tt_int_op(VER_RELEASE,OP_EQ, ver1.status); + tt_int_op(0,OP_EQ, ver1.patchlevel); + tt_int_op(0,OP_EQ, tor_version_parse("1.3.4.999", &ver1)); + tt_int_op(1,OP_EQ, ver1.major); + tt_int_op(3,OP_EQ, ver1.minor); + tt_int_op(4,OP_EQ, ver1.micro); + tt_int_op(VER_RELEASE,OP_EQ, ver1.status); + tt_int_op(999,OP_EQ, ver1.patchlevel); + tt_int_op(0,OP_EQ, tor_version_parse("0.1.2.4-alpha", &ver1)); + tt_int_op(0,OP_EQ, ver1.major); + tt_int_op(1,OP_EQ, ver1.minor); + tt_int_op(2,OP_EQ, ver1.micro); + tt_int_op(4,OP_EQ, ver1.patchlevel); + tt_int_op(VER_RELEASE,OP_EQ, ver1.status); + tt_str_op("alpha",OP_EQ, ver1.status_tag); + tt_int_op(0,OP_EQ, tor_version_parse("0.1.2.4", &ver1)); + tt_int_op(0,OP_EQ, ver1.major); + tt_int_op(1,OP_EQ, ver1.minor); + tt_int_op(2,OP_EQ, ver1.micro); + tt_int_op(4,OP_EQ, ver1.patchlevel); + tt_int_op(VER_RELEASE,OP_EQ, ver1.status); + tt_str_op("",OP_EQ, ver1.status_tag); #define tt_versionstatus_op(vs1, op, vs2) \ tt_assert_test_type(vs1,vs2,#vs1" "#op" "#vs2,version_status_t, \ (val1_ op val2_),"%d",TT_EXIT_TEST_FUNCTION) #define test_v_i_o(val, ver, lst) \ - tt_versionstatus_op(val, ==, tor_version_is_obsolete(ver, lst)) + tt_versionstatus_op(val, OP_EQ, tor_version_is_obsolete(ver, lst)) /* make sure tor_version_is_obsolete() works */ test_v_i_o(VS_OLD, "0.0.1", "Tor 0.0.2"); @@ -867,42 +867,42 @@ test_dir_versions(void *arg) /* On list, not newer than any on same series. */ test_v_i_o(VS_UNRECOMMENDED, "0.1.0.1", "Tor 0.1.0.2,Tor 0.0.9.5,Tor 0.1.1.0"); - tt_int_op(0,==, tor_version_as_new_as("Tor 0.0.5", "0.0.9pre1-cvs")); - tt_int_op(1,==, tor_version_as_new_as( + tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.0.5", "0.0.9pre1-cvs")); + tt_int_op(1,OP_EQ, tor_version_as_new_as( "Tor 0.0.8 on Darwin 64-121-192-100.c3-0." "sfpo-ubr1.sfrn-sfpo.ca.cable.rcn.com Power Macintosh", "0.0.8rc2")); - tt_int_op(0,==, tor_version_as_new_as( + tt_int_op(0,OP_EQ, tor_version_as_new_as( "Tor 0.0.8 on Darwin 64-121-192-100.c3-0." "sfpo-ubr1.sfrn-sfpo.ca.cable.rcn.com Power Macintosh", "0.0.8.2")); /* Now try svn revisions. */ - tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)", + tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)", "Tor 0.2.1.0-dev (r99)")); - tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r100) on Banana Jr", + tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100) on Banana Jr", "Tor 0.2.1.0-dev (r99) on Hal 9000")); - tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)", + tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)", "Tor 0.2.1.0-dev on Colossus")); - tt_int_op(0,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r99)", + tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r99)", "Tor 0.2.1.0-dev (r100)")); - tt_int_op(0,==, tor_version_as_new_as("Tor 0.2.1.0-dev (r99) on MCP", + tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r99) on MCP", "Tor 0.2.1.0-dev (r100) on AM")); - tt_int_op(0,==, tor_version_as_new_as("Tor 0.2.1.0-dev", + tt_int_op(0,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev", "Tor 0.2.1.0-dev (r99)")); - tt_int_op(1,==, tor_version_as_new_as("Tor 0.2.1.1", + tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.1", "Tor 0.2.1.0-dev (r99)")); /* Now try git revisions */ - tt_int_op(0,==, tor_version_parse("0.5.6.7 (git-ff00ff)", &ver1)); - tt_int_op(0,==, ver1.major); - tt_int_op(5,==, ver1.minor); - tt_int_op(6,==, ver1.micro); - tt_int_op(7,==, ver1.patchlevel); - tt_int_op(3,==, ver1.git_tag_len); - tt_mem_op(ver1.git_tag,==, "\xff\x00\xff", 3); - tt_int_op(-1,==, tor_version_parse("0.5.6.7 (git-ff00xx)", &ver1)); - tt_int_op(-1,==, tor_version_parse("0.5.6.7 (git-ff00fff)", &ver1)); - tt_int_op(0,==, tor_version_parse("0.5.6.7 (git ff00fff)", &ver1)); + tt_int_op(0,OP_EQ, tor_version_parse("0.5.6.7 (git-ff00ff)", &ver1)); + tt_int_op(0,OP_EQ, ver1.major); + tt_int_op(5,OP_EQ, ver1.minor); + tt_int_op(6,OP_EQ, ver1.micro); + tt_int_op(7,OP_EQ, ver1.patchlevel); + tt_int_op(3,OP_EQ, ver1.git_tag_len); + tt_mem_op(ver1.git_tag,OP_EQ, "\xff\x00\xff", 3); + tt_int_op(-1,OP_EQ, tor_version_parse("0.5.6.7 (git-ff00xx)", &ver1)); + tt_int_op(-1,OP_EQ, tor_version_parse("0.5.6.7 (git-ff00fff)", &ver1)); + tt_int_op(0,OP_EQ, tor_version_parse("0.5.6.7 (git ff00fff)", &ver1)); done: ; } @@ -924,13 +924,13 @@ test_dir_fp_pairs(void *arg) "48657861646563696d616c2069736e277420736f-" "676f6f6420666f7220686964696e6720796f7572.z", sl); - tt_int_op(smartlist_len(sl),==, 2); + tt_int_op(smartlist_len(sl),OP_EQ, 2); pair = smartlist_get(sl, 0); - tt_mem_op(pair->first,==, "Hexadecimal isn't so", DIGEST_LEN); - tt_mem_op(pair->second,==, "good for hiding your", DIGEST_LEN); + tt_mem_op(pair->first,OP_EQ, "Hexadecimal isn't so", DIGEST_LEN); + tt_mem_op(pair->second,OP_EQ, "good for hiding your", DIGEST_LEN); pair = smartlist_get(sl, 1); - tt_mem_op(pair->first,==, "secret data.\0\0\0\0\0\xff\xff\xff", DIGEST_LEN); - tt_mem_op(pair->second,==, "Use AES-256 instead.", DIGEST_LEN); + tt_mem_op(pair->first,OP_EQ, "secret data.\0\0\0\0\0\xff\xff\xff", DIGEST_LEN); + tt_mem_op(pair->second,OP_EQ, "Use AES-256 instead.", DIGEST_LEN); done: SMARTLIST_FOREACH(sl, fp_pair_t *, pair, tor_free(pair)); @@ -961,56 +961,56 @@ test_dir_split_fps(void *testdata) /* no flags set */ dir_split_resource_into_fingerprints("A+C+B", sl, NULL, 0); - tt_int_op(smartlist_len(sl), ==, 3); - tt_str_op(smartlist_get(sl, 0), ==, "A"); - tt_str_op(smartlist_get(sl, 1), ==, "C"); - tt_str_op(smartlist_get(sl, 2), ==, "B"); + tt_int_op(smartlist_len(sl), OP_EQ, 3); + tt_str_op(smartlist_get(sl, 0), OP_EQ, "A"); + tt_str_op(smartlist_get(sl, 1), OP_EQ, "C"); + tt_str_op(smartlist_get(sl, 2), OP_EQ, "B"); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* uniq strings. */ dir_split_resource_into_fingerprints("A+C+B+A+B+B", sl, NULL, DSR_SORT_UNIQ); - tt_int_op(smartlist_len(sl), ==, 3); - tt_str_op(smartlist_get(sl, 0), ==, "A"); - tt_str_op(smartlist_get(sl, 1), ==, "B"); - tt_str_op(smartlist_get(sl, 2), ==, "C"); + tt_int_op(smartlist_len(sl), OP_EQ, 3); + tt_str_op(smartlist_get(sl, 0), OP_EQ, "A"); + tt_str_op(smartlist_get(sl, 1), OP_EQ, "B"); + tt_str_op(smartlist_get(sl, 2), OP_EQ, "C"); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* Decode hex. */ dir_split_resource_into_fingerprints(HEX1"+"HEX2, sl, NULL, DSR_HEX); - tt_int_op(smartlist_len(sl), ==, 2); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX1); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2); + tt_int_op(smartlist_len(sl), OP_EQ, 2); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX1); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* decode hex and drop weirdness. */ dir_split_resource_into_fingerprints(HEX1"+bogus+"HEX2"+"HEX256_1, sl, NULL, DSR_HEX); - tt_int_op(smartlist_len(sl), ==, 2); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX1); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2); + tt_int_op(smartlist_len(sl), OP_EQ, 2); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX1); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* Decode long hex */ dir_split_resource_into_fingerprints(HEX256_1"+"HEX256_2"+"HEX2"+"HEX256_3, sl, NULL, DSR_HEX|DSR_DIGEST256); - tt_int_op(smartlist_len(sl), ==, 3); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_1); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX256_2); - test_mem_op_hex(smartlist_get(sl, 2), ==, HEX256_3); + tt_int_op(smartlist_len(sl), OP_EQ, 3); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_1); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX256_2); + test_mem_op_hex(smartlist_get(sl, 2), OP_EQ, HEX256_3); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* Decode hex and sort. */ dir_split_resource_into_fingerprints(HEX1"+"HEX2"+"HEX3"+"HEX2, sl, NULL, DSR_HEX|DSR_SORT_UNIQ); - tt_int_op(smartlist_len(sl), ==, 3); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX3); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2); - test_mem_op_hex(smartlist_get(sl, 2), ==, HEX1); + tt_int_op(smartlist_len(sl), OP_EQ, 3); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX3); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2); + test_mem_op_hex(smartlist_get(sl, 2), OP_EQ, HEX1); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); @@ -1019,34 +1019,34 @@ test_dir_split_fps(void *testdata) "+"HEX256_1, sl, NULL, DSR_HEX|DSR_DIGEST256|DSR_SORT_UNIQ); - tt_int_op(smartlist_len(sl), ==, 3); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_3); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX256_2); - test_mem_op_hex(smartlist_get(sl, 2), ==, HEX256_1); + tt_int_op(smartlist_len(sl), OP_EQ, 3); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_3); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX256_2); + test_mem_op_hex(smartlist_get(sl, 2), OP_EQ, HEX256_1); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* Decode base64 */ dir_split_resource_into_fingerprints(B64_1"-"B64_2, sl, NULL, DSR_BASE64); - tt_int_op(smartlist_len(sl), ==, 2); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX1); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX2); + tt_int_op(smartlist_len(sl), OP_EQ, 2); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX1); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX2); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); /* Decode long base64 */ dir_split_resource_into_fingerprints(B64_256_1"-"B64_256_2, sl, NULL, DSR_BASE64|DSR_DIGEST256); - tt_int_op(smartlist_len(sl), ==, 2); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_1); - test_mem_op_hex(smartlist_get(sl, 1), ==, HEX256_2); + tt_int_op(smartlist_len(sl), OP_EQ, 2); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_1); + test_mem_op_hex(smartlist_get(sl, 1), OP_EQ, HEX256_2); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); dir_split_resource_into_fingerprints(B64_256_1, sl, NULL, DSR_BASE64|DSR_DIGEST256); - tt_int_op(smartlist_len(sl), ==, 1); - test_mem_op_hex(smartlist_get(sl, 0), ==, HEX256_1); + tt_int_op(smartlist_len(sl), OP_EQ, 1); + test_mem_op_hex(smartlist_get(sl, 0), OP_EQ, HEX256_1); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); smartlist_clear(sl); @@ -1140,7 +1140,7 @@ test_dir_measured_bw_kb_cache(void *arg) /* First, clear the cache and assert that it's empty */ (void)arg; dirserv_clear_measured_bw_cache(); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 0); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 0); /* * Set up test mbwls; none of the dirserv_cache_*() functions care about * the node_hex field. @@ -1153,49 +1153,49 @@ test_dir_measured_bw_kb_cache(void *arg) mbwl[2].bw_kb = 80; /* Try caching something */ dirserv_cache_measured_bw(&(mbwl[0]), curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 1); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 1); /* Okay, let's see if we can retrieve it */ tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, &as_of)); - tt_int_op(bw,==, 20); - tt_int_op(as_of,==, MBWC_INIT_TIME); + tt_int_op(bw,OP_EQ, 20); + tt_int_op(as_of,OP_EQ, MBWC_INIT_TIME); /* Try retrieving it without some outputs */ tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL, NULL)); tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, NULL)); - tt_int_op(bw,==, 20); + tt_int_op(bw,OP_EQ, 20); tt_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL,&as_of)); - tt_int_op(as_of,==, MBWC_INIT_TIME); + tt_int_op(as_of,OP_EQ, MBWC_INIT_TIME); /* Now expire it */ curr += MAX_MEASUREMENT_AGE + 1; dirserv_expire_measured_bw_cache(curr); /* Check that the cache is empty */ - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 0); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 0); /* Check that we can't retrieve it */ tt_assert(!dirserv_query_measured_bw_cache_kb(mbwl[0].node_id, NULL,NULL)); /* Try caching a few things now */ dirserv_cache_measured_bw(&(mbwl[0]), curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 1); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 1); curr += MAX_MEASUREMENT_AGE / 4; dirserv_cache_measured_bw(&(mbwl[1]), curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 2); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 2); curr += MAX_MEASUREMENT_AGE / 4; dirserv_cache_measured_bw(&(mbwl[2]), curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 3); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 3); curr += MAX_MEASUREMENT_AGE / 4 + 1; /* Do an expire that's too soon to get any of them */ dirserv_expire_measured_bw_cache(curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 3); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 3); /* Push the oldest one off the cliff */ curr += MAX_MEASUREMENT_AGE / 4; dirserv_expire_measured_bw_cache(curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 2); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 2); /* And another... */ curr += MAX_MEASUREMENT_AGE / 4; dirserv_expire_measured_bw_cache(curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 1); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 1); /* This should empty it out again */ curr += MAX_MEASUREMENT_AGE / 4; dirserv_expire_measured_bw_cache(curr); - tt_int_op(dirserv_get_measured_bw_cache_size(),==, 0); + tt_int_op(dirserv_get_measured_bw_cache_size(),OP_EQ, 0); done: return; @@ -1228,11 +1228,11 @@ test_dir_param_voting(void *arg) "abcd=20 c=60 cw=500 x-yz=-9 zzzzz=101", NULL, 0, 0); smartlist_split_string(vote4.net_params, "ab=900 abcd=200 c=1 cw=51 x-yz=100", NULL, 0, 0); - tt_int_op(100,==, networkstatus_get_param(&vote4, "x-yz", 50, 0, 300)); - tt_int_op(222,==, networkstatus_get_param(&vote4, "foobar", 222, 0, 300)); - tt_int_op(80,==, networkstatus_get_param(&vote4, "ab", 12, 0, 80)); - tt_int_op(-8,==, networkstatus_get_param(&vote4, "ab", -12, -100, -8)); - tt_int_op(0,==, networkstatus_get_param(&vote4, "foobar", 0, -100, 8)); + tt_int_op(100,OP_EQ, networkstatus_get_param(&vote4, "x-yz", 50, 0, 300)); + tt_int_op(222,OP_EQ, networkstatus_get_param(&vote4, "foobar", 222, 0, 300)); + tt_int_op(80,OP_EQ, networkstatus_get_param(&vote4, "ab", 12, 0, 80)); + tt_int_op(-8,OP_EQ, networkstatus_get_param(&vote4, "ab", -12, -100, -8)); + tt_int_op(0,OP_EQ, networkstatus_get_param(&vote4, "foobar", 0, -100, 8)); smartlist_add(votes, &vote1); @@ -1240,59 +1240,59 @@ test_dir_param_voting(void *arg) * networks without many dirauths. */ res = dirvote_compute_params(votes, 12, 2); - tt_str_op(res,==, ""); + tt_str_op(res,OP_EQ, ""); tor_free(res); res = dirvote_compute_params(votes, 12, 1); - tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-99"); + tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-99"); tor_free(res); smartlist_add(votes, &vote2); res = dirvote_compute_params(votes, 12, 2); - tt_str_op(res,==, "ab=27 cw=5 x-yz=-99"); + tt_str_op(res,OP_EQ, "ab=27 cw=5 x-yz=-99"); tor_free(res); res = dirvote_compute_params(votes, 12, 3); - tt_str_op(res,==, "ab=27 cw=5 x-yz=-99"); + tt_str_op(res,OP_EQ, "ab=27 cw=5 x-yz=-99"); tor_free(res); res = dirvote_compute_params(votes, 12, 6); - tt_str_op(res,==, ""); + tt_str_op(res,OP_EQ, ""); tor_free(res); smartlist_add(votes, &vote3); res = dirvote_compute_params(votes, 12, 3); - tt_str_op(res,==, "ab=27 abcd=20 cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "ab=27 abcd=20 cw=50 x-yz=-9"); tor_free(res); res = dirvote_compute_params(votes, 12, 5); - tt_str_op(res,==, "cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "cw=50 x-yz=-9"); tor_free(res); res = dirvote_compute_params(votes, 12, 9); - tt_str_op(res,==, "cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "cw=50 x-yz=-9"); tor_free(res); smartlist_add(votes, &vote4); res = dirvote_compute_params(votes, 12, 4); - tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9"); tor_free(res); res = dirvote_compute_params(votes, 12, 5); - tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9"); tor_free(res); /* Test that the special-cased "at least three dirauths voted for * this param" logic works as expected. */ res = dirvote_compute_params(votes, 12, 6); - tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9"); tor_free(res); res = dirvote_compute_params(votes, 12, 10); - tt_str_op(res,==, "ab=90 abcd=20 cw=50 x-yz=-9"); + tt_str_op(res,OP_EQ, "ab=90 abcd=20 cw=50 x-yz=-9"); tor_free(res); done: @@ -1324,14 +1324,14 @@ static void test_same_voter(networkstatus_voter_info_t *v1, networkstatus_voter_info_t *v2) { - tt_str_op(v1->nickname,==, v2->nickname); - tt_mem_op(v1->identity_digest,==, v2->identity_digest, DIGEST_LEN); - tt_str_op(v1->address,==, v2->address); - tt_int_op(v1->addr,==, v2->addr); - tt_int_op(v1->dir_port,==, v2->dir_port); - tt_int_op(v1->or_port,==, v2->or_port); - tt_str_op(v1->contact,==, v2->contact); - tt_mem_op(v1->vote_digest,==, v2->vote_digest, DIGEST_LEN); + tt_str_op(v1->nickname,OP_EQ, v2->nickname); + tt_mem_op(v1->identity_digest,OP_EQ, v2->identity_digest, DIGEST_LEN); + tt_str_op(v1->address,OP_EQ, v2->address); + tt_int_op(v1->addr,OP_EQ, v2->addr); + tt_int_op(v1->dir_port,OP_EQ, v2->dir_port); + tt_int_op(v1->or_port,OP_EQ, v2->or_port); + tt_str_op(v1->contact,OP_EQ, v2->contact); + tt_mem_op(v1->vote_digest,OP_EQ, v2->vote_digest, DIGEST_LEN); done: ; } @@ -1541,48 +1541,48 @@ test_vrs_for_v3ns(vote_routerstatus_t *vrs, int voter, time_t now) DIGEST_LEN) && (voter == 1)) { /* Check the first routerstatus. */ - tt_str_op(vrs->version,==, "0.1.2.14"); - tt_int_op(rs->published_on,==, now-1500); - tt_str_op(rs->nickname,==, "router2"); - tt_mem_op(rs->identity_digest,==, + tt_str_op(vrs->version,OP_EQ, "0.1.2.14"); + tt_int_op(rs->published_on,OP_EQ, now-1500); + tt_str_op(rs->nickname,OP_EQ, "router2"); + tt_mem_op(rs->identity_digest,OP_EQ, "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3" "\x3\x3\x3\x3", DIGEST_LEN); - tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); - tt_int_op(rs->addr,==, 0x99008801); - tt_int_op(rs->or_port,==, 443); - tt_int_op(rs->dir_port,==, 8000); + tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); + tt_int_op(rs->addr,OP_EQ, 0x99008801); + tt_int_op(rs->or_port,OP_EQ, 443); + tt_int_op(rs->dir_port,OP_EQ, 8000); /* no flags except "running" (16) and "v2dir" (64) */ - tt_u64_op(vrs->flags, ==, U64_LITERAL(80)); + tt_u64_op(vrs->flags, OP_EQ, U64_LITERAL(80)); } else if (tor_memeq(rs->identity_digest, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5" "\x5\x5\x5\x5", DIGEST_LEN) && (voter == 1 || voter == 2)) { - tt_mem_op(rs->identity_digest,==, + tt_mem_op(rs->identity_digest,OP_EQ, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5" "\x5\x5\x5\x5", DIGEST_LEN); if (voter == 1) { /* Check the second routerstatus. */ - tt_str_op(vrs->version,==, "0.2.0.5"); - tt_int_op(rs->published_on,==, now-1000); - tt_str_op(rs->nickname,==, "router1"); + tt_str_op(vrs->version,OP_EQ, "0.2.0.5"); + tt_int_op(rs->published_on,OP_EQ, now-1000); + tt_str_op(rs->nickname,OP_EQ, "router1"); } - tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); - tt_int_op(rs->addr,==, 0x99009901); - tt_int_op(rs->or_port,==, 443); - tt_int_op(rs->dir_port,==, 0); + tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); + tt_int_op(rs->addr,OP_EQ, 0x99009901); + tt_int_op(rs->or_port,OP_EQ, 443); + tt_int_op(rs->dir_port,OP_EQ, 0); tor_addr_parse(&addr_ipv6, "[1:2:3::4]"); tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6)); - tt_int_op(rs->ipv6_orport,==, 4711); + tt_int_op(rs->ipv6_orport,OP_EQ, 4711); if (voter == 1) { /* all except "authority" (1) and "v2dir" (64) */ - tt_u64_op(vrs->flags, ==, U64_LITERAL(190)); + tt_u64_op(vrs->flags, OP_EQ, U64_LITERAL(190)); } else { /* 1023 - authority(1) - madeofcheese(16) - madeoftin(32) - v2dir(256) */ - tt_u64_op(vrs->flags, ==, U64_LITERAL(718)); + tt_u64_op(vrs->flags, OP_EQ, U64_LITERAL(718)); } } else if (tor_memeq(rs->identity_digest, "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33" @@ -1614,7 +1614,7 @@ test_consensus_for_v3ns(networkstatus_t *con, time_t now) tt_assert(con); tt_assert(!con->cert); - tt_int_op(2,==, smartlist_len(con->routerstatus_list)); + tt_int_op(2,OP_EQ, smartlist_len(con->routerstatus_list)); /* There should be two listed routers: one with identity 3, one with * identity 5. */ @@ -1639,10 +1639,10 @@ test_routerstatus_for_v3ns(routerstatus_t *rs, time_t now) "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3" "\x3\x3", DIGEST_LEN)) { - tt_mem_op(rs->identity_digest,==, + tt_mem_op(rs->identity_digest,OP_EQ, "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3", DIGEST_LEN); - tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); + tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); tt_assert(!rs->is_authority); tt_assert(!rs->is_exit); tt_assert(!rs->is_fast); @@ -1658,18 +1658,18 @@ test_routerstatus_for_v3ns(routerstatus_t *rs, time_t now) "\x5\x5\x5\x5", DIGEST_LEN)) { /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */ - tt_mem_op(rs->identity_digest,==, + tt_mem_op(rs->identity_digest,OP_EQ, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5", DIGEST_LEN); - tt_str_op(rs->nickname,==, "router1"); - tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); - tt_int_op(rs->published_on,==, now-1000); - tt_int_op(rs->addr,==, 0x99009901); - tt_int_op(rs->or_port,==, 443); - tt_int_op(rs->dir_port,==, 0); + tt_str_op(rs->nickname,OP_EQ, "router1"); + tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); + tt_int_op(rs->published_on,OP_EQ, now-1000); + tt_int_op(rs->addr,OP_EQ, 0x99009901); + tt_int_op(rs->or_port,OP_EQ, 443); + tt_int_op(rs->dir_port,OP_EQ, 0); tor_addr_parse(&addr_ipv6, "[1:2:3::4]"); tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6)); - tt_int_op(rs->ipv6_orport,==, 4711); + tt_int_op(rs->ipv6_orport,OP_EQ, 4711); tt_assert(!rs->is_authority); tt_assert(rs->is_exit); tt_assert(rs->is_fast); @@ -1809,29 +1809,29 @@ test_a_networkstatus( tt_assert(v1); /* Make sure the parsed thing was right. */ - tt_int_op(v1->type,==, NS_TYPE_VOTE); - tt_int_op(v1->published,==, vote->published); - tt_int_op(v1->valid_after,==, vote->valid_after); - tt_int_op(v1->fresh_until,==, vote->fresh_until); - tt_int_op(v1->valid_until,==, vote->valid_until); - tt_int_op(v1->vote_seconds,==, vote->vote_seconds); - tt_int_op(v1->dist_seconds,==, vote->dist_seconds); - tt_str_op(v1->client_versions,==, vote->client_versions); - tt_str_op(v1->server_versions,==, vote->server_versions); + tt_int_op(v1->type,OP_EQ, NS_TYPE_VOTE); + tt_int_op(v1->published,OP_EQ, vote->published); + tt_int_op(v1->valid_after,OP_EQ, vote->valid_after); + tt_int_op(v1->fresh_until,OP_EQ, vote->fresh_until); + tt_int_op(v1->valid_until,OP_EQ, vote->valid_until); + tt_int_op(v1->vote_seconds,OP_EQ, vote->vote_seconds); + tt_int_op(v1->dist_seconds,OP_EQ, vote->dist_seconds); + tt_str_op(v1->client_versions,OP_EQ, vote->client_versions); + tt_str_op(v1->server_versions,OP_EQ, vote->server_versions); tt_assert(v1->voters && smartlist_len(v1->voters)); voter = smartlist_get(v1->voters, 0); - tt_str_op(voter->nickname,==, "Voter1"); - tt_str_op(voter->address,==, "1.2.3.4"); - tt_int_op(voter->addr,==, 0x01020304); - tt_int_op(voter->dir_port,==, 80); - tt_int_op(voter->or_port,==, 9000); - tt_str_op(voter->contact,==, "voter@example.com"); + tt_str_op(voter->nickname,OP_EQ, "Voter1"); + tt_str_op(voter->address,OP_EQ, "1.2.3.4"); + tt_int_op(voter->addr,OP_EQ, 0x01020304); + tt_int_op(voter->dir_port,OP_EQ, 80); + tt_int_op(voter->or_port,OP_EQ, 9000); + tt_str_op(voter->contact,OP_EQ, "voter@example.com"); tt_assert(v1->cert); tt_assert(!crypto_pk_cmp_keys(sign_skey_1, v1->cert->signing_key)); cp = smartlist_join_strings(v1->known_flags, ":", 0, NULL); - tt_str_op(cp,==, "Authority:Exit:Fast:Guard:Running:Stable:V2Dir:Valid"); + tt_str_op(cp,OP_EQ, "Authority:Exit:Fast:Guard:Running:Stable:V2Dir:Valid"); tor_free(cp); - tt_int_op(smartlist_len(v1->routerstatus_list),==, n_vrs); + tt_int_op(smartlist_len(v1->routerstatus_list),OP_EQ, n_vrs); if (vote_tweaks) params_tweaked += vote_tweaks(v1, 1, now); @@ -1876,7 +1876,7 @@ test_a_networkstatus( /* Check that flags come out right.*/ cp = smartlist_join_strings(v2->known_flags, ":", 0, NULL); - tt_str_op(cp,==, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:" + tt_str_op(cp,OP_EQ, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:" "Running:Stable:V2Dir:Valid"); tor_free(cp); @@ -1945,30 +1945,30 @@ test_a_networkstatus( con_md = networkstatus_parse_vote_from_string(consensus_text_md, NULL, NS_TYPE_CONSENSUS); tt_assert(con_md); - tt_int_op(con_md->flavor,==, FLAV_MICRODESC); + tt_int_op(con_md->flavor,OP_EQ, FLAV_MICRODESC); /* Check consensus contents. */ tt_assert(con->type == NS_TYPE_CONSENSUS); - tt_int_op(con->published,==, 0); /* this field only appears in votes. */ - tt_int_op(con->valid_after,==, now+1000); - tt_int_op(con->fresh_until,==, now+2003); /* median */ - tt_int_op(con->valid_until,==, now+3000); - tt_int_op(con->vote_seconds,==, 100); - tt_int_op(con->dist_seconds,==, 250); /* median */ - tt_str_op(con->client_versions,==, "0.1.2.14"); - tt_str_op(con->server_versions,==, "0.1.2.15,0.1.2.16"); + tt_int_op(con->published,OP_EQ, 0); /* this field only appears in votes. */ + tt_int_op(con->valid_after,OP_EQ, now+1000); + tt_int_op(con->fresh_until,OP_EQ, now+2003); /* median */ + tt_int_op(con->valid_until,OP_EQ, now+3000); + tt_int_op(con->vote_seconds,OP_EQ, 100); + tt_int_op(con->dist_seconds,OP_EQ, 250); /* median */ + tt_str_op(con->client_versions,OP_EQ, "0.1.2.14"); + tt_str_op(con->server_versions,OP_EQ, "0.1.2.15,0.1.2.16"); cp = smartlist_join_strings(v2->known_flags, ":", 0, NULL); - tt_str_op(cp,==, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:" + tt_str_op(cp,OP_EQ, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:" "Running:Stable:V2Dir:Valid"); tor_free(cp); if (!params_tweaked) { /* Skip this one if vote_tweaks() messed with the param lists */ cp = smartlist_join_strings(con->net_params, ":", 0, NULL); - tt_str_op(cp,==, "circuitwindow=80:foo=660"); + tt_str_op(cp,OP_EQ, "circuitwindow=80:foo=660"); tor_free(cp); } - tt_int_op(4,==, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/ + tt_int_op(4,OP_EQ, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/ /* The voter id digests should be in this order. */ tt_assert(memcmp(cert2->cache_info.identity_digest, cert1->cache_info.identity_digest,DIGEST_LEN)<0); @@ -1994,10 +1994,10 @@ test_a_networkstatus( /* Check signatures. the first voter is a pseudo-entry with a legacy key. * The second one hasn't signed. The fourth one has signed: validate it. */ voter = smartlist_get(con->voters, 1); - tt_int_op(smartlist_len(voter->sigs),==, 0); + tt_int_op(smartlist_len(voter->sigs),OP_EQ, 0); voter = smartlist_get(con->voters, 3); - tt_int_op(smartlist_len(voter->sigs),==, 1); + tt_int_op(smartlist_len(voter->sigs),OP_EQ, 1); sig = smartlist_get(voter->sigs, 0); tt_assert(sig->signature); tt_assert(!sig->good_signature); @@ -2047,11 +2047,11 @@ test_a_networkstatus( tt_assert(con_md3); /* All three should have the same digest. */ - tt_mem_op(&con->digests,==, &con2->digests, sizeof(digests_t)); - tt_mem_op(&con->digests,==, &con3->digests, sizeof(digests_t)); + tt_mem_op(&con->digests,OP_EQ, &con2->digests, sizeof(digests_t)); + tt_mem_op(&con->digests,OP_EQ, &con3->digests, sizeof(digests_t)); - tt_mem_op(&con_md->digests,==, &con_md2->digests, sizeof(digests_t)); - tt_mem_op(&con_md->digests,==, &con_md3->digests, sizeof(digests_t)); + tt_mem_op(&con_md->digests,OP_EQ, &con_md2->digests, sizeof(digests_t)); + tt_mem_op(&con_md->digests,OP_EQ, &con_md3->digests, sizeof(digests_t)); /* Extract a detached signature from con3. */ detached_text1 = get_detached_sigs(con3, con_md3); @@ -2061,44 +2061,44 @@ test_a_networkstatus( tt_assert(dsig1); /* Are parsed values as expected? */ - tt_int_op(dsig1->valid_after,==, con3->valid_after); - tt_int_op(dsig1->fresh_until,==, con3->fresh_until); - tt_int_op(dsig1->valid_until,==, con3->valid_until); + tt_int_op(dsig1->valid_after,OP_EQ, con3->valid_after); + tt_int_op(dsig1->fresh_until,OP_EQ, con3->fresh_until); + tt_int_op(dsig1->valid_until,OP_EQ, con3->valid_until); { digests_t *dsig_digests = strmap_get(dsig1->digests, "ns"); tt_assert(dsig_digests); - tt_mem_op(dsig_digests->d[DIGEST_SHA1],==, con3->digests.d[DIGEST_SHA1], + tt_mem_op(dsig_digests->d[DIGEST_SHA1],OP_EQ, con3->digests.d[DIGEST_SHA1], DIGEST_LEN); dsig_digests = strmap_get(dsig1->digests, "microdesc"); tt_assert(dsig_digests); - tt_mem_op(dsig_digests->d[DIGEST_SHA256],==, + tt_mem_op(dsig_digests->d[DIGEST_SHA256],OP_EQ, con_md3->digests.d[DIGEST_SHA256], DIGEST256_LEN); } { smartlist_t *dsig_signatures = strmap_get(dsig1->signatures, "ns"); tt_assert(dsig_signatures); - tt_int_op(1,==, smartlist_len(dsig_signatures)); + tt_int_op(1,OP_EQ, smartlist_len(dsig_signatures)); sig = smartlist_get(dsig_signatures, 0); - tt_mem_op(sig->identity_digest,==, cert1->cache_info.identity_digest, + tt_mem_op(sig->identity_digest,OP_EQ, cert1->cache_info.identity_digest, DIGEST_LEN); - tt_int_op(sig->alg,==, DIGEST_SHA1); + tt_int_op(sig->alg,OP_EQ, DIGEST_SHA1); dsig_signatures = strmap_get(dsig1->signatures, "microdesc"); tt_assert(dsig_signatures); - tt_int_op(1,==, smartlist_len(dsig_signatures)); + tt_int_op(1,OP_EQ, smartlist_len(dsig_signatures)); sig = smartlist_get(dsig_signatures, 0); - tt_mem_op(sig->identity_digest,==, cert1->cache_info.identity_digest, + tt_mem_op(sig->identity_digest,OP_EQ, cert1->cache_info.identity_digest, DIGEST_LEN); - tt_int_op(sig->alg,==, DIGEST_SHA256); + tt_int_op(sig->alg,OP_EQ, DIGEST_SHA256); } /* Try adding it to con2. */ detached_text2 = get_detached_sigs(con2,con_md2); - tt_int_op(1,==, networkstatus_add_detached_signatures(con2, dsig1, "test", + tt_int_op(1,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1, "test", LOG_INFO, &msg)); tor_free(detached_text2); - tt_int_op(1,==, + tt_int_op(1,OP_EQ, networkstatus_add_detached_signatures(con_md2, dsig1, "test", LOG_INFO, &msg)); tor_free(detached_text2); @@ -2114,18 +2114,18 @@ test_a_networkstatus( printf("%s\n", hd); }); */ - tt_int_op(2,==, + tt_int_op(2,OP_EQ, smartlist_len((smartlist_t*)strmap_get(dsig2->signatures, "ns"))); - tt_int_op(2,==, + tt_int_op(2,OP_EQ, smartlist_len((smartlist_t*)strmap_get(dsig2->signatures, "microdesc"))); /* Try adding to con2 twice; verify that nothing changes. */ - tt_int_op(0,==, networkstatus_add_detached_signatures(con2, dsig1, "test", + tt_int_op(0,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1, "test", LOG_INFO, &msg)); /* Add to con. */ - tt_int_op(2,==, networkstatus_add_detached_signatures(con, dsig2, "test", + tt_int_op(2,OP_EQ, networkstatus_add_detached_signatures(con, dsig2, "test", LOG_INFO, &msg)); /* Check signatures */ voter = smartlist_get(con->voters, 1); @@ -2229,7 +2229,7 @@ test_dir_scale_bw(void *testdata) scale_array_elements_to_u64(vals, 8, &total); - tt_int_op((int)total, ==, 48); + tt_int_op((int)total, OP_EQ, 48); total = 0; for (i=0; i<8; ++i) { total += vals[i].u64; @@ -2240,7 +2240,7 @@ test_dir_scale_bw(void *testdata) for (i=0; i<8; ++i) { /* vals[2].u64 is the scaled value of 1.0 */ double ratio = ((double)vals[i].u64) / vals[2].u64; - tt_double_op(fabs(ratio - v[i]), <, .00001); + tt_double_op(fabs(ratio - v[i]), OP_LT, .00001); } /* test handling of no entries */ @@ -2291,11 +2291,11 @@ test_dir_random_weighted(void *testdata) inp[i].u64 = vals[i]; total += vals[i]; } - tt_u64_op(total, ==, 45); + tt_u64_op(total, OP_EQ, 45); for (i=0; i=, 0); - tt_int_op(choice, <, 10); + tt_int_op(choice, OP_GE, 0); + tt_int_op(choice, OP_LT, 10); histogram[choice]++; } @@ -2308,7 +2308,7 @@ test_dir_random_weighted(void *testdata) if (expected) frac_diff = (histogram[i] - expected) / ((double)expected); else - tt_int_op(histogram[i], ==, 0); + tt_int_op(histogram[i], OP_EQ, 0); sq = frac_diff * frac_diff; if (sq > max_sq_error) @@ -2316,12 +2316,12 @@ test_dir_random_weighted(void *testdata) } /* It should almost always be much much less than this. If you want to * figure out the odds, please feel free. */ - tt_double_op(max_sq_error, <, .05); + tt_double_op(max_sq_error, OP_LT, .05); /* Now try a singleton; do we choose it? */ for (i = 0; i < 100; ++i) { choice = choose_array_element_by_weight(inp, 1); - tt_int_op(choice, ==, 0); + tt_int_op(choice, OP_EQ, 0); } /* Now try an array of zeros. We should choose randomly. */ @@ -2330,8 +2330,8 @@ test_dir_random_weighted(void *testdata) inp[i].u64 = 0; for (i = 0; i < n; ++i) { choice = choose_array_element_by_weight(inp, 5); - tt_int_op(choice, >=, 0); - tt_int_op(choice, <, 5); + tt_int_op(choice, OP_GE, 0); + tt_int_op(choice, OP_LT, 5); histogram[choice]++; } /* Now see if we chose things about frequently enough. */ @@ -2347,7 +2347,7 @@ test_dir_random_weighted(void *testdata) } /* It should almost always be much much less than this. If you want to * figure out the odds, please feel free. */ - tt_double_op(max_sq_error, <, .05); + tt_double_op(max_sq_error, OP_LT, .05); done: ; } @@ -2546,21 +2546,21 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now) * Check the first routerstatus - measured bandwidth below the clip * cutoff. */ - tt_str_op(vrs->version,==, "0.1.2.14"); - tt_int_op(rs->published_on,==, now-1500); - tt_str_op(rs->nickname,==, "router2"); - tt_mem_op(rs->identity_digest,==, + tt_str_op(vrs->version,OP_EQ, "0.1.2.14"); + tt_int_op(rs->published_on,OP_EQ, now-1500); + tt_str_op(rs->nickname,OP_EQ, "router2"); + tt_mem_op(rs->identity_digest,OP_EQ, "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3" "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3", DIGEST_LEN); - tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); - tt_int_op(rs->addr,==, 0x99008801); - tt_int_op(rs->or_port,==, 443); - tt_int_op(rs->dir_port,==, 8000); + tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); + tt_int_op(rs->addr,OP_EQ, 0x99008801); + tt_int_op(rs->or_port,OP_EQ, 443); + tt_int_op(rs->dir_port,OP_EQ, 8000); tt_assert(rs->has_bandwidth); tt_assert(vrs->has_measured_bw); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2); - tt_int_op(vrs->measured_bw_kb,==, max_unmeasured_bw_kb / 2); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2); + tt_int_op(vrs->measured_bw_kb,OP_EQ, max_unmeasured_bw_kb / 2); } else if (tor_memeq(rs->identity_digest, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5" "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5", @@ -2570,24 +2570,24 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now) * Check the second routerstatus - measured bandwidth above the clip * cutoff. */ - tt_str_op(vrs->version,==, "0.2.0.5"); - tt_int_op(rs->published_on,==, now-1000); - tt_str_op(rs->nickname,==, "router1"); - tt_mem_op(rs->identity_digest,==, + tt_str_op(vrs->version,OP_EQ, "0.2.0.5"); + tt_int_op(rs->published_on,OP_EQ, now-1000); + tt_str_op(rs->nickname,OP_EQ, "router1"); + tt_mem_op(rs->identity_digest,OP_EQ, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5" "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5", DIGEST_LEN); - tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); - tt_int_op(rs->addr,==, 0x99009901); - tt_int_op(rs->or_port,==, 443); - tt_int_op(rs->dir_port,==, 0); + tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); + tt_int_op(rs->addr,OP_EQ, 0x99009901); + tt_int_op(rs->or_port,OP_EQ, 443); + tt_int_op(rs->dir_port,OP_EQ, 0); tor_addr_parse(&addr_ipv6, "[1:2:3::4]"); tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6)); - tt_int_op(rs->ipv6_orport,==, 4711); + tt_int_op(rs->ipv6_orport,OP_EQ, 4711); tt_assert(rs->has_bandwidth); tt_assert(vrs->has_measured_bw); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb * 2); - tt_int_op(vrs->measured_bw_kb,==, max_unmeasured_bw_kb * 2); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb * 2); + tt_int_op(vrs->measured_bw_kb,OP_EQ, max_unmeasured_bw_kb * 2); } else if (tor_memeq(rs->identity_digest, "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33" "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33", @@ -2599,8 +2599,8 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now) */ tt_assert(rs->has_bandwidth); tt_assert(!(vrs->has_measured_bw)); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb * 2); - tt_int_op(vrs->measured_bw_kb,==, 0); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb * 2); + tt_int_op(vrs->measured_bw_kb,OP_EQ, 0); } else if (tor_memeq(rs->identity_digest, "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34" "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34", @@ -2611,8 +2611,8 @@ test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now) */ tt_assert(rs->has_bandwidth); tt_assert(!(vrs->has_measured_bw)); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2); - tt_int_op(vrs->measured_bw_kb,==, 0); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2); + tt_int_op(vrs->measured_bw_kb,OP_EQ, 0); } else { tt_assert(0); } @@ -2633,7 +2633,7 @@ test_consensus_for_umbw(networkstatus_t *con, time_t now) tt_assert(!con->cert); // tt_assert(con->consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW_KB); tt_assert(con->consensus_method >= 16); - tt_int_op(4,==, smartlist_len(con->routerstatus_list)); + tt_int_op(4,OP_EQ, smartlist_len(con->routerstatus_list)); /* There should be four listed routers; all voters saw the same in this */ done: @@ -2657,11 +2657,11 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now) "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3" "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3", DIGEST_LEN)) { - tt_mem_op(rs->identity_digest,==, + tt_mem_op(rs->identity_digest,OP_EQ, "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3" "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3", DIGEST_LEN); - tt_mem_op(rs->descriptor_digest,==, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); + tt_mem_op(rs->descriptor_digest,OP_EQ, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN); tt_assert(!rs->is_authority); tt_assert(!rs->is_exit); tt_assert(!rs->is_fast); @@ -2673,26 +2673,26 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now) tt_assert(!rs->is_named); /* This one should have measured bandwidth below the clip cutoff */ tt_assert(rs->has_bandwidth); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2); tt_assert(!(rs->bw_is_unmeasured)); } else if (tor_memeq(rs->identity_digest, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5" "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5", DIGEST_LEN)) { /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */ - tt_mem_op(rs->identity_digest,==, + tt_mem_op(rs->identity_digest,OP_EQ, "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5" "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5", DIGEST_LEN); - tt_str_op(rs->nickname,==, "router1"); - tt_mem_op(rs->descriptor_digest,==, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); - tt_int_op(rs->published_on,==, now-1000); - tt_int_op(rs->addr,==, 0x99009901); - tt_int_op(rs->or_port,==, 443); - tt_int_op(rs->dir_port,==, 0); + tt_str_op(rs->nickname,OP_EQ, "router1"); + tt_mem_op(rs->descriptor_digest,OP_EQ, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN); + tt_int_op(rs->published_on,OP_EQ, now-1000); + tt_int_op(rs->addr,OP_EQ, 0x99009901); + tt_int_op(rs->or_port,OP_EQ, 443); + tt_int_op(rs->dir_port,OP_EQ, 0); tor_addr_parse(&addr_ipv6, "[1:2:3::4]"); tt_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6)); - tt_int_op(rs->ipv6_orport,==, 4711); + tt_int_op(rs->ipv6_orport,OP_EQ, 4711); tt_assert(!rs->is_authority); tt_assert(rs->is_exit); tt_assert(rs->is_fast); @@ -2703,7 +2703,7 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now) tt_assert(!rs->is_named); /* This one should have measured bandwidth above the clip cutoff */ tt_assert(rs->has_bandwidth); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb * 2); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb * 2); tt_assert(!(rs->bw_is_unmeasured)); } else if (tor_memeq(rs->identity_digest, "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33" @@ -2714,7 +2714,7 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now) * and so should be clipped */ tt_assert(rs->has_bandwidth); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb); tt_assert(rs->bw_is_unmeasured); } else if (tor_memeq(rs->identity_digest, "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34" @@ -2725,7 +2725,7 @@ test_routerstatus_for_umbw(routerstatus_t *rs, time_t now) * and so should not be clipped */ tt_assert(rs->has_bandwidth); - tt_int_op(rs->bandwidth_kb,==, max_unmeasured_bw_kb / 2); + tt_int_op(rs->bandwidth_kb,OP_EQ, max_unmeasured_bw_kb / 2); tt_assert(rs->bw_is_unmeasured); } else { /* Weren't expecting this... */ @@ -2801,7 +2801,7 @@ test_dir_fmt_control_ns(void *arg) s = networkstatus_getinfo_helper_single(&rs); tt_assert(s); - tt_str_op(s, ==, + tt_str_op(s, OP_EQ, "r TetsuoMilk U3RhdGVseSwgcGx1bXAgQnVjayA " "TXVsbGlnYW4gY2FtZSB1cCBmcm8 2013-04-02 17:53:18 " "32.48.64.80 9001 9002\n" @@ -2824,16 +2824,16 @@ test_dir_http_handling(void *args) "Host: example.com\r\n" "User-Agent: Mozilla/5.0 (Windows;" " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n", - &url),==, 0); - tt_str_op(url,==, "/tor/a/b/c.txt"); + &url),OP_EQ, 0); + tt_str_op(url,OP_EQ, "/tor/a/b/c.txt"); tor_free(url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.0\r\n", &url),==, 0); - tt_str_op(url,==, "/tor/a/b/c.txt"); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.0\r\n", &url),OP_EQ, 0); + tt_str_op(url,OP_EQ, "/tor/a/b/c.txt"); tor_free(url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url),==, 0); - tt_str_op(url,==, "/tor/a/b/c.txt"); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url),OP_EQ, 0); + tt_str_op(url,OP_EQ, "/tor/a/b/c.txt"); tor_free(url); /* Should prepend '/tor/' to url if required */ @@ -2841,8 +2841,8 @@ test_dir_http_handling(void *args) "Host: example.com\r\n" "User-Agent: Mozilla/5.0 (Windows;" " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n", - &url),==, 0); - tt_str_op(url,==, "/tor/a/b/c.txt"); + &url),OP_EQ, 0); + tt_str_op(url,OP_EQ, "/tor/a/b/c.txt"); tor_free(url); /* Bad headers -- no HTTP/1.x*/ @@ -2850,7 +2850,7 @@ test_dir_http_handling(void *args) "Host: example.com\r\n" "User-Agent: Mozilla/5.0 (Windows;" " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n", - &url),==, -1); + &url),OP_EQ, -1); tt_assert(!url); /* Bad headers */ @@ -2858,22 +2858,22 @@ test_dir_http_handling(void *args) "Host: example.com\r\n" "User-Agent: Mozilla/5.0 (Windows;" " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n", - &url),==, -1); + &url),OP_EQ, -1); tt_assert(!url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt", &url),==, -1); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt", &url),OP_EQ, -1); tt_assert(!url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url),==, -1); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url),OP_EQ, -1); tt_assert(!url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url),==, -1); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url),OP_EQ, -1); tt_assert(!url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url),==, -1); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url),OP_EQ, -1); tt_assert(!url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.\r", &url),==, -1); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.\r", &url),OP_EQ, -1); tt_assert(!url); done: diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c index bddc0f11e0..eaf2e2df71 100644 --- a/src/test/test_entrynodes.c +++ b/src/test/test_entrynodes.c @@ -71,15 +71,15 @@ setup_fake_routerlist(void) retval = router_load_routers_from_string(TEST_DESCRIPTORS, NULL, SAVED_IN_JOURNAL, NULL, 0, NULL); - tt_int_op(retval, ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(retval, OP_EQ, NUMBER_OF_DESCRIPTORS); /* Sanity checking of routerlist and nodelist. */ our_routerlist = router_get_routerlist(); - tt_int_op(smartlist_len(our_routerlist->routers), ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(our_routerlist->routers), OP_EQ, NUMBER_OF_DESCRIPTORS); routerlist_assert_ok(our_routerlist); our_nodelist = nodelist_get_list(); - tt_int_op(smartlist_len(our_nodelist), ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS); /* Mark all routers as non-guards but up and running! */ SMARTLIST_FOREACH_BEGIN(our_nodelist, node_t *, node) { @@ -163,7 +163,7 @@ test_choose_random_entry_one_possible_guard(void *arg) /* Pick an entry. Make sure we pick the node we marked as guard. */ chosen_entry = choose_random_entry(NULL); - tt_ptr_op(chosen_entry, ==, the_guard); + tt_ptr_op(chosen_entry, OP_EQ, the_guard); done: ; @@ -189,14 +189,14 @@ populate_live_entry_guards_test_helper(int num_needed) /* Set NumEntryGuards to the provided number. */ options->NumEntryGuards = num_needed; - tt_int_op(num_needed, ==, decide_num_guards(options, 0)); + tt_int_op(num_needed, OP_EQ, decide_num_guards(options, 0)); /* The global entry guards smartlist should be empty now. */ - tt_int_op(smartlist_len(all_entry_guards), ==, 0); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0); /* Walk the nodelist and add all nodes as entry guards. */ our_nodelist = nodelist_get_list(); - tt_int_op(smartlist_len(our_nodelist), ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS); SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) { const node_t *node_tmp; @@ -205,20 +205,20 @@ populate_live_entry_guards_test_helper(int num_needed) } SMARTLIST_FOREACH_END(node); /* Make sure the nodes were added as entry guards. */ - tt_int_op(smartlist_len(all_entry_guards), ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, NUMBER_OF_DESCRIPTORS); /* Ensure that all the possible entry guards are enough to satisfy us. */ - tt_int_op(smartlist_len(all_entry_guards), >=, num_needed); + tt_int_op(smartlist_len(all_entry_guards), OP_GE, num_needed); /* Walk the entry guard list for some sanity checking */ SMARTLIST_FOREACH_BEGIN(all_entry_guards, const entry_guard_t *, entry) { /* Since we called add_an_entry_guard() with 'for_discovery' being False, all guards should have made_contact enabled. */ - tt_int_op(entry->made_contact, ==, 1); + tt_int_op(entry->made_contact, OP_EQ, 1); /* Since we don't have a routerstatus, all of the entry guards are not directory servers. */ - tt_int_op(entry->is_dir_cache, ==, 0); + tt_int_op(entry->is_dir_cache, OP_EQ, 0); } SMARTLIST_FOREACH_END(entry); /* First, try to get some fast guards. This should fail. */ @@ -228,8 +228,8 @@ populate_live_entry_guards_test_helper(int num_needed) NO_DIRINFO, /* Don't care about DIRINFO*/ 0, 0, 1); /* We want fast guard! */ - tt_int_op(retval, ==, 0); - tt_int_op(smartlist_len(live_entry_guards), ==, 0); + tt_int_op(retval, OP_EQ, 0); + tt_int_op(smartlist_len(live_entry_guards), OP_EQ, 0); /* Now try to get some stable guards. This should fail too. */ retval = populate_live_entry_guards(live_entry_guards, @@ -239,8 +239,8 @@ populate_live_entry_guards_test_helper(int num_needed) 0, 1, /* We want stable guard! */ 0); - tt_int_op(retval, ==, 0); - tt_int_op(smartlist_len(live_entry_guards), ==, 0); + tt_int_op(retval, OP_EQ, 0); + tt_int_op(smartlist_len(live_entry_guards), OP_EQ, 0); /* Now try to get any guard we can find. This should succeed. */ retval = populate_live_entry_guards(live_entry_guards, @@ -253,8 +253,8 @@ populate_live_entry_guards_test_helper(int num_needed) should have added 'num_needed' of them to live_entry_guards. 'retval' should be 1 since we now have enough live entry guards to pick one. */ - tt_int_op(retval, ==, 1); - tt_int_op(smartlist_len(live_entry_guards), ==, num_needed); + tt_int_op(retval, OP_EQ, 1); + tt_int_op(smartlist_len(live_entry_guards), OP_EQ, num_needed); done: smartlist_free(live_entry_guards); @@ -361,7 +361,7 @@ test_entry_guards_parse_state_simple(void *arg) (void) arg; /* The global entry guards smartlist should be empty now. */ - tt_int_op(smartlist_len(all_entry_guards), ==, 0); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0); { /* Prepare the state entry */ @@ -387,34 +387,34 @@ test_entry_guards_parse_state_simple(void *arg) /* Parse state */ retval = entry_guards_parse_state(state, 1, &msg); - tt_int_op(retval, >=, 0); + tt_int_op(retval, OP_GE, 0); /* Test that the guard was registered. We need to re-get the entry guard list since its pointer was overwritten in entry_guards_parse_state(). */ all_entry_guards = get_entry_guards(); - tt_int_op(smartlist_len(all_entry_guards), ==, 1); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 1); { /* Test the entry guard structure */ char hex_digest[1024]; char str_time[1024]; const entry_guard_t *e = smartlist_get(all_entry_guards, 0); - tt_str_op(e->nickname, ==, nickname); /* Verify nickname */ + tt_str_op(e->nickname, OP_EQ, nickname); /* Verify nickname */ base16_encode(hex_digest, sizeof(hex_digest), e->identity, DIGEST_LEN); - tt_str_op(hex_digest, ==, fpr); /* Verify fingerprint */ + tt_str_op(hex_digest, OP_EQ, fpr); /* Verify fingerprint */ tt_assert(e->is_dir_cache); /* Verify dirness */ - tt_str_op(e->chosen_by_version, ==, tor_version); /* Verify tor version */ + tt_str_op(e->chosen_by_version, OP_EQ, tor_version); /* Verify tor version */ tt_assert(e->made_contact); /* All saved guards have been contacted */ tt_assert(e->bad_since); /* Verify bad_since timestamp */ format_iso_time(str_time, e->bad_since); - tt_str_op(str_time, ==, unlisted_since); + tt_str_op(str_time, OP_EQ, unlisted_since); /* The rest should be unset */ tt_assert(!e->unreachable_since); @@ -456,7 +456,7 @@ test_entry_guards_parse_state_pathbias(void *arg) (void) arg; /* The global entry guards smartlist should be empty now. */ - tt_int_op(smartlist_len(all_entry_guards), ==, 0); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0); { /* Prepare the state entry */ @@ -492,11 +492,11 @@ test_entry_guards_parse_state_pathbias(void *arg) /* Parse state */ retval = entry_guards_parse_state(state, 1, &msg); - tt_int_op(retval, >=, 0); + tt_int_op(retval, OP_GE, 0); /* Test that the guard was registered */ all_entry_guards = get_entry_guards(); - tt_int_op(smartlist_len(all_entry_guards), ==, 1); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 1); { /* Test the path bias of this guard */ const entry_guard_t *e = smartlist_get(all_entry_guards, 0); @@ -505,12 +505,12 @@ test_entry_guards_parse_state_pathbias(void *arg) tt_assert(!e->can_retry); /* XXX tt_double_op doesn't support equality. Cast to int for now. */ - tt_int_op((int)e->circ_attempts, ==, (int)circ_attempts); - tt_int_op((int)e->circ_successes, ==, (int)circ_successes); - tt_int_op((int)e->successful_circuits_closed, ==, (int)successful_closed); - tt_int_op((int)e->timeouts, ==, (int)timeouts); - tt_int_op((int)e->collapsed_circuits, ==, (int)collapsed); - tt_int_op((int)e->unusable_circuits, ==, (int)unusable); + tt_int_op((int)e->circ_attempts, OP_EQ, (int)circ_attempts); + tt_int_op((int)e->circ_successes, OP_EQ, (int)circ_successes); + tt_int_op((int)e->successful_circuits_closed, OP_EQ, (int)successful_closed); + tt_int_op((int)e->timeouts, OP_EQ, (int)timeouts); + tt_int_op((int)e->collapsed_circuits, OP_EQ, (int)collapsed); + tt_int_op((int)e->unusable_circuits, OP_EQ, (int)unusable); } done: @@ -537,17 +537,17 @@ test_entry_guards_set_from_config(void *arg) retval = routerset_parse(options->EntryNodes, entrynodes_str, "test_entrynodes"); - tt_int_op(retval, >=, 0); + tt_int_op(retval, OP_GE, 0); /* Read nodes from EntryNodes */ entry_guards_set_from_config(options); /* Test that only one guard was added. */ - tt_int_op(smartlist_len(all_entry_guards), ==, 1); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 1); /* Make sure it was the guard we specified. */ chosen_entry = choose_random_entry(NULL); - tt_str_op(chosen_entry->ri->nickname, ==, entrynodes_str); + tt_str_op(chosen_entry->ri->nickname, OP_EQ, entrynodes_str); done: routerset_free(options->EntryNodes); @@ -569,59 +569,59 @@ test_entry_is_time_to_retry(void *arg) test_guard->unreachable_since = now - 1; retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->unreachable_since = now - (6*60*60 - 1); test_guard->last_attempted = now - (60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->last_attempted = now - (60*60 - 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,0); + tt_int_op(retval,OP_EQ,0); test_guard->unreachable_since = now - (6*60*60 + 1); test_guard->last_attempted = now - (4*60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->unreachable_since = now - (3*24*60*60 - 1); test_guard->last_attempted = now - (4*60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->unreachable_since = now - (3*24*60*60 + 1); test_guard->last_attempted = now - (18*60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->unreachable_since = now - (7*24*60*60 - 1); test_guard->last_attempted = now - (18*60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->last_attempted = now - (18*60*60 - 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,0); + tt_int_op(retval,OP_EQ,0); test_guard->unreachable_since = now - (7*24*60*60 + 1); test_guard->last_attempted = now - (36*60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); test_guard->unreachable_since = now - (7*24*60*60 + 1); test_guard->last_attempted = now - (36*60*60 + 1); retval = entry_is_time_to_retry(test_guard,now); - tt_int_op(retval,==,1); + tt_int_op(retval,OP_EQ,1); done: tor_free(test_guard); @@ -641,23 +641,23 @@ test_entry_is_live(void *arg) (void) arg; /* The global entry guards smartlist should be empty now. */ - tt_int_op(smartlist_len(all_entry_guards), ==, 0); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, 0); /* Walk the nodelist and add all nodes as entry guards. */ our_nodelist = nodelist_get_list(); - tt_int_op(smartlist_len(our_nodelist), ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(our_nodelist), OP_EQ, NUMBER_OF_DESCRIPTORS); SMARTLIST_FOREACH_BEGIN(our_nodelist, const node_t *, node) { const node_t *node_tmp; node_tmp = add_an_entry_guard(node, 0, 1, 0, 0); tt_assert(node_tmp); - tt_int_op(node->is_stable, ==, 0); - tt_int_op(node->is_fast, ==, 0); + tt_int_op(node->is_stable, OP_EQ, 0); + tt_int_op(node->is_fast, OP_EQ, 0); } SMARTLIST_FOREACH_END(node); /* Make sure the nodes were added as entry guards. */ - tt_int_op(smartlist_len(all_entry_guards), ==, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(all_entry_guards), OP_EQ, NUMBER_OF_DESCRIPTORS); /* Now get a random test entry that we will use for this unit test. */ which_node = 3; /* (chosen by fair dice roll) */ @@ -681,12 +681,12 @@ test_entry_is_live(void *arg) /* Don't impose any restrictions on the node. Should succeed. */ test_node = entry_is_live(test_entry, 0, &msg); tt_assert(test_node); - tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity)); + tt_ptr_op(test_node, OP_EQ, node_get_by_id(test_entry->identity)); /* Require descriptor for this node. It has one so it should succeed. */ test_node = entry_is_live(test_entry, ENTRY_NEED_DESCRIPTOR, &msg); tt_assert(test_node); - tt_ptr_op(test_node, ==, node_get_by_id(test_entry->identity)); + tt_ptr_op(test_node, OP_EQ, node_get_by_id(test_entry->identity)); done: ; /* XXX */ diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c index 4049d6d5e0..c9d8527ea2 100644 --- a/src/test/test_extorport.c +++ b/src/test/test_extorport.c @@ -24,35 +24,35 @@ test_ext_or_id_map(void *arg) (void)arg; /* pre-initialization */ - tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); + tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET); c2 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET); c3 = or_connection_new(CONN_TYPE_OR, AF_INET); - tt_ptr_op(c1->ext_or_conn_id, !=, NULL); - tt_ptr_op(c2->ext_or_conn_id, !=, NULL); - tt_ptr_op(c3->ext_or_conn_id, ==, NULL); + tt_ptr_op(c1->ext_or_conn_id, OP_NE, NULL); + tt_ptr_op(c2->ext_or_conn_id, OP_NE, NULL); + tt_ptr_op(c3->ext_or_conn_id, OP_EQ, NULL); - tt_ptr_op(c1, ==, connection_or_get_by_ext_or_id(c1->ext_or_conn_id)); - tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(c2->ext_or_conn_id)); - tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); + tt_ptr_op(c1, OP_EQ, connection_or_get_by_ext_or_id(c1->ext_or_conn_id)); + tt_ptr_op(c2, OP_EQ, connection_or_get_by_ext_or_id(c2->ext_or_conn_id)); + tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); idp = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); /* Give c2 a new ID. */ connection_or_set_ext_or_identifier(c2); - tt_mem_op(idp, !=, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); + tt_mem_op(idp, OP_NE, c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); idp2 = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); tt_assert(!tor_digest_is_zero(idp2)); - tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp)); - tt_ptr_op(c2, ==, connection_or_get_by_ext_or_id(idp2)); + tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id(idp)); + tt_ptr_op(c2, OP_EQ, connection_or_get_by_ext_or_id(idp2)); /* Now remove it. */ connection_or_remove_from_ext_or_id_map(c2); - tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp)); - tt_ptr_op(NULL, ==, connection_or_get_by_ext_or_id(idp2)); + tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id(idp)); + tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id(idp2)); done: if (c1) @@ -112,33 +112,33 @@ test_ext_or_write_command(void *arg) /* Length too long */ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 100, "X", 100000), - <, 0); + OP_LT, 0); /* Empty command */ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99, NULL, 0), - ==, 0); + OP_EQ, 0); cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz); - tt_int_op(sz, ==, 4); - tt_mem_op(cp, ==, "\x00\x99\x00\x00", 4); + tt_int_op(sz, OP_EQ, 4); + tt_mem_op(cp, OP_EQ, "\x00\x99\x00\x00", 4); tor_free(cp); /* Medium command. */ tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0x99, - "Wai\0Hello", 9), ==, 0); + "Wai\0Hello", 9), OP_EQ, 0); cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz); - tt_int_op(sz, ==, 13); - tt_mem_op(cp, ==, "\x00\x99\x00\x09Wai\x00Hello", 13); + tt_int_op(sz, OP_EQ, 13); + tt_mem_op(cp, OP_EQ, "\x00\x99\x00\x09Wai\x00Hello", 13); tor_free(cp); /* Long command */ buf = tor_malloc(65535); memset(buf, 'x', 65535); tt_int_op(connection_write_ext_or_command(TO_CONN(c1), 0xf00d, - buf, 65535), ==, 0); + buf, 65535), OP_EQ, 0); cp = buf_get_contents(TO_CONN(c1)->outbuf, &sz); - tt_int_op(sz, ==, 65539); - tt_mem_op(cp, ==, "\xf0\x0d\xff\xff", 4); - tt_mem_op(cp+4, ==, buf, 65535); + tt_int_op(sz, OP_EQ, 65539); + tt_mem_op(cp, OP_EQ, "\xf0\x0d\xff\xff", 4); + tt_mem_op(cp+4, OP_EQ, buf, 65535); tor_free(cp); done: @@ -175,7 +175,7 @@ test_ext_or_init_auth(void *arg) tor_free(options->DataDirectory); options->DataDirectory = tor_strdup("foo"); cp = get_ext_or_auth_cookie_file_name(); - tt_str_op(cp, ==, "foo"PATH_SEPARATOR"extended_orport_auth_cookie"); + tt_str_op(cp, OP_EQ, "foo"PATH_SEPARATOR"extended_orport_auth_cookie"); tor_free(cp); /* Shouldn't be initialized already, or our tests will be a bit @@ -187,30 +187,30 @@ test_ext_or_init_auth(void *arg) fn = get_fname("ext_cookie_file"); options->ExtORPortCookieAuthFile = tor_strdup(fn); cp = get_ext_or_auth_cookie_file_name(); - tt_str_op(cp, ==, fn); + tt_str_op(cp, OP_EQ, fn); tor_free(cp); /* Test the initialization function with a broken write_bytes_to_file(). See if the problem is handled properly. */ MOCK(write_bytes_to_file, write_bytes_to_file_fail); - tt_int_op(-1, ==, init_ext_or_cookie_authentication(1)); - tt_int_op(ext_or_auth_cookie_is_set, ==, 0); + tt_int_op(-1, OP_EQ, init_ext_or_cookie_authentication(1)); + tt_int_op(ext_or_auth_cookie_is_set, OP_EQ, 0); UNMOCK(write_bytes_to_file); /* Now do the actual initialization. */ - tt_int_op(0, ==, init_ext_or_cookie_authentication(1)); - tt_int_op(ext_or_auth_cookie_is_set, ==, 1); + tt_int_op(0, OP_EQ, init_ext_or_cookie_authentication(1)); + tt_int_op(ext_or_auth_cookie_is_set, OP_EQ, 1); cp = read_file_to_str(fn, RFTS_BIN, &st); - tt_ptr_op(cp, !=, NULL); - tt_u64_op((uint64_t)st.st_size, ==, 64); - tt_mem_op(cp,==, "! Extended ORPort Auth Cookie !\x0a", 32); - tt_mem_op(cp+32,==, ext_or_auth_cookie, 32); + tt_ptr_op(cp, OP_NE, NULL); + tt_u64_op((uint64_t)st.st_size, OP_EQ, 64); + tt_mem_op(cp,OP_EQ, "! Extended ORPort Auth Cookie !\x0a", 32); + tt_mem_op(cp+32,OP_EQ, ext_or_auth_cookie, 32); memcpy(cookie0, ext_or_auth_cookie, 32); tt_assert(!tor_mem_is_zero((char*)ext_or_auth_cookie, 32)); /* Operation should be idempotent. */ - tt_int_op(0, ==, init_ext_or_cookie_authentication(1)); - tt_mem_op(cookie0,==, ext_or_auth_cookie, 32); + tt_int_op(0, OP_EQ, init_ext_or_cookie_authentication(1)); + tt_mem_op(cookie0,OP_EQ, ext_or_auth_cookie, 32); done: tor_free(cp); @@ -237,8 +237,8 @@ test_ext_or_cookie_auth(void *arg) (void)arg; - tt_int_op(strlen(client_hash_input), ==, 46+32+32); - tt_int_op(strlen(server_hash_input), ==, 46+32+32); + tt_int_op(strlen(client_hash_input), OP_EQ, 46+32+32); + tt_int_op(strlen(server_hash_input), OP_EQ, 46+32+32); ext_or_auth_cookie = tor_malloc_zero(32); memcpy(ext_or_auth_cookie, "s beside you? When I count, ther", 32); @@ -258,20 +258,20 @@ test_ext_or_cookie_auth(void *arg) */ /* Wrong length */ - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, handle_client_auth_nonce(client_nonce, 33, &client_hash, &reply, &reply_len)); - tt_int_op(-1, ==, + tt_int_op(-1, OP_EQ, handle_client_auth_nonce(client_nonce, 31, &client_hash, &reply, &reply_len)); /* Now let's try this for real! */ - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply, &reply_len)); - tt_int_op(reply_len, ==, 64); - tt_ptr_op(reply, !=, NULL); - tt_ptr_op(client_hash, !=, NULL); + tt_int_op(reply_len, OP_EQ, 64); + tt_ptr_op(reply, OP_NE, NULL); + tt_ptr_op(client_hash, OP_NE, NULL); /* Fill in the server nonce into the hash inputs... */ memcpy(server_hash_input+46+32, reply+32, 32); memcpy(client_hash_input+46+32, reply+32, 32); @@ -280,15 +280,15 @@ test_ext_or_cookie_auth(void *arg) 46+32+32); crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input, 46+32+32); - tt_mem_op(hmac1,==, reply, 32); - tt_mem_op(hmac2,==, client_hash, 32); + tt_mem_op(hmac1,OP_EQ, reply, 32); + tt_mem_op(hmac2,OP_EQ, client_hash, 32); /* Now do it again and make sure that the results are *different* */ - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, handle_client_auth_nonce(client_nonce, 32, &client_hash2, &reply2, &reply_len)); - tt_mem_op(reply2,!=, reply, reply_len); - tt_mem_op(client_hash2,!=, client_hash, 32); + tt_mem_op(reply2,OP_NE, reply, reply_len); + tt_mem_op(client_hash2,OP_NE, client_hash, 32); /* But that this one checks out too. */ memcpy(server_hash_input+46+32, reply2+32, 32); memcpy(client_hash_input+46+32, reply2+32, 32); @@ -297,8 +297,8 @@ test_ext_or_cookie_auth(void *arg) 46+32+32); crypto_hmac_sha256(hmac2, (char*)ext_or_auth_cookie, 32, client_hash_input, 46+32+32); - tt_mem_op(hmac1,==, reply2, 32); - tt_mem_op(hmac2,==, client_hash2, 32); + tt_mem_op(hmac1,OP_EQ, reply2, 32); + tt_mem_op(hmac2,OP_EQ, client_hash2, 32); done: tor_free(reply); @@ -334,12 +334,12 @@ test_ext_or_cookie_auth_testvec(void *arg) MOCK(crypto_rand, crypto_rand_return_tse_str); - tt_int_op(0, ==, + tt_int_op(0, OP_EQ, handle_client_auth_nonce(client_nonce, 32, &client_hash, &reply, &reply_len)); - tt_ptr_op(reply, !=, NULL ); - tt_uint_op(reply_len, ==, 64); - tt_mem_op(reply+32,==, "te road There is always another ", 32); + tt_ptr_op(reply, OP_NE, NULL ); + tt_uint_op(reply_len, OP_EQ, 64); + tt_mem_op(reply+32,OP_EQ, "te road There is always another ", 32); /* HMACSHA256("Gliding wrapt in a brown mantle," * "ExtORPort authentication server-to-client hash" * "But when I look ahead up the write road There is always another "); @@ -402,11 +402,11 @@ handshake_start(or_connection_t *conn, int receiving) } while (0) #define CONTAINS(s,n) \ do { \ - tt_int_op((n), <=, sizeof(b)); \ - tt_int_op(buf_datalen(TO_CONN(conn)->outbuf), ==, (n)); \ + tt_int_op((n), OP_LE, sizeof(b)); \ + tt_int_op(buf_datalen(TO_CONN(conn)->outbuf), OP_EQ, (n)); \ if ((n)) { \ fetch_from_buf(b, (n), TO_CONN(conn)->outbuf); \ - tt_mem_op(b, ==, (s), (n)); \ + tt_mem_op(b, OP_EQ, (s), (n)); \ } \ } while (0) @@ -416,14 +416,14 @@ do_ext_or_handshake(or_connection_t *conn) { char b[256]; - tt_int_op(0, ==, connection_ext_or_start_auth(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_start_auth(conn)); CONTAINS("\x01\x00", 2); WRITE("\x01", 1); WRITE("But when I look ahead up the whi", 32); MOCK(crypto_rand, crypto_rand_return_tse_str); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); UNMOCK(crypto_rand); - tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH); + tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH); CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b" "\x02\x9f\x1a\xde\x76\x10\xd9\x10\x87\x8b\x62\xee\xb7\x40\x38\x21" "te road There is always another ", 64); @@ -431,10 +431,10 @@ do_ext_or_handshake(or_connection_t *conn) WRITE("\xab\x39\x17\x32\xdd\x2e\xd9\x68\xcd\x40\xc0\x87\xd1\xb1\xf2\x5b" "\x33\xb3\xcd\x77\xff\x79\xbd\x80\xc2\x07\x4b\xbf\x43\x81\x19\xa2", 32); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("\x01", 1); tt_assert(! TO_CONN(conn)->marked_for_close); - tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_OPEN); + tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_OPEN); done: ; } @@ -456,14 +456,14 @@ test_ext_or_handshake(void *arg) init_connection_lists(); conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET); - tt_int_op(0, ==, connection_ext_or_start_auth(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_start_auth(conn)); /* The server starts by telling us about the one supported authtype. */ CONTAINS("\x01\x00", 2); /* Say the client hasn't responded yet. */ - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); /* Let's say the client replies badly. */ WRITE("\x99", 1); - tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("", 0); tt_assert(TO_CONN(conn)->marked_for_close); close_closeable_connections(); @@ -471,23 +471,23 @@ test_ext_or_handshake(void *arg) /* Okay, try again. */ conn = or_connection_new(CONN_TYPE_EXT_OR, AF_INET); - tt_int_op(0, ==, connection_ext_or_start_auth(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_start_auth(conn)); CONTAINS("\x01\x00", 2); /* Let's say the client replies sensibly this time. "Yes, AUTHTYPE_COOKIE * sounds delicious. Let's have some of that!" */ WRITE("\x01", 1); /* Let's say that the client also sends part of a nonce. */ WRITE("But when I look ", 16); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("", 0); - tt_int_op(TO_CONN(conn)->state, ==, + tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_NONCE); /* Pump it again. Nothing should happen. */ - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); /* send the rest of the nonce. */ WRITE("ahead up the whi", 16); MOCK(crypto_rand, crypto_rand_return_tse_str); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); UNMOCK(crypto_rand); /* We should get the right reply from the server. */ CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b" @@ -496,7 +496,7 @@ test_ext_or_handshake(void *arg) /* Send the wrong response. */ WRITE("not with a bang but a whimper...", 32); MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem); - tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("\x00", 1); tt_assert(TO_CONN(conn)->marked_for_close); /* XXXX Hold-open-until-flushed. */ @@ -515,32 +515,32 @@ test_ext_or_handshake(void *arg) /* Now let's run through some messages. */ /* First let's send some junk and make sure it's ignored. */ WRITE("\xff\xf0\x00\x03""ABC", 7); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("", 0); /* Now let's send a USERADDR command. */ WRITE("\x00\x01\x00\x0c""1.2.3.4:5678", 16); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); - tt_int_op(TO_CONN(conn)->port, ==, 5678); - tt_int_op(tor_addr_to_ipv4h(&TO_CONN(conn)->addr), ==, 0x01020304); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); + tt_int_op(TO_CONN(conn)->port, OP_EQ, 5678); + tt_int_op(tor_addr_to_ipv4h(&TO_CONN(conn)->addr), OP_EQ, 0x01020304); /* Now let's send a TRANSPORT command. */ WRITE("\x00\x02\x00\x07""rfc1149", 11); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); - tt_ptr_op(NULL, !=, conn->ext_or_transport); - tt_str_op("rfc1149", ==, conn->ext_or_transport); - tt_int_op(is_reading,==,1); - tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_OPEN); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); + tt_ptr_op(NULL, OP_NE, conn->ext_or_transport); + tt_str_op("rfc1149", OP_EQ, conn->ext_or_transport); + tt_int_op(is_reading,OP_EQ,1); + tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_OPEN); /* DONE */ WRITE("\x00\x00\x00\x00", 4); - tt_int_op(0, ==, connection_ext_or_process_inbuf(conn)); - tt_int_op(TO_CONN(conn)->state, ==, EXT_OR_CONN_STATE_FLUSHING); - tt_int_op(is_reading,==,0); + tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); + tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_FLUSHING); + tt_int_op(is_reading,OP_EQ,0); CONTAINS("\x10\x00\x00\x00", 4); - tt_int_op(handshake_start_called,==,0); - tt_int_op(0, ==, connection_ext_or_finished_flushing(conn)); - tt_int_op(is_reading,==,1); - tt_int_op(handshake_start_called,==,1); - tt_int_op(TO_CONN(conn)->type, ==, CONN_TYPE_OR); - tt_int_op(TO_CONN(conn)->state, ==, 0); + tt_int_op(handshake_start_called,OP_EQ,0); + tt_int_op(0, OP_EQ, connection_ext_or_finished_flushing(conn)); + tt_int_op(is_reading,OP_EQ,1); + tt_int_op(handshake_start_called,OP_EQ,1); + tt_int_op(TO_CONN(conn)->type, OP_EQ, CONN_TYPE_OR); + tt_int_op(TO_CONN(conn)->state, OP_EQ, 0); close_closeable_connections(); conn = NULL; @@ -551,7 +551,7 @@ test_ext_or_handshake(void *arg) /* USERADDR command with an extra NUL byte */ WRITE("\x00\x01\x00\x0d""1.2.3.4:5678\x00", 17); MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem); - tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("", 0); tt_assert(TO_CONN(conn)->marked_for_close); close_closeable_connections(); @@ -564,7 +564,7 @@ test_ext_or_handshake(void *arg) /* TRANSPORT command with an extra NUL byte */ WRITE("\x00\x02\x00\x08""rfc1149\x00", 12); MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem); - tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("", 0); tt_assert(TO_CONN(conn)->marked_for_close); close_closeable_connections(); @@ -578,7 +578,7 @@ test_ext_or_handshake(void *arg) C-identifier) */ WRITE("\x00\x02\x00\x07""rf*1149", 11); MOCK(control_event_bootstrap_problem, ignore_bootstrap_problem); - tt_int_op(-1, ==, connection_ext_or_process_inbuf(conn)); + tt_int_op(-1, OP_EQ, connection_ext_or_process_inbuf(conn)); CONTAINS("", 0); tt_assert(TO_CONN(conn)->marked_for_close); close_closeable_connections(); diff --git a/src/test/test_hs.c b/src/test/test_hs.c index c4820014c7..2db88a4c0c 100644 --- a/src/test/test_hs.c +++ b/src/test/test_hs.c @@ -85,7 +85,7 @@ test_hs_desc_event(void *arg) expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\ STR_HSDIR_EXIST_LONGNAME" "STR_HS_ID"\r\n"; tt_assert(received_msg); - tt_str_op(received_msg,==, expected_msg); + tt_str_op(received_msg,OP_EQ, expected_msg); tor_free(received_msg); /* test received event */ @@ -94,7 +94,7 @@ test_hs_desc_event(void *arg) expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\ STR_HSDIR_EXIST_LONGNAME"\r\n"; tt_assert(received_msg); - tt_str_op(received_msg,==, expected_msg); + tt_str_op(received_msg,OP_EQ, expected_msg); tor_free(received_msg); /* test failed event */ @@ -103,7 +103,7 @@ test_hs_desc_event(void *arg) expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\ STR_HSDIR_NONE_EXIST_LONGNAME"\r\n"; tt_assert(received_msg); - tt_str_op(received_msg,==, expected_msg); + tt_str_op(received_msg,OP_EQ, expected_msg); tor_free(received_msg); /* test invalid auth type */ @@ -112,7 +112,7 @@ test_hs_desc_event(void *arg) expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\ STR_HSDIR_EXIST_LONGNAME"\r\n"; tt_assert(received_msg); - tt_str_op(received_msg,==, expected_msg); + tt_str_op(received_msg,OP_EQ, expected_msg); tor_free(received_msg); done: diff --git a/src/test/test_introduce.c b/src/test/test_introduce.c index 0febd59276..fe8ffbfa4b 100644 --- a/src/test/test_introduce.c +++ b/src/test/test_introduce.c @@ -310,7 +310,7 @@ do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase) parsed_req = rend_service_begin_parse_intro(cell, cell_len, 2, &err_msg); tt_assert(parsed_req); tt_assert(!err_msg); - tt_mem_op(parsed_req->pk,==, digest, DIGEST_LEN); + tt_mem_op(parsed_req->pk,OP_EQ, digest, DIGEST_LEN); tt_assert(parsed_req->ciphertext); tt_assert(parsed_req->ciphertext_len > 0); diff --git a/src/test/test_logging.c b/src/test/test_logging.c index 9d9cbae6a8..17f1ed566c 100644 --- a/src/test/test_logging.c +++ b/src/test/test_logging.c @@ -22,8 +22,8 @@ test_get_sigsafe_err_fds(void *arg) init_logging(1); n = tor_log_get_sigsafe_err_fds(&fds); - tt_int_op(n, ==, 1); - tt_int_op(fds[0], ==, STDERR_FILENO); + tt_int_op(n, OP_EQ, 1); + tt_int_op(fds[0], OP_EQ, STDERR_FILENO); set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug); set_log_severity_config(LOG_WARN, LOG_ERR, &no_bug); @@ -40,26 +40,26 @@ test_get_sigsafe_err_fds(void *arg) tor_log_update_sigsafe_err_fds(); n = tor_log_get_sigsafe_err_fds(&fds); - tt_int_op(n, ==, 2); - tt_int_op(fds[0], ==, STDERR_FILENO); - tt_int_op(fds[1], ==, 3); + tt_int_op(n, OP_EQ, 2); + tt_int_op(fds[0], OP_EQ, STDERR_FILENO); + tt_int_op(fds[1], OP_EQ, 3); /* Allow STDOUT to replace STDERR. */ add_stream_log(&include_bug, "dummy-4", STDOUT_FILENO); tor_log_update_sigsafe_err_fds(); n = tor_log_get_sigsafe_err_fds(&fds); - tt_int_op(n, ==, 2); - tt_int_op(fds[0], ==, 3); - tt_int_op(fds[1], ==, STDOUT_FILENO); + tt_int_op(n, OP_EQ, 2); + tt_int_op(fds[0], OP_EQ, 3); + tt_int_op(fds[1], OP_EQ, STDOUT_FILENO); /* But don't allow it to replace explicit STDERR. */ add_stream_log(&include_bug, "dummy-5", STDERR_FILENO); tor_log_update_sigsafe_err_fds(); n = tor_log_get_sigsafe_err_fds(&fds); - tt_int_op(n, ==, 3); - tt_int_op(fds[0], ==, STDERR_FILENO); - tt_int_op(fds[1], ==, STDOUT_FILENO); - tt_int_op(fds[2], ==, 3); + tt_int_op(n, OP_EQ, 3); + tt_int_op(fds[0], OP_EQ, STDERR_FILENO); + tt_int_op(fds[1], OP_EQ, STDOUT_FILENO); + tt_int_op(fds[2], OP_EQ, 3); /* Don't overflow the array. */ { @@ -70,7 +70,7 @@ test_get_sigsafe_err_fds(void *arg) } tor_log_update_sigsafe_err_fds(); n = tor_log_get_sigsafe_err_fds(&fds); - tt_int_op(n, ==, 8); + tt_int_op(n, OP_EQ, 8); done: ; @@ -109,7 +109,7 @@ test_sigsafe_err(void *arg) tt_assert(content != NULL); tor_split_lines(lines, content, (int)strlen(content)); - tt_int_op(smartlist_len(lines), >=, 5); + tt_int_op(smartlist_len(lines), OP_GE, 5); if (strstr(smartlist_get(lines, 0), "opening new log file")) smartlist_del_keeporder(lines, 0); @@ -119,7 +119,7 @@ test_sigsafe_err(void *arg) tt_assert(!strcmpstart(smartlist_get(lines, 2), "Minimal.")); /* Next line is blank. */ tt_assert(!strcmpstart(smartlist_get(lines, 3), "==============")); - tt_str_op(smartlist_get(lines, 4), ==, + tt_str_op(smartlist_get(lines, 4), OP_EQ, "Testing any attempt to manually log from a signal."); done: diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c index aa4bdf2ae8..4a7c29b747 100644 --- a/src/test/test_microdesc.c +++ b/src/test/test_microdesc.c @@ -75,9 +75,9 @@ test_md_cache(void *data) tor_free(options->DataDirectory); options->DataDirectory = tor_strdup(get_fname("md_datadir_test")); #ifdef _WIN32 - tt_int_op(0, ==, mkdir(options->DataDirectory)); + tt_int_op(0, OP_EQ, mkdir(options->DataDirectory)); #else - tt_int_op(0, ==, mkdir(options->DataDirectory, 0700)); + tt_int_op(0, OP_EQ, mkdir(options->DataDirectory, 0700)); #endif tt_assert(!strcmpstart(test_md3_noannotation, "onion-key")); @@ -91,7 +91,7 @@ test_md_cache(void *data) added = microdescs_add_to_cache(mc, test_md1, NULL, SAVED_NOWHERE, 0, time1, NULL); - tt_int_op(1, ==, smartlist_len(added)); + tt_int_op(1, OP_EQ, smartlist_len(added)); md1 = smartlist_get(added, 0); smartlist_free(added); added = NULL; @@ -100,7 +100,7 @@ test_md_cache(void *data) added = microdescs_add_to_cache(mc, test_md2, NULL, SAVED_NOWHERE, 0, time2, wanted); /* Should fail, since we didn't list test_md2's digest in wanted */ - tt_int_op(0, ==, smartlist_len(added)); + tt_int_op(0, OP_EQ, smartlist_len(added)); smartlist_free(added); added = NULL; @@ -109,75 +109,75 @@ test_md_cache(void *data) added = microdescs_add_to_cache(mc, test_md2, NULL, SAVED_NOWHERE, 0, time2, wanted); /* Now it can work. md2 should have been added */ - tt_int_op(1, ==, smartlist_len(added)); + tt_int_op(1, OP_EQ, smartlist_len(added)); md2 = smartlist_get(added, 0); /* And it should have gotten removed from 'wanted' */ - tt_int_op(smartlist_len(wanted), ==, 1); - tt_mem_op(smartlist_get(wanted, 0), ==, d3, DIGEST256_LEN); + tt_int_op(smartlist_len(wanted), OP_EQ, 1); + tt_mem_op(smartlist_get(wanted, 0), OP_EQ, d3, DIGEST256_LEN); smartlist_free(added); added = NULL; added = microdescs_add_to_cache(mc, test_md3, NULL, SAVED_NOWHERE, 0, -1, NULL); /* Must fail, since SAVED_NOWHERE precludes annotations */ - tt_int_op(0, ==, smartlist_len(added)); + tt_int_op(0, OP_EQ, smartlist_len(added)); smartlist_free(added); added = NULL; added = microdescs_add_to_cache(mc, test_md3_noannotation, NULL, SAVED_NOWHERE, 0, time3, NULL); /* Now it can work */ - tt_int_op(1, ==, smartlist_len(added)); + tt_int_op(1, OP_EQ, smartlist_len(added)); md3 = smartlist_get(added, 0); smartlist_free(added); added = NULL; /* Okay. We added 1...3. Let's poke them to see how they look, and make * sure they're really in the journal. */ - tt_ptr_op(md1, ==, microdesc_cache_lookup_by_digest256(mc, d1)); - tt_ptr_op(md2, ==, microdesc_cache_lookup_by_digest256(mc, d2)); - tt_ptr_op(md3, ==, microdesc_cache_lookup_by_digest256(mc, d3)); + tt_ptr_op(md1, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d1)); + tt_ptr_op(md2, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d2)); + tt_ptr_op(md3, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d3)); - tt_int_op(md1->last_listed, ==, time1); - tt_int_op(md2->last_listed, ==, time2); - tt_int_op(md3->last_listed, ==, time3); + tt_int_op(md1->last_listed, OP_EQ, time1); + tt_int_op(md2->last_listed, OP_EQ, time2); + tt_int_op(md3->last_listed, OP_EQ, time3); - tt_int_op(md1->saved_location, ==, SAVED_IN_JOURNAL); - tt_int_op(md2->saved_location, ==, SAVED_IN_JOURNAL); - tt_int_op(md3->saved_location, ==, SAVED_IN_JOURNAL); + tt_int_op(md1->saved_location, OP_EQ, SAVED_IN_JOURNAL); + tt_int_op(md2->saved_location, OP_EQ, SAVED_IN_JOURNAL); + tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_JOURNAL); - tt_int_op(md1->bodylen, ==, strlen(test_md1)); - tt_int_op(md2->bodylen, ==, strlen(test_md2)); - tt_int_op(md3->bodylen, ==, strlen(test_md3_noannotation)); - tt_mem_op(md1->body, ==, test_md1, strlen(test_md1)); - tt_mem_op(md2->body, ==, test_md2, strlen(test_md2)); - tt_mem_op(md3->body, ==, test_md3_noannotation, + tt_int_op(md1->bodylen, OP_EQ, strlen(test_md1)); + tt_int_op(md2->bodylen, OP_EQ, strlen(test_md2)); + tt_int_op(md3->bodylen, OP_EQ, strlen(test_md3_noannotation)); + tt_mem_op(md1->body, OP_EQ, test_md1, strlen(test_md1)); + tt_mem_op(md2->body, OP_EQ, test_md2, strlen(test_md2)); + tt_mem_op(md3->body, OP_EQ, test_md3_noannotation, strlen(test_md3_noannotation)); tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs.new", options->DataDirectory); s = read_file_to_str(fn, RFTS_BIN, NULL); tt_assert(s); - tt_mem_op(md1->body, ==, s + md1->off, md1->bodylen); - tt_mem_op(md2->body, ==, s + md2->off, md2->bodylen); - tt_mem_op(md3->body, ==, s + md3->off, md3->bodylen); + tt_mem_op(md1->body, OP_EQ, s + md1->off, md1->bodylen); + tt_mem_op(md2->body, OP_EQ, s + md2->off, md2->bodylen); + tt_mem_op(md3->body, OP_EQ, s + md3->off, md3->bodylen); - tt_ptr_op(md1->family, ==, NULL); - tt_ptr_op(md3->family, !=, NULL); - tt_int_op(smartlist_len(md3->family), ==, 3); - tt_str_op(smartlist_get(md3->family, 0), ==, "nodeX"); + tt_ptr_op(md1->family, OP_EQ, NULL); + tt_ptr_op(md3->family, OP_NE, NULL); + tt_int_op(smartlist_len(md3->family), OP_EQ, 3); + tt_str_op(smartlist_get(md3->family, 0), OP_EQ, "nodeX"); /* Now rebuild the cache! */ - tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0); + tt_int_op(microdesc_cache_rebuild(mc, 1), OP_EQ, 0); - tt_int_op(md1->saved_location, ==, SAVED_IN_CACHE); - tt_int_op(md2->saved_location, ==, SAVED_IN_CACHE); - tt_int_op(md3->saved_location, ==, SAVED_IN_CACHE); + tt_int_op(md1->saved_location, OP_EQ, SAVED_IN_CACHE); + tt_int_op(md2->saved_location, OP_EQ, SAVED_IN_CACHE); + tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_CACHE); /* The journal should be empty now */ tor_free(s); s = read_file_to_str(fn, RFTS_BIN, NULL); - tt_str_op(s, ==, ""); + tt_str_op(s, OP_EQ, ""); tor_free(s); tor_free(fn); @@ -185,9 +185,9 @@ test_md_cache(void *data) tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs", options->DataDirectory); s = read_file_to_str(fn, RFTS_BIN, NULL); - tt_mem_op(md1->body, ==, s + md1->off, strlen(test_md1)); - tt_mem_op(md2->body, ==, s + md2->off, strlen(test_md2)); - tt_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation)); + tt_mem_op(md1->body, OP_EQ, s + md1->off, strlen(test_md1)); + tt_mem_op(md2->body, OP_EQ, s + md2->off, strlen(test_md2)); + tt_mem_op(md3->body, OP_EQ, s + md3->off, strlen(test_md3_noannotation)); /* Okay, now we are going to forget about the cache entirely, and reload it * from the disk. */ @@ -199,41 +199,41 @@ test_md_cache(void *data) tt_assert(md1); tt_assert(md2); tt_assert(md3); - tt_mem_op(md1->body, ==, s + md1->off, strlen(test_md1)); - tt_mem_op(md2->body, ==, s + md2->off, strlen(test_md2)); - tt_mem_op(md3->body, ==, s + md3->off, strlen(test_md3_noannotation)); + tt_mem_op(md1->body, OP_EQ, s + md1->off, strlen(test_md1)); + tt_mem_op(md2->body, OP_EQ, s + md2->off, strlen(test_md2)); + tt_mem_op(md3->body, OP_EQ, s + md3->off, strlen(test_md3_noannotation)); - tt_int_op(md1->last_listed, ==, time1); - tt_int_op(md2->last_listed, ==, time2); - tt_int_op(md3->last_listed, ==, time3); + tt_int_op(md1->last_listed, OP_EQ, time1); + tt_int_op(md2->last_listed, OP_EQ, time2); + tt_int_op(md3->last_listed, OP_EQ, time3); /* Okay, now we are going to clear out everything older than a week old. * In practice, that means md3 */ microdesc_cache_clean(mc, time(NULL)-7*24*60*60, 1/*force*/); - tt_ptr_op(md1, ==, microdesc_cache_lookup_by_digest256(mc, d1)); - tt_ptr_op(md2, ==, microdesc_cache_lookup_by_digest256(mc, d2)); - tt_ptr_op(NULL, ==, microdesc_cache_lookup_by_digest256(mc, d3)); + tt_ptr_op(md1, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d1)); + tt_ptr_op(md2, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d2)); + tt_ptr_op(NULL, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d3)); md3 = NULL; /* it's history now! */ /* rebuild again, make sure it stays gone. */ - tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0); - tt_ptr_op(md1, ==, microdesc_cache_lookup_by_digest256(mc, d1)); - tt_ptr_op(md2, ==, microdesc_cache_lookup_by_digest256(mc, d2)); - tt_ptr_op(NULL, ==, microdesc_cache_lookup_by_digest256(mc, d3)); + tt_int_op(microdesc_cache_rebuild(mc, 1), OP_EQ, 0); + tt_ptr_op(md1, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d1)); + tt_ptr_op(md2, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d2)); + tt_ptr_op(NULL, OP_EQ, microdesc_cache_lookup_by_digest256(mc, d3)); /* Re-add md3, and make sure we can rebuild the cache. */ added = microdescs_add_to_cache(mc, test_md3_noannotation, NULL, SAVED_NOWHERE, 0, time3, NULL); - tt_int_op(1, ==, smartlist_len(added)); + tt_int_op(1, OP_EQ, smartlist_len(added)); md3 = smartlist_get(added, 0); smartlist_free(added); added = NULL; - tt_int_op(md1->saved_location, ==, SAVED_IN_CACHE); - tt_int_op(md2->saved_location, ==, SAVED_IN_CACHE); - tt_int_op(md3->saved_location, ==, SAVED_IN_JOURNAL); + tt_int_op(md1->saved_location, OP_EQ, SAVED_IN_CACHE); + tt_int_op(md2->saved_location, OP_EQ, SAVED_IN_CACHE); + tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_JOURNAL); - tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0); - tt_int_op(md3->saved_location, ==, SAVED_IN_CACHE); + tt_int_op(microdesc_cache_rebuild(mc, 1), OP_EQ, 0); + tt_int_op(md3->saved_location, OP_EQ, SAVED_IN_CACHE); done: if (options) @@ -273,9 +273,9 @@ test_md_cache_broken(void *data) options->DataDirectory = tor_strdup(get_fname("md_datadir_test2")); #ifdef _WIN32 - tt_int_op(0, ==, mkdir(options->DataDirectory)); + tt_int_op(0, OP_EQ, mkdir(options->DataDirectory)); #else - tt_int_op(0, ==, mkdir(options->DataDirectory, 0700)); + tt_int_op(0, OP_EQ, mkdir(options->DataDirectory, 0700)); #endif tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs", @@ -375,7 +375,7 @@ test_md_generate(void *arg) ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL, NULL); tt_assert(ri); md = dirvote_create_microdescriptor(ri, 8); - tt_str_op(md->body, ==, test_md_8); + tt_str_op(md->body, OP_EQ, test_md_8); /* XXXX test family lines. */ /* XXXX test method 14 for A lines. */ @@ -384,12 +384,12 @@ test_md_generate(void *arg) microdesc_free(md); md = NULL; md = dirvote_create_microdescriptor(ri, 16); - tt_str_op(md->body, ==, test_md_16); + tt_str_op(md->body, OP_EQ, test_md_16); microdesc_free(md); md = NULL; md = dirvote_create_microdescriptor(ri, 18); - tt_str_op(md->body, ==, test_md_18); + tt_str_op(md->body, OP_EQ, test_md_18); done: microdesc_free(md); @@ -564,8 +564,8 @@ test_md_parse(void *arg) smartlist_t *mds = microdescs_parse_from_string(MD_PARSE_TEST_DATA, NULL, 1, SAVED_NOWHERE, invalid); - tt_int_op(smartlist_len(mds), ==, 11); - tt_int_op(smartlist_len(invalid), ==, 4); + tt_int_op(smartlist_len(mds), OP_EQ, 11); + tt_int_op(smartlist_len(invalid), OP_EQ, 4); test_memeq_hex(smartlist_get(invalid,0), "5d76bf1c6614e885614a1e0ad074e1ab" @@ -585,11 +585,11 @@ test_md_parse(void *arg) test_memeq_hex(md->digest, "54bb6d733ddeb375d2456c79ae103961" "da0cae29620375ac4cf13d54da4d92b3"); - tt_int_op(md->last_listed, ==, 0); - tt_int_op(md->saved_location, ==, SAVED_NOWHERE); - tt_int_op(md->no_save, ==, 0); - tt_uint_op(md->held_in_map, ==, 0); - tt_uint_op(md->held_by_nodes, ==, 0); + tt_int_op(md->last_listed, OP_EQ, 0); + tt_int_op(md->saved_location, OP_EQ, SAVED_NOWHERE); + tt_int_op(md->no_save, OP_EQ, 0); + tt_uint_op(md->held_in_map, OP_EQ, 0); + tt_uint_op(md->held_by_nodes, OP_EQ, 0); tt_assert(md->onion_curve25519_pkey); md = smartlist_get(mds, 6); @@ -609,7 +609,7 @@ test_md_parse(void *arg) "409ebd87d23925a2732bd467a92813c9" "21ca378fcb9ca193d354c51550b6d5e9"); tt_assert(tor_addr_family(&md->ipv6_addr) == AF_INET6); - tt_int_op(md->ipv6_orport, ==, 9090); + tt_int_op(md->ipv6_orport, OP_EQ, 9090); done: SMARTLIST_FOREACH(mds, microdesc_t *, md, microdesc_free(md)); @@ -667,9 +667,9 @@ test_md_reject_cache(void *arg) mock_ns_val->flavor = FLAV_MICRODESC; #ifdef _WIN32 - tt_int_op(0, ==, mkdir(options->DataDirectory)); + tt_int_op(0, OP_EQ, mkdir(options->DataDirectory)); #else - tt_int_op(0, ==, mkdir(options->DataDirectory, 0700)); + tt_int_op(0, OP_EQ, mkdir(options->DataDirectory, 0700)); #endif MOCK(router_get_mutable_consensus_status_by_descriptor_digest, @@ -679,7 +679,7 @@ test_md_reject_cache(void *arg) mc = get_microdesc_cache(); #define ADD(hex) \ do { \ - tt_int_op(0,==,base16_decode(buf,sizeof(buf),hex,strlen(hex))); \ + tt_int_op(0,OP_EQ,base16_decode(buf,sizeof(buf),hex,strlen(hex))); \ smartlist_add(wanted, tor_memdup(buf, DIGEST256_LEN)); \ } while (0) @@ -695,10 +695,10 @@ test_md_reject_cache(void *arg) added = microdescs_add_to_cache(mc, MD_PARSE_TEST_DATA, NULL, SAVED_NOWHERE, 0, time(NULL), wanted); - tt_int_op(smartlist_len(added), ==, 2); - tt_int_op(mock_rgsbd_called, ==, 2); - tt_int_op(mock_rgsbd_val_a->dl_status.n_download_failures, ==, 255); - tt_int_op(mock_rgsbd_val_b->dl_status.n_download_failures, ==, 255); + tt_int_op(smartlist_len(added), OP_EQ, 2); + tt_int_op(mock_rgsbd_called, OP_EQ, 2); + tt_int_op(mock_rgsbd_val_a->dl_status.n_download_failures, OP_EQ, 255); + tt_int_op(mock_rgsbd_val_b->dl_status.n_download_failures, OP_EQ, 255); done: UNMOCK(networkstatus_get_latest_consensus_by_flavor); diff --git a/src/test/test_nodelist.c b/src/test/test_nodelist.c index 7c94084a02..2fba3da7e0 100644 --- a/src/test/test_nodelist.c +++ b/src/test/test_nodelist.c @@ -25,7 +25,7 @@ test_nodelist_node_get_verbose_nickname_by_id_null_node(void *arg) /* make sure node_get_by_id returns NULL */ tt_assert(!node_get_by_id(ID)); node_get_verbose_nickname_by_id(ID, vname); - tt_str_op(vname,==, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + tt_str_op(vname,OP_EQ, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); done: return; } @@ -54,7 +54,7 @@ test_nodelist_node_get_verbose_nickname_not_named(void *arg) "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA", DIGEST_LEN); node_get_verbose_nickname(&mock_node, vname); - tt_str_op(vname,==, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR"); + tt_str_op(vname,OP_EQ, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR"); done: return; diff --git a/src/test/test_oom.c b/src/test/test_oom.c index 2726056b80..1f21f65c60 100644 --- a/src/test/test_oom.c +++ b/src/test/test_oom.c @@ -151,9 +151,9 @@ test_oom_circbuf(void *arg) options->MaxMemInQueues = 256*packed_cell_mem_cost(); options->CellStatistics = 0; - tt_int_op(cell_queues_check_size(), ==, 0); /* We don't start out OOM. */ - tt_int_op(cell_queues_get_total_allocation(), ==, 0); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We don't start out OOM. */ + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); /* Now we're going to fake up some circuits and get them added to the global circuit list. */ @@ -165,21 +165,21 @@ test_oom_circbuf(void *arg) c2 = dummy_or_circuit_new(20, 20); #ifdef ENABLE_MEMPOOLS - tt_int_op(packed_cell_mem_cost(), ==, + tt_int_op(packed_cell_mem_cost(), OP_EQ, sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD); #else - tt_int_op(packed_cell_mem_cost(), ==, + tt_int_op(packed_cell_mem_cost(), OP_EQ, sizeof(packed_cell_t)); #endif /* ENABLE_MEMPOOLS */ - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 70); - tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */ + tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We are still not OOM */ tv.tv_usec = 20*1000; tor_gettimeofday_cache_set(&tv); c3 = dummy_or_circuit_new(100, 85); - tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */ - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We are still not OOM */ + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 255); tv.tv_usec = 30*1000; @@ -187,17 +187,17 @@ test_oom_circbuf(void *arg) /* Adding this cell will trigger our OOM handler. */ c4 = dummy_or_circuit_new(2, 0); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 257); - tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */ + tt_int_op(cell_queues_check_size(), OP_EQ, 1); /* We are now OOM */ tt_assert(c1->marked_for_close); tt_assert(! c2->marked_for_close); tt_assert(! c3->marked_for_close); tt_assert(! c4->marked_for_close); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * (257 - 30)); circuit_free(c1); @@ -208,14 +208,14 @@ test_oom_circbuf(void *arg) tv.tv_usec = 40*1000; /* go back to the future */ tor_gettimeofday_cache_set(&tv); - tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */ + tt_int_op(cell_queues_check_size(), OP_EQ, 1); /* We are now OOM */ tt_assert(c1->marked_for_close); tt_assert(! c2->marked_for_close); tt_assert(! c3->marked_for_close); tt_assert(! c4->marked_for_close); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * (257 - 30)); done: @@ -250,9 +250,9 @@ test_oom_streambuf(void *arg) options->MaxMemInQueues = 81*packed_cell_mem_cost() + 4096 * 34; options->CellStatistics = 0; - tt_int_op(cell_queues_check_size(), ==, 0); /* We don't start out OOM. */ - tt_int_op(cell_queues_get_total_allocation(), ==, 0); - tt_int_op(buf_get_total_allocation(), ==, 0); + tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* We don't start out OOM. */ + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, 0); + tt_int_op(buf_get_total_allocation(), OP_EQ, 0); /* Start all circuits with a bit of data queued in cells */ tv.tv_usec = 500*1000; /* go halfway into the second. */ @@ -267,7 +267,7 @@ test_oom_streambuf(void *arg) tv.tv_usec = 530*1000; tor_gettimeofday_cache_set(&tv); c4 = dummy_or_circuit_new(0,0); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 80); tv.tv_usec = 600*1000; @@ -303,24 +303,24 @@ test_oom_streambuf(void *arg) tv.tv_usec = 0; tvms = (uint32_t) tv_to_msec(&tv); - tt_int_op(circuit_max_queued_cell_age(c1, tvms), ==, 500); - tt_int_op(circuit_max_queued_cell_age(c2, tvms), ==, 490); - tt_int_op(circuit_max_queued_cell_age(c3, tvms), ==, 480); - tt_int_op(circuit_max_queued_cell_age(c4, tvms), ==, 0); + tt_int_op(circuit_max_queued_cell_age(c1, tvms), OP_EQ, 500); + tt_int_op(circuit_max_queued_cell_age(c2, tvms), OP_EQ, 490); + tt_int_op(circuit_max_queued_cell_age(c3, tvms), OP_EQ, 480); + tt_int_op(circuit_max_queued_cell_age(c4, tvms), OP_EQ, 0); - tt_int_op(circuit_max_queued_data_age(c1, tvms), ==, 390); - tt_int_op(circuit_max_queued_data_age(c2, tvms), ==, 380); - tt_int_op(circuit_max_queued_data_age(c3, tvms), ==, 0); - tt_int_op(circuit_max_queued_data_age(c4, tvms), ==, 370); + tt_int_op(circuit_max_queued_data_age(c1, tvms), OP_EQ, 390); + tt_int_op(circuit_max_queued_data_age(c2, tvms), OP_EQ, 380); + tt_int_op(circuit_max_queued_data_age(c3, tvms), OP_EQ, 0); + tt_int_op(circuit_max_queued_data_age(c4, tvms), OP_EQ, 370); - tt_int_op(circuit_max_queued_item_age(c1, tvms), ==, 500); - tt_int_op(circuit_max_queued_item_age(c2, tvms), ==, 490); - tt_int_op(circuit_max_queued_item_age(c3, tvms), ==, 480); - tt_int_op(circuit_max_queued_item_age(c4, tvms), ==, 370); + tt_int_op(circuit_max_queued_item_age(c1, tvms), OP_EQ, 500); + tt_int_op(circuit_max_queued_item_age(c2, tvms), OP_EQ, 490); + tt_int_op(circuit_max_queued_item_age(c3, tvms), OP_EQ, 480); + tt_int_op(circuit_max_queued_item_age(c4, tvms), OP_EQ, 370); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 80); - tt_int_op(buf_get_total_allocation(), ==, 4096*16*2); + tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*16*2); /* Now give c4 a very old buffer of modest size */ { @@ -332,21 +332,21 @@ test_oom_streambuf(void *arg) tt_assert(ec); smartlist_add(edgeconns, ec); } - tt_int_op(buf_get_total_allocation(), ==, 4096*17*2); - tt_int_op(circuit_max_queued_item_age(c4, tvms), ==, 1000); + tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*17*2); + tt_int_op(circuit_max_queued_item_age(c4, tvms), OP_EQ, 1000); - tt_int_op(cell_queues_check_size(), ==, 0); + tt_int_op(cell_queues_check_size(), OP_EQ, 0); /* And run over the limit. */ tv.tv_usec = 800*1000; tor_gettimeofday_cache_set(&tv); c5 = dummy_or_circuit_new(0,5); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 85); - tt_int_op(buf_get_total_allocation(), ==, 4096*17*2); + tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*17*2); - tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */ + tt_int_op(cell_queues_check_size(), OP_EQ, 1); /* We are now OOM */ /* C4 should have died. */ tt_assert(! c1->marked_for_close); @@ -355,9 +355,9 @@ test_oom_streambuf(void *arg) tt_assert(c4->marked_for_close); tt_assert(! c5->marked_for_close); - tt_int_op(cell_queues_get_total_allocation(), ==, + tt_int_op(cell_queues_get_total_allocation(), OP_EQ, packed_cell_mem_cost() * 85); - tt_int_op(buf_get_total_allocation(), ==, 4096*8*2); + tt_int_op(buf_get_total_allocation(), OP_EQ, 4096*8*2); done: circuit_free(c1); diff --git a/src/test/test_options.c b/src/test/test_options.c index 57ab38c027..44349b3800 100644 --- a/src/test/test_options.c +++ b/src/test/test_options.c @@ -87,10 +87,10 @@ test_options_validate_impl(const char *configuration, clear_log_messages(); r = config_get_lines(configuration, &cl, 1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); r = config_assign(&options_format, opt, cl, 0, 0, &msg); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); r = options_validate(NULL, opt, dflt, 0, &msg); if (expect_errmsg && !msg) { @@ -103,7 +103,7 @@ test_options_validate_impl(const char *configuration, TT_DIE(("Expected no error message from <%s> but got <%s>.", configuration, msg)); } - tt_int_op((r == 0), ==, (msg == NULL)); + tt_int_op((r == 0), OP_EQ, (msg == NULL)); if (expect_log) { int found = 0; diff --git a/src/test/test_policy.c b/src/test/test_policy.c index c043ac6e3a..e77e16c99e 100644 --- a/src/test/test_policy.c +++ b/src/test/test_policy.c @@ -22,7 +22,7 @@ test_short_policy_parse(const char *input, short_policy = parse_short_policy(input); tt_assert(short_policy); out = write_short_policy(short_policy); - tt_str_op(out, ==, expected); + tt_str_op(out, OP_EQ, expected); done: tor_free(out); @@ -50,17 +50,17 @@ test_policy_summary_helper(const char *policy_str, r = policies_parse_exit_policy(&line, &policy, EXIT_POLICY_IPV6_ENABLED | EXIT_POLICY_ADD_DEFAULT ,0); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); summary = policy_summarize(policy, AF_INET); tt_assert(summary != NULL); - tt_str_op(summary,==, expected_summary); + tt_str_op(summary,OP_EQ, expected_summary); short_policy = parse_short_policy(summary); tt_assert(short_policy); summary_after = write_short_policy(short_policy); - tt_str_op(summary,==, summary_after); + tt_str_op(summary,OP_EQ, summary_after); done: tor_free(summary_after); @@ -90,12 +90,12 @@ test_policies_general(void *arg) p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1); tt_assert(p != NULL); - tt_int_op(ADDR_POLICY_REJECT,==, p->policy_type); + tt_int_op(ADDR_POLICY_REJECT,OP_EQ, p->policy_type); tor_addr_from_ipv4h(&tar, 0xc0a80000u); - tt_int_op(0,==, tor_addr_compare(&p->addr, &tar, CMP_EXACT)); - tt_int_op(16,==, p->maskbits); - tt_int_op(1,==, p->prt_min); - tt_int_op(65535,==, p->prt_max); + tt_int_op(0,OP_EQ, tor_addr_compare(&p->addr, &tar, CMP_EXACT)); + tt_int_op(16,OP_EQ, p->maskbits); + tt_int_op(1,OP_EQ, p->prt_min); + tt_int_op(65535,OP_EQ, p->prt_max); smartlist_add(policy, p); @@ -109,7 +109,7 @@ test_policies_general(void *arg) tt_assert(ADDR_POLICY_REJECTED == compare_tor_addr_to_addr_policy(&tar, 2, policy)); - tt_int_op(0, ==, policies_parse_exit_policy(NULL, &policy2, + tt_int_op(0, OP_EQ, policies_parse_exit_policy(NULL, &policy2, EXIT_POLICY_IPV6_ENABLED | EXIT_POLICY_REJECT_PRIVATE | EXIT_POLICY_ADD_DEFAULT, 0)); @@ -200,14 +200,14 @@ test_policies_general(void *arg) line.key = (char*)"foo"; line.value = (char*)"accept *:80,reject private:*,reject *:*"; line.next = NULL; - tt_int_op(0, ==, policies_parse_exit_policy(&line,&policy, + tt_int_op(0, OP_EQ, policies_parse_exit_policy(&line,&policy, EXIT_POLICY_IPV6_ENABLED | EXIT_POLICY_ADD_DEFAULT,0)); tt_assert(policy); //test_streq(policy->string, "accept *:80"); //test_streq(policy->next->string, "reject *:*"); - tt_int_op(smartlist_len(policy),==, 4); + tt_int_op(smartlist_len(policy),OP_EQ, 4); /* test policy summaries */ /* check if we properly ignore private IP addresses */ @@ -281,7 +281,7 @@ test_policies_general(void *arg) /* Try parsing various broken short policies */ #define TT_BAD_SHORT_POLICY(s) \ do { \ - tt_ptr_op(NULL, ==, (short_parsed = parse_short_policy((s)))); \ + tt_ptr_op(NULL, OP_EQ, (short_parsed = parse_short_policy((s)))); \ } while (0) TT_BAD_SHORT_POLICY("accept 200-199"); TT_BAD_SHORT_POLICY(""); @@ -311,7 +311,7 @@ test_policies_general(void *arg) smartlist_free(chunks); short_parsed = parse_short_policy(policy);/* shouldn't be accepted */ tor_free(policy); - tt_ptr_op(NULL, ==, short_parsed); + tt_ptr_op(NULL, OP_EQ, short_parsed); } /* truncation ports */ @@ -369,7 +369,7 @@ test_dump_exit_policy_to_string(void *arg) ri->exit_policy = NULL; // expecting "reject *:*" ep = router_dump_exit_policy_to_string(ri,1,1); - tt_str_op("reject *:*",==, ep); + tt_str_op("reject *:*",OP_EQ, ep); tor_free(ep); @@ -382,7 +382,7 @@ test_dump_exit_policy_to_string(void *arg) ep = router_dump_exit_policy_to_string(ri,1,1); - tt_str_op("accept *:*",==, ep); + tt_str_op("accept *:*",OP_EQ, ep); tor_free(ep); @@ -392,7 +392,7 @@ test_dump_exit_policy_to_string(void *arg) ep = router_dump_exit_policy_to_string(ri,1,1); - tt_str_op("accept *:*\nreject *:25",==, ep); + tt_str_op("accept *:*\nreject *:25",OP_EQ, ep); tor_free(ep); @@ -403,7 +403,7 @@ test_dump_exit_policy_to_string(void *arg) ep = router_dump_exit_policy_to_string(ri,1,1); - tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*",==, ep); + tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*",OP_EQ, ep); tor_free(ep); policy_entry = @@ -414,7 +414,7 @@ test_dump_exit_policy_to_string(void *arg) ep = router_dump_exit_policy_to_string(ri,1,1); tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*\n" - "reject6 [fc00::]/7:*",==, ep); + "reject6 [fc00::]/7:*",OP_EQ, ep); tor_free(ep); policy_entry = @@ -425,7 +425,7 @@ test_dump_exit_policy_to_string(void *arg) ep = router_dump_exit_policy_to_string(ri,1,1); tt_str_op("accept *:*\nreject *:25\nreject 8.8.8.8:*\n" - "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",==, ep); + "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",OP_EQ, ep); done: diff --git a/src/test/test_pt.c b/src/test/test_pt.c index 1be52ee5bd..dba880ee19 100644 --- a/src/test/test_pt.c +++ b/src/test/test_pt.c @@ -69,7 +69,7 @@ test_pt_parsing(void *arg) /* test registered SOCKS version of transport */ tt_assert(transport->socks_version == PROXY_SOCKS5); /* test registered name of transport */ - tt_str_op(transport->name,==, "trebuchet"); + tt_str_op(transport->name,OP_EQ, "trebuchet"); reset_mp(mp); @@ -96,7 +96,7 @@ test_pt_parsing(void *arg) /* test registered port of transport */ tt_assert(transport->port == 2999); /* test registered name of transport */ - tt_str_op(transport->name,==, "trebuchy"); + tt_str_op(transport->name,OP_EQ, "trebuchy"); reset_mp(mp); @@ -105,14 +105,14 @@ test_pt_parsing(void *arg) "ARGS:counterweight=3,sling=snappy", sizeof(line)); tt_assert(parse_smethod_line(line, mp) == 0); - tt_int_op(1, ==, smartlist_len(mp->transports)); + tt_int_op(1, OP_EQ, smartlist_len(mp->transports)); { const transport_t *transport = smartlist_get(mp->transports, 0); tt_assert(transport); - tt_str_op(transport->name, ==, "trebuchet"); - tt_int_op(transport->port, ==, 9999); - tt_str_op(fmt_addr(&transport->addr), ==, "127.0.0.1"); - tt_str_op(transport->extra_info_args, ==, + tt_str_op(transport->name, OP_EQ, "trebuchet"); + tt_int_op(transport->port, OP_EQ, 9999); + tt_str_op(fmt_addr(&transport->addr), OP_EQ, "127.0.0.1"); + tt_str_op(transport->extra_info_args, OP_EQ, "counterweight=3,sling=snappy"); } reset_mp(mp); @@ -151,9 +151,9 @@ test_pt_get_transport_options(void *arg) execve_args[1] = NULL; mp = managed_proxy_create(transport_list, execve_args, 1); - tt_ptr_op(mp, !=, NULL); + tt_ptr_op(mp, OP_NE, NULL); opt_str = get_transport_options_for_server_proxy(mp); - tt_ptr_op(opt_str, ==, NULL); + tt_ptr_op(opt_str, OP_EQ, NULL); smartlist_add(mp->transports_to_launch, tor_strdup("gruyere")); smartlist_add(mp->transports_to_launch, tor_strdup("roquefort")); @@ -176,7 +176,7 @@ test_pt_get_transport_options(void *arg) options->ServerTransportOptions = cl; opt_str = get_transport_options_for_server_proxy(mp); - tt_str_op(opt_str, ==, + tt_str_op(opt_str, OP_EQ, "gruyere:melty=10;gruyere:hardness=se\\;ven;" "stnectaire:melty=4;stnectaire:hardness=three"); @@ -262,17 +262,17 @@ test_pt_get_extrainfo_string(void *arg) mp2 = managed_proxy_create(t2, argv2, 1); r = parse_smethod_line("SMETHOD hagbard 127.0.0.1:5555", mp1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); r = parse_smethod_line("SMETHOD celine 127.0.0.1:1723 ARGS:card=no-enemy", mp2); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); /* Force these proxies to look "completed" or they won't generate output. */ mp1->conf_state = mp2->conf_state = PT_PROTO_COMPLETED; s = pt_get_extra_info_descriptor_string(); tt_assert(s); - tt_str_op(s, ==, + tt_str_op(s, OP_EQ, "transport hagbard 127.0.0.1:5555\n" "transport celine 127.0.0.1:1723 card=no-enemy\n"); @@ -380,7 +380,7 @@ test_pt_configure_proxy(void *arg) for (i = 0 ; i < 5 ; i++) { retval = configure_proxy(mp); /* retval should be zero because proxy hasn't finished configuring yet */ - tt_int_op(retval, ==, 0); + tt_int_op(retval, OP_EQ, 0); /* check the number of registered transports */ tt_assert(smartlist_len(mp->transports) == i+1); /* check that the mp is still waiting for transports */ @@ -390,23 +390,23 @@ test_pt_configure_proxy(void *arg) /* this last configure_proxy() should finalize the proxy configuration. */ retval = configure_proxy(mp); /* retval should be 1 since the proxy finished configuring */ - tt_int_op(retval, ==, 1); + tt_int_op(retval, OP_EQ, 1); /* check the mp state */ tt_assert(mp->conf_state == PT_PROTO_COMPLETED); - tt_int_op(controlevent_n, ==, 5); - tt_int_op(controlevent_event, ==, EVENT_TRANSPORT_LAUNCHED); - tt_int_op(smartlist_len(controlevent_msgs), ==, 5); + tt_int_op(controlevent_n, OP_EQ, 5); + tt_int_op(controlevent_event, OP_EQ, EVENT_TRANSPORT_LAUNCHED); + tt_int_op(smartlist_len(controlevent_msgs), OP_EQ, 5); smartlist_sort_strings(controlevent_msgs); - tt_str_op(smartlist_get(controlevent_msgs, 0), ==, + tt_str_op(smartlist_get(controlevent_msgs, 0), OP_EQ, "650 TRANSPORT_LAUNCHED server mock1 127.0.0.1 5551\r\n"); - tt_str_op(smartlist_get(controlevent_msgs, 1), ==, + tt_str_op(smartlist_get(controlevent_msgs, 1), OP_EQ, "650 TRANSPORT_LAUNCHED server mock2 127.0.0.1 5552\r\n"); - tt_str_op(smartlist_get(controlevent_msgs, 2), ==, + tt_str_op(smartlist_get(controlevent_msgs, 2), OP_EQ, "650 TRANSPORT_LAUNCHED server mock3 127.0.0.1 5553\r\n"); - tt_str_op(smartlist_get(controlevent_msgs, 3), ==, + tt_str_op(smartlist_get(controlevent_msgs, 3), OP_EQ, "650 TRANSPORT_LAUNCHED server mock4 127.0.0.1 5554\r\n"); - tt_str_op(smartlist_get(controlevent_msgs, 4), ==, + tt_str_op(smartlist_get(controlevent_msgs, 4), OP_EQ, "650 TRANSPORT_LAUNCHED server mock5 127.0.0.1 5555\r\n"); { /* check that the transport info were saved properly in the tor state */ @@ -423,8 +423,8 @@ test_pt_configure_proxy(void *arg) NULL, 0, 0); name_of_transport = smartlist_get(transport_info_sl, 0); bindaddr = smartlist_get(transport_info_sl, 1); - tt_str_op(name_of_transport, ==, "mock1"); - tt_str_op(bindaddr, ==, "127.0.0.1:5551"); + tt_str_op(name_of_transport, OP_EQ, "mock1"); + tt_str_op(bindaddr, OP_EQ, "127.0.0.1:5551"); SMARTLIST_FOREACH(transport_info_sl, char *, cp, tor_free(cp)); smartlist_free(transport_info_sl); @@ -470,9 +470,9 @@ test_get_pt_proxy_uri(void *arg) ret = tor_addr_port_lookup(options->Socks4Proxy, &options->Socks4ProxyAddr, &options->Socks4ProxyPort); - tt_int_op(ret, ==, 0); + tt_int_op(ret, OP_EQ, 0); uri = get_pt_proxy_uri(); - tt_str_op(uri, ==, "socks4a://192.0.2.1:1080"); + tt_str_op(uri, OP_EQ, "socks4a://192.0.2.1:1080"); tor_free(uri); tor_free(options->Socks4Proxy); @@ -481,16 +481,16 @@ test_get_pt_proxy_uri(void *arg) ret = tor_addr_port_lookup(options->Socks5Proxy, &options->Socks5ProxyAddr, &options->Socks5ProxyPort); - tt_int_op(ret, ==, 0); + tt_int_op(ret, OP_EQ, 0); uri = get_pt_proxy_uri(); - tt_str_op(uri, ==, "socks5://192.0.2.1:1080"); + tt_str_op(uri, OP_EQ, "socks5://192.0.2.1:1080"); tor_free(uri); /* Test with a SOCKS5 proxy, with username/password. */ options->Socks5ProxyUsername = tor_strdup("hwest"); options->Socks5ProxyPassword = tor_strdup("r34n1m470r"); uri = get_pt_proxy_uri(); - tt_str_op(uri, ==, "socks5://hwest:r34n1m470r@192.0.2.1:1080"); + tt_str_op(uri, OP_EQ, "socks5://hwest:r34n1m470r@192.0.2.1:1080"); tor_free(uri); tor_free(options->Socks5Proxy); tor_free(options->Socks5ProxyUsername); @@ -501,15 +501,15 @@ test_get_pt_proxy_uri(void *arg) ret = tor_addr_port_lookup(options->HTTPSProxy, &options->HTTPSProxyAddr, &options->HTTPSProxyPort); - tt_int_op(ret, ==, 0); + tt_int_op(ret, OP_EQ, 0); uri = get_pt_proxy_uri(); - tt_str_op(uri, ==, "http://192.0.2.1:80"); + tt_str_op(uri, OP_EQ, "http://192.0.2.1:80"); tor_free(uri); /* Test with a HTTPS proxy, with authenticator. */ options->HTTPSProxyAuthenticator = tor_strdup("hwest:r34n1m470r"); uri = get_pt_proxy_uri(); - tt_str_op(uri, ==, "http://hwest:r34n1m470r@192.0.2.1:80"); + tt_str_op(uri, OP_EQ, "http://hwest:r34n1m470r@192.0.2.1:80"); tor_free(uri); tor_free(options->HTTPSProxy); tor_free(options->HTTPSProxyAuthenticator); @@ -519,9 +519,9 @@ test_get_pt_proxy_uri(void *arg) ret = tor_addr_port_lookup(options->Socks4Proxy, &options->Socks4ProxyAddr, &options->Socks4ProxyPort); - tt_int_op(ret, ==, 0); + tt_int_op(ret, OP_EQ, 0); uri = get_pt_proxy_uri(); - tt_str_op(uri, ==, "socks4a://[2001:db8::1]:1080"); + tt_str_op(uri, OP_EQ, "socks4a://[2001:db8::1]:1080"); tor_free(uri); tor_free(options->Socks4Proxy); diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c index 5deb36260f..834dfeface 100644 --- a/src/test/test_relaycell.c +++ b/src/test/test_relaycell.c @@ -87,24 +87,24 @@ test_relaycell_resolved(void *arg) srm_ncalls = mum_ncalls = 0; \ } while (0) #define ASSERT_MARK_CALLED(reason) do { \ - tt_int_op(mum_ncalls, ==, 1); \ - tt_ptr_op(mum_conn, ==, entryconn); \ - tt_int_op(mum_endreason, ==, (reason)); \ + tt_int_op(mum_ncalls, OP_EQ, 1); \ + tt_ptr_op(mum_conn, OP_EQ, entryconn); \ + tt_int_op(mum_endreason, OP_EQ, (reason)); \ } while (0) #define ASSERT_RESOLVED_CALLED(atype, answer, ttl, expires) do { \ - tt_int_op(srm_ncalls, ==, 1); \ - tt_ptr_op(srm_conn, ==, entryconn); \ - tt_int_op(srm_atype, ==, (atype)); \ + tt_int_op(srm_ncalls, OP_EQ, 1); \ + tt_ptr_op(srm_conn, OP_EQ, entryconn); \ + tt_int_op(srm_atype, OP_EQ, (atype)); \ if (answer) { \ - tt_int_op(srm_alen, ==, sizeof(answer)-1); \ - tt_int_op(srm_alen, <, 512); \ - tt_int_op(srm_answer_is_set, ==, 1); \ - tt_mem_op(srm_answer, ==, answer, sizeof(answer)-1); \ + tt_int_op(srm_alen, OP_EQ, sizeof(answer)-1); \ + tt_int_op(srm_alen, OP_LT, 512); \ + tt_int_op(srm_answer_is_set, OP_EQ, 1); \ + tt_mem_op(srm_answer, OP_EQ, answer, sizeof(answer)-1); \ } else { \ - tt_int_op(srm_answer_is_set, ==, 0); \ + tt_int_op(srm_answer_is_set, OP_EQ, 0); \ } \ - tt_int_op(srm_ttl, ==, ttl); \ - tt_int_op(srm_expires, ==, expires); \ + tt_int_op(srm_ttl, OP_EQ, ttl); \ + tt_int_op(srm_expires, OP_EQ, expires); \ } while (0) (void)arg; @@ -130,9 +130,9 @@ test_relaycell_resolved(void *arg) /* Try with connection in non-RESOLVE_WAIT state: cell gets ignored */ MOCK_RESET(); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); - tt_int_op(srm_ncalls, ==, 0); - tt_int_op(mum_ncalls, ==, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(srm_ncalls, OP_EQ, 0); + tt_int_op(mum_ncalls, OP_EQ, 0); /* Now put it in the right state. */ ENTRY_TO_CONN(entryconn)->state = AP_CONN_STATE_RESOLVE_WAIT; @@ -144,7 +144,7 @@ test_relaycell_resolved(void *arg) /* We prefer ipv4, so we should get the first ipv4 answer */ MOCK_RESET(); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x7f\x00\x01\x02", 256, -1); @@ -153,7 +153,7 @@ test_relaycell_resolved(void *arg) MOCK_RESET(); options->ClientDNSRejectInternalAddresses = 1; r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1); @@ -162,7 +162,7 @@ test_relaycell_resolved(void *arg) entryconn->prefer_ipv6_traffic = 1; MOCK_RESET(); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV6, @@ -174,7 +174,7 @@ test_relaycell_resolved(void *arg) MOCK_RESET(); SET_CELL("\x04\x04\x12\x00\x00\x01\x00\x00\x02\x00"); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1); @@ -184,7 +184,7 @@ test_relaycell_resolved(void *arg) MOCK_RESET(); entryconn->ipv4_traffic_ok = 0; r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1); @@ -194,7 +194,7 @@ test_relaycell_resolved(void *arg) entryconn->ipv4_traffic_ok = 1; entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR; r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1); @@ -203,7 +203,7 @@ test_relaycell_resolved(void *arg) MOCK_RESET(); SET_CELL("\x00\x0fwww.example.com\x00\x01\x00\x00"); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_HOSTNAME, "www.example.com", 65536, -1); @@ -213,9 +213,9 @@ test_relaycell_resolved(void *arg) entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE; SET_CELL("\x04\x04\x01\x02\x03\x04"); /* no ttl */ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL); - tt_int_op(srm_ncalls, ==, 0); + tt_int_op(srm_ncalls, OP_EQ, 0); /* error on all addresses private */ MOCK_RESET(); @@ -224,7 +224,7 @@ test_relaycell_resolved(void *arg) /* IPv4: 192.168.1.1, ttl 256 */ "\x04\x04\xc0\xa8\x01\x01\x00\x00\x01\x00"); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, 0, TIME_MAX); @@ -232,7 +232,7 @@ test_relaycell_resolved(void *arg) MOCK_RESET(); SET_CELL("\xf0\x15" "quiet and meaningless" "\x00\x00\x0f\xff"); r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); ASSERT_MARK_CALLED(END_STREAM_REASON_DONE| END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, -1, -1); diff --git a/src/test/test_replay.c b/src/test/test_replay.c index bb8017d261..b1f637a43b 100644 --- a/src/test/test_replay.c +++ b/src/test/test_replay.c @@ -44,7 +44,7 @@ test_replaycache_badalloc(void *arg) /* Negative interval should get adjusted to zero */ r = replaycache_new(600, -300); tt_assert(r != NULL); - tt_int_op(r->scrub_interval,==, 0); + tt_int_op(r->scrub_interval,OP_EQ, 0); replaycache_free(r); /* Negative horizon and negative interval should still fail */ r = replaycache_new(-600, -300); @@ -81,13 +81,13 @@ test_replaycache_miss(void *arg) result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); /* poke the bad-parameter error case too */ result = replaycache_add_and_test_internal(1200, NULL, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); done: if (r) replaycache_free(r); @@ -108,12 +108,12 @@ test_replaycache_hit(void *arg) result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); done: if (r) replaycache_free(r); @@ -134,17 +134,17 @@ test_replaycache_age(void *arg) result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); result = replaycache_add_and_test_internal(3000, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); done: if (r) replaycache_free(r); @@ -166,13 +166,13 @@ test_replaycache_elapsed(void *arg) result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, strlen(test_buffer), &elapsed); - tt_int_op(result,==, 1); - tt_int_op(elapsed,==, 100); + tt_int_op(result,OP_EQ, 1); + tt_int_op(elapsed,OP_EQ, 100); done: if (r) replaycache_free(r); @@ -193,17 +193,17 @@ test_replaycache_noexpire(void *arg) result = replaycache_add_and_test_internal(1200, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(1300, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); result = replaycache_add_and_test_internal(3000, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); done: if (r) replaycache_free(r); @@ -225,12 +225,12 @@ test_replaycache_scrub(void *arg) result = replaycache_add_and_test_internal(100, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); result = replaycache_add_and_test_internal(200, r, test_buffer, strlen(test_buffer), NULL); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); /* * Poke a few replaycache_scrub_if_needed_internal() error cases that @@ -245,7 +245,7 @@ test_replaycache_scrub(void *arg) /* Make sure we hit the aging-out case too */ replaycache_scrub_if_needed_internal(1500, r); /* Assert that we aged it */ - tt_int_op(digestmap_size(r->digests_seen),==, 0); + tt_int_op(digestmap_size(r->digests_seen),OP_EQ, 0); done: if (r) replaycache_free(r); @@ -268,16 +268,16 @@ test_replaycache_future(void *arg) result = replaycache_add_and_test_internal(100, r, test_buffer, strlen(test_buffer), &elapsed); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); /* elapsed should still be 0, since it wasn't written */ - tt_int_op(elapsed,==, 0); + tt_int_op(elapsed,OP_EQ, 0); result = replaycache_add_and_test_internal(200, r, test_buffer, strlen(test_buffer), &elapsed); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); /* elapsed should be the time since the last hit */ - tt_int_op(elapsed,==, 100); + tt_int_op(elapsed,OP_EQ, 100); /* * Now let's turn the clock back to get coverage on the cache entry from the @@ -287,9 +287,9 @@ test_replaycache_future(void *arg) replaycache_add_and_test_internal(150, r, test_buffer, strlen(test_buffer), &elapsed); /* We should still get a hit */ - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); /* ...but it shouldn't let us see a negative elapsed time */ - tt_int_op(elapsed,==, 0); + tt_int_op(elapsed,OP_EQ, 0); done: if (r) replaycache_free(r); @@ -316,18 +316,18 @@ test_replaycache_realtime(void *arg) /* This should miss */ result = replaycache_add_and_test(r, test_buffer, strlen(test_buffer)); - tt_int_op(result,==, 0); + tt_int_op(result,OP_EQ, 0); /* This should hit */ result = replaycache_add_and_test(r, test_buffer, strlen(test_buffer)); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); /* This should hit and return a small elapsed time */ result = replaycache_add_test_and_elapsed(r, test_buffer, strlen(test_buffer), &elapsed); - tt_int_op(result,==, 1); + tt_int_op(result,OP_EQ, 1); tt_assert(elapsed >= 0); tt_assert(elapsed <= 5); diff --git a/src/test/test_routerkeys.c b/src/test/test_routerkeys.c index 652d7d6c52..d8ad59a58b 100644 --- a/src/test/test_routerkeys.c +++ b/src/test/test_routerkeys.c @@ -33,38 +33,38 @@ test_routerkeys_write_fingerprint(void *arg) set_server_identity_key(key); set_client_identity_key(crypto_pk_dup_key(key)); - tt_int_op(0, ==, check_private_dir(ddir, CPD_CREATE, NULL)); - tt_int_op(crypto_pk_cmp_keys(get_server_identity_key(),key),==,0); + tt_int_op(0, OP_EQ, check_private_dir(ddir, CPD_CREATE, NULL)); + tt_int_op(crypto_pk_cmp_keys(get_server_identity_key(),key),OP_EQ,0); /* Write fingerprint file */ - tt_int_op(0, ==, router_write_fingerprint(0)); + tt_int_op(0, OP_EQ, router_write_fingerprint(0)); cp = read_file_to_str(get_fname("write_fingerprint/fingerprint"), 0, NULL); crypto_pk_get_fingerprint(key, fp, 0); tor_asprintf(&cp2, "haflinger %s\n", fp); - tt_str_op(cp, ==, cp2); + tt_str_op(cp, OP_EQ, cp2); tor_free(cp); tor_free(cp2); /* Write hashed-fingerprint file */ - tt_int_op(0, ==, router_write_fingerprint(1)); + tt_int_op(0, OP_EQ, router_write_fingerprint(1)); cp = read_file_to_str(get_fname("write_fingerprint/hashed-fingerprint"), 0, NULL); crypto_pk_get_hashed_fingerprint(key, fp); tor_asprintf(&cp2, "haflinger %s\n", fp); - tt_str_op(cp, ==, cp2); + tt_str_op(cp, OP_EQ, cp2); tor_free(cp); tor_free(cp2); /* Replace outdated file */ write_str_to_file(get_fname("write_fingerprint/hashed-fingerprint"), "junk goes here", 0); - tt_int_op(0, ==, router_write_fingerprint(1)); + tt_int_op(0, OP_EQ, router_write_fingerprint(1)); cp = read_file_to_str(get_fname("write_fingerprint/hashed-fingerprint"), 0, NULL); crypto_pk_get_hashed_fingerprint(key, fp); tor_asprintf(&cp2, "haflinger %s\n", fp); - tt_str_op(cp, ==, cp2); + tt_str_op(cp, OP_EQ, cp2); tor_free(cp); tor_free(cp2); diff --git a/src/test/test_routerset.c b/src/test/test_routerset.c index 81e4dbb1eb..9bd0c125c3 100644 --- a/src/test/test_routerset.c +++ b/src/test/test_routerset.c @@ -25,12 +25,12 @@ NS(test_main)(void *arg) rs = routerset_new(); - tt_ptr_op(rs, !=, NULL); - tt_ptr_op(rs->list, !=, NULL); - tt_ptr_op(rs->names, !=, NULL); - tt_ptr_op(rs->digests, !=, NULL); - tt_ptr_op(rs->policies, !=, NULL); - tt_ptr_op(rs->country_names, !=, NULL); + tt_ptr_op(rs, OP_NE, NULL); + tt_ptr_op(rs->list, OP_NE, NULL); + tt_ptr_op(rs->names, OP_NE, NULL); + tt_ptr_op(rs->digests, OP_NE, NULL); + tt_ptr_op(rs->policies, OP_NE, NULL); + tt_ptr_op(rs->country_names, OP_NE, NULL); done: routerset_free(rs); @@ -53,30 +53,30 @@ NS(test_main)(void *arg) /* strlen(c) < 4 */ input = "xxx"; name = routerset_get_countryname(input); - tt_ptr_op(name, ==, NULL); + tt_ptr_op(name, OP_EQ, NULL); tor_free(name); /* c[0] != '{' */ input = "xxx}"; name = routerset_get_countryname(input); - tt_ptr_op(name, ==, NULL); + tt_ptr_op(name, OP_EQ, NULL); tor_free(name); /* c[3] != '}' */ input = "{xxx"; name = routerset_get_countryname(input); - tt_ptr_op(name, ==, NULL); + tt_ptr_op(name, OP_EQ, NULL); tor_free(name); /* tor_strlower */ input = "{XX}"; name = routerset_get_countryname(input); - tt_str_op(name, ==, "xx"); + tt_str_op(name, OP_EQ, "xx"); tor_free(name); input = "{xx}"; name = routerset_get_countryname(input); - tt_str_op(name, ==, "xx"); + tt_str_op(name, OP_EQ, "xx"); done: tor_free(name); } @@ -103,10 +103,10 @@ NS(test_main)(void *arg) routerset_refresh_countries(set); - tt_ptr_op(set->countries, ==, NULL); - tt_int_op(set->n_countries, ==, 0); - tt_int_op(CALLED(geoip_is_loaded), ==, 1); - tt_int_op(CALLED(geoip_get_n_countries), ==, 0); + tt_ptr_op(set->countries, OP_EQ, NULL); + tt_int_op(set->n_countries, OP_EQ, 0); + tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 0); done: NS_UNMOCK(geoip_is_loaded); @@ -154,12 +154,12 @@ NS(test_main)(void *arg) routerset_refresh_countries(set); - tt_ptr_op(set->countries, !=, NULL); - tt_int_op(set->n_countries, ==, 1); - tt_int_op((unsigned int)(*set->countries), ==, 0); - tt_int_op(CALLED(geoip_is_loaded), ==, 1); - tt_int_op(CALLED(geoip_get_n_countries), ==, 1); - tt_int_op(CALLED(geoip_get_country), ==, 0); + tt_ptr_op(set->countries, OP_NE, NULL); + tt_int_op(set->n_countries, OP_EQ, 1); + tt_int_op((unsigned int)(*set->countries), OP_EQ, 0); + tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_country), OP_EQ, 0); done: NS_UNMOCK(geoip_is_loaded); @@ -218,12 +218,12 @@ NS(test_main)(void *arg) routerset_refresh_countries(set); - tt_ptr_op(set->countries, !=, NULL); - tt_int_op(set->n_countries, ==, 2); - tt_int_op(CALLED(geoip_is_loaded), ==, 1); - tt_int_op(CALLED(geoip_get_n_countries), ==, 1); - tt_int_op(CALLED(geoip_get_country), ==, 1); - tt_int_op((unsigned int)(*set->countries), !=, 0); + tt_ptr_op(set->countries, OP_NE, NULL); + tt_int_op(set->n_countries, OP_EQ, 2); + tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_country), OP_EQ, 1); + tt_int_op((unsigned int)(*set->countries), OP_NE, 0); done: NS_UNMOCK(geoip_is_loaded); @@ -283,12 +283,12 @@ NS(test_main)(void *arg) routerset_refresh_countries(set); - tt_ptr_op(set->countries, !=, NULL); - tt_int_op(set->n_countries, ==, 2); - tt_int_op(CALLED(geoip_is_loaded), ==, 1); - tt_int_op(CALLED(geoip_get_n_countries), ==, 1); - tt_int_op(CALLED(geoip_get_country), ==, 1); - tt_int_op((unsigned int)(*set->countries), ==, 0); + tt_ptr_op(set->countries, OP_NE, NULL); + tt_int_op(set->n_countries, OP_EQ, 2); + tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_country), OP_EQ, 1); + tt_int_op((unsigned int)(*set->countries), OP_EQ, 0); done: NS_UNMOCK(geoip_is_loaded); @@ -340,7 +340,7 @@ NS(test_main)(void *arg) r = routerset_parse(set, s, ""); - tt_int_op(r, ==, -1); + tt_int_op(r, OP_EQ, -1); done: routerset_free(set); @@ -365,8 +365,8 @@ NS(test_main)(void *arg) set = routerset_new(); s = "$0000000000000000000000000000000000000000"; r = routerset_parse(set, s, ""); - tt_int_op(r, ==, 0); - tt_int_op(digestmap_isempty(set->digests), !=, 1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(digestmap_isempty(set->digests), OP_NE, 1); done: routerset_free(set); @@ -390,8 +390,8 @@ NS(test_main)(void *arg) set = routerset_new(); s = "fred"; r = routerset_parse(set, s, ""); - tt_int_op(r, ==, 0); - tt_int_op(strmap_isempty(set->names), !=, 1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(strmap_isempty(set->names), OP_NE, 1); done: routerset_free(set); @@ -415,8 +415,8 @@ NS(test_main)(void *arg) set = routerset_new(); s = "{cc}"; r = routerset_parse(set, s, ""); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(set->country_names), !=, 0); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(set->country_names), OP_NE, 0); done: routerset_free(set); @@ -448,9 +448,9 @@ NS(test_main)(void *arg) set = routerset_new(); s = "*"; r = routerset_parse(set, s, ""); - tt_int_op(r, ==, 0); - tt_int_op(smartlist_len(set->policies), !=, 0); - tt_int_op(CALLED(router_parse_addr_policy_item_from_string), ==, 1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(smartlist_len(set->policies), OP_NE, 0); + tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1); done: routerset_free(set); @@ -489,10 +489,10 @@ NS(test_main)(void *arg) NS_MOCK(smartlist_new); routerset_union(set, NULL); - tt_int_op(CALLED(smartlist_new), ==, 0); + tt_int_op(CALLED(smartlist_new), OP_EQ, 0); routerset_union(set, bad_set); - tt_int_op(CALLED(smartlist_new), ==, 0); + tt_int_op(CALLED(smartlist_new), OP_EQ, 0); done: NS_UNMOCK(smartlist_new); @@ -529,7 +529,7 @@ NS(test_main)(void *arg) smartlist_add(src->list, tor_strdup("{xx}")); routerset_union(tgt, src); - tt_int_op(smartlist_len(tgt->list), !=, 0); + tt_int_op(smartlist_len(tgt->list), OP_NE, 0); done: routerset_free(src); @@ -556,7 +556,7 @@ NS(test_main)(void *arg) is_list = routerset_is_list(set); routerset_free(set); set = NULL; - tt_int_op(is_list, !=, 0); + tt_int_op(is_list, OP_NE, 0); /* len(set->country_names) != 0, len(set->policies) == 0 */ set = routerset_new(); @@ -564,7 +564,7 @@ NS(test_main)(void *arg) is_list = routerset_is_list(set); routerset_free(set); set = NULL; - tt_int_op(is_list, ==, 0); + tt_int_op(is_list, OP_EQ, 0); /* len(set->country_names) == 0, len(set->policies) != 0 */ set = routerset_new(); @@ -573,7 +573,7 @@ NS(test_main)(void *arg) is_list = routerset_is_list(set); routerset_free(set); set = NULL; - tt_int_op(is_list, ==, 0); + tt_int_op(is_list, OP_EQ, 0); /* len(set->country_names) != 0, len(set->policies) != 0 */ set = routerset_new(); @@ -583,7 +583,7 @@ NS(test_main)(void *arg) is_list = routerset_is_list(set); routerset_free(set); set = NULL; - tt_int_op(is_list, ==, 0); + tt_int_op(is_list, OP_EQ, 0); done: ; @@ -605,12 +605,12 @@ NS(test_main)(void *arg) set = NULL; needs_geoip = routerset_needs_geoip(set); - tt_int_op(needs_geoip, ==, 0); + tt_int_op(needs_geoip, OP_EQ, 0); set = routerset_new(); needs_geoip = routerset_needs_geoip(set); routerset_free((routerset_t *)set); - tt_int_op(needs_geoip, ==, 0); + tt_int_op(needs_geoip, OP_EQ, 0); set = NULL; set = routerset_new(); @@ -618,7 +618,7 @@ NS(test_main)(void *arg) needs_geoip = routerset_needs_geoip(set); routerset_free((routerset_t *)set); set = NULL; - tt_int_op(needs_geoip, !=, 0); + tt_int_op(needs_geoip, OP_NE, 0); done: ; @@ -639,20 +639,20 @@ NS(test_main)(void *arg) (void)arg; is_empty = routerset_is_empty(set); - tt_int_op(is_empty, !=, 0); + tt_int_op(is_empty, OP_NE, 0); set = routerset_new(); is_empty = routerset_is_empty(set); routerset_free(set); set = NULL; - tt_int_op(is_empty, !=, 0); + tt_int_op(is_empty, OP_NE, 0); set = routerset_new(); smartlist_add(set->list, tor_strdup("{xx}")); is_empty = routerset_is_empty(set); routerset_free(set); set = NULL; - tt_int_op(is_empty, ==, 0); + tt_int_op(is_empty, OP_EQ, 0); done: ; @@ -675,13 +675,13 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, NULL, NULL, 0); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); set = tor_malloc_zero(sizeof(routerset_t)); set->list = NULL; contains = routerset_contains(set, NULL, 0, NULL, NULL, 0); tor_free(set); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); done: ; @@ -706,7 +706,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, nickname, NULL, 0); routerset_free(set); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); done: ; @@ -733,7 +733,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, nickname, NULL, 0); routerset_free(set); - tt_int_op(contains, ==, 4); + tt_int_op(contains, OP_EQ, 4); done: ; } @@ -757,7 +757,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, "foo", NULL, 0); routerset_free(set); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); done: ; } @@ -782,7 +782,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, NULL, (const char*)foo, 0); routerset_free(set); - tt_int_op(contains, ==, 4); + tt_int_op(contains, OP_EQ, 4); done: ; } @@ -808,7 +808,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, NULL, (const char*)foo, 0); routerset_free(set); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); done: ; } @@ -833,7 +833,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, NULL, NULL, 0); routerset_free(set); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); done: ; } @@ -865,8 +865,8 @@ NS(test_main)(void *arg) contains = routerset_contains(set, addr, 0, NULL, NULL, 0); routerset_free(set); - tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1); - tt_int_op(contains, ==, 3); + tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1); + tt_int_op(contains, OP_EQ, 3); done: ; @@ -879,7 +879,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port, (void)port; (void)policy; CALLED(compare_tor_addr_to_addr_policy)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); return ADDR_POLICY_REJECTED; done: @@ -910,8 +910,8 @@ NS(test_main)(void *arg) contains = routerset_contains(set, addr, 0, NULL, NULL, 0); routerset_free(set); - tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1); - tt_int_op(contains, ==, 0); + tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1); + tt_int_op(contains, OP_EQ, 0); done: ; @@ -924,7 +924,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port, (void)port; (void)policy; CALLED(compare_tor_addr_to_addr_policy)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); return ADDR_POLICY_ACCEPTED; @@ -955,7 +955,7 @@ NS(test_main)(void *arg) contains = routerset_contains(set, NULL, 0, NULL, NULL, 0); routerset_free(set); - tt_int_op(contains, ==, 0); + tt_int_op(contains, OP_EQ, 0); done: ; @@ -968,7 +968,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port, (void)port; (void)policy; CALLED(compare_tor_addr_to_addr_policy)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); return ADDR_POLICY_ACCEPTED; @@ -1003,9 +1003,9 @@ NS(test_main)(void *arg) contains = routerset_contains(set, MOCK_TOR_ADDR_PTR, 0, NULL, NULL, -1); routerset_free(set); - tt_int_op(contains, ==, 0); - tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1); - tt_int_op(CALLED(geoip_get_country_by_addr), ==, 1); + tt_int_op(contains, OP_EQ, 0); + tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_country_by_addr), OP_EQ, 1); done: ; @@ -1018,7 +1018,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port, (void)port; (void)policy; CALLED(compare_tor_addr_to_addr_policy)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); done: return ADDR_POLICY_ACCEPTED; @@ -1028,7 +1028,7 @@ int NS(geoip_get_country_by_addr)(const tor_addr_t *addr) { CALLED(geoip_get_country_by_addr)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); done: return -1; @@ -1062,9 +1062,9 @@ NS(test_main)(void *arg) contains = routerset_contains(set, MOCK_TOR_ADDR_PTR, 0, NULL, NULL, -1); routerset_free(set); - tt_int_op(contains, ==, 2); - tt_int_op(CALLED(compare_tor_addr_to_addr_policy), ==, 1); - tt_int_op(CALLED(geoip_get_country_by_addr), ==, 1); + tt_int_op(contains, OP_EQ, 2); + tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1); + tt_int_op(CALLED(geoip_get_country_by_addr), OP_EQ, 1); done: ; @@ -1077,7 +1077,7 @@ NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port, (void)port; (void)policy; CALLED(compare_tor_addr_to_addr_policy)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); done: return ADDR_POLICY_ACCEPTED; @@ -1087,7 +1087,7 @@ int NS(geoip_get_country_by_addr)(const tor_addr_t *addr) { CALLED(geoip_get_country_by_addr)++; - tt_ptr_op(addr, ==, MOCK_TOR_ADDR_PTR); + tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR); done: return 1; @@ -1111,7 +1111,7 @@ NS(test_main)(void *arg) r = routerset_add_unknown_ccs(setp, 1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); done: routerset_free(set); @@ -1140,8 +1140,8 @@ NS(test_main)(void *arg) r = routerset_add_unknown_ccs(setp, 0); - tt_ptr_op(*setp, !=, NULL); - tt_int_op(r, ==, 0); + tt_ptr_op(*setp, OP_NE, NULL); + tt_int_op(r, OP_EQ, 0); done: if (set != NULL) @@ -1181,9 +1181,9 @@ NS(test_main)(void *arg) r = routerset_add_unknown_ccs(setp, 0); - tt_int_op(r, ==, 1); - tt_int_op(smartlist_contains_string(set->country_names, "??"), ==, 1); - tt_int_op(smartlist_contains_string(set->list, "{??}"), ==, 1); + tt_int_op(r, OP_EQ, 1); + tt_int_op(smartlist_contains_string(set->country_names, "??"), OP_EQ, 1); + tt_int_op(smartlist_contains_string(set->list, "{??}"), OP_EQ, 1); done: if (set != NULL) @@ -1200,7 +1200,7 @@ NS(geoip_get_country)(const char *country) arg_is_qq = !strcmp(country, "??"); arg_is_a1 = !strcmp(country, "A1"); - tt_int_op(arg_is_qq || arg_is_a1, ==, 1); + tt_int_op(arg_is_qq || arg_is_a1, OP_EQ, 1); if (arg_is_qq) return 1; @@ -1214,7 +1214,7 @@ NS(geoip_is_loaded)(sa_family_t family) { CALLED(geoip_is_loaded)++; - tt_int_op(family, ==, AF_INET); + tt_int_op(family, OP_EQ, AF_INET); done: return 0; @@ -1244,9 +1244,9 @@ NS(test_main)(void *arg) r = routerset_add_unknown_ccs(setp, 0); - tt_int_op(r, ==, 1); - tt_int_op(smartlist_contains_string(set->country_names, "a1"), ==, 1); - tt_int_op(smartlist_contains_string(set->list, "{a1}"), ==, 1); + tt_int_op(r, OP_EQ, 1); + tt_int_op(smartlist_contains_string(set->country_names, "a1"), OP_EQ, 1); + tt_int_op(smartlist_contains_string(set->list, "{a1}"), OP_EQ, 1); done: if (set != NULL) @@ -1263,7 +1263,7 @@ NS(geoip_get_country)(const char *country) arg_is_qq = !strcmp(country, "??"); arg_is_a1 = !strcmp(country, "A1"); - tt_int_op(arg_is_qq || arg_is_a1, ==, 1); + tt_int_op(arg_is_qq || arg_is_a1, OP_EQ, 1); if (arg_is_a1) return 1; @@ -1277,7 +1277,7 @@ NS(geoip_is_loaded)(sa_family_t family) { CALLED(geoip_is_loaded)++; - tt_int_op(family, ==, AF_INET); + tt_int_op(family, OP_EQ, AF_INET); done: return 0; @@ -1306,7 +1306,7 @@ NS(test_main)(void *arg) r = routerset_contains_extendinfo(set, &ei); - tt_int_op(r, ==, 4); + tt_int_op(r, OP_EQ, 4); done: routerset_free(set); } @@ -1334,7 +1334,7 @@ NS(test_main)(void *arg) r = routerset_contains_router(set, &ri, country); - tt_int_op(r, ==, 4); + tt_int_op(r, OP_EQ, 4); done: routerset_free(set); } @@ -1367,7 +1367,7 @@ NS(test_main)(void *arg) r = routerset_contains_routerstatus(set, &rs, country); - tt_int_op(r, ==, 4); + tt_int_op(r, OP_EQ, 4); done: routerset_free(set); } @@ -1393,7 +1393,7 @@ NS(test_main)(void *arg) NS(mock_node).rs = NULL; r = routerset_contains_node(set, &NS(mock_node)); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); done: routerset_free(set); @@ -1427,7 +1427,7 @@ NS(test_main)(void *arg) r = routerset_contains_node(set, &NS(mock_node)); - tt_int_op(r, ==, 4); + tt_int_op(r, OP_EQ, 4); done: routerset_free(set); } @@ -1458,7 +1458,7 @@ NS(test_main)(void *arg) r = routerset_contains_node(set, &mock_node); - tt_int_op(r, ==, 4); + tt_int_op(r, OP_EQ, 4); done: routerset_free(set); } @@ -1478,15 +1478,15 @@ NS(test_main)(void *arg) routerset_t *set = NULL; (void)arg; - tt_int_op(smartlist_len(out), ==, 0); + tt_int_op(smartlist_len(out), OP_EQ, 0); routerset_get_all_nodes(out, NULL, NULL, 0); - tt_int_op(smartlist_len(out), ==, 0); + tt_int_op(smartlist_len(out), OP_EQ, 0); set = routerset_new(); smartlist_free(set->list); routerset_get_all_nodes(out, NULL, NULL, 0); - tt_int_op(smartlist_len(out), ==, 0); + tt_int_op(smartlist_len(out), OP_EQ, 0); /* Just recreate list, so we can simply use routerset_free. */ set->list = smartlist_new(); @@ -1527,8 +1527,8 @@ NS(test_main)(void *arg) smartlist_free(out); routerset_free(set); - tt_int_op(out_len, ==, 0); - tt_int_op(CALLED(node_get_by_nickname), ==, 1); + tt_int_op(out_len, OP_EQ, 0); + tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1); done: ; @@ -1538,8 +1538,8 @@ const node_t * NS(node_get_by_nickname)(const char *nickname, int warn_if_unused) { CALLED(node_get_by_nickname)++; - tt_str_op(nickname, ==, NS(mock_nickname)); - tt_int_op(warn_if_unused, ==, 1); + tt_str_op(nickname, OP_EQ, NS(mock_nickname)); + tt_int_op(warn_if_unused, OP_EQ, 1); done: return NULL; @@ -1578,8 +1578,8 @@ NS(test_main)(void *arg) smartlist_free(out); routerset_free(set); - tt_int_op(out_len, ==, 0); - tt_int_op(CALLED(node_get_by_nickname), ==, 1); + tt_int_op(out_len, OP_EQ, 0); + tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1); done: ; @@ -1589,8 +1589,8 @@ const node_t * NS(node_get_by_nickname)(const char *nickname, int warn_if_unused) { CALLED(node_get_by_nickname)++; - tt_str_op(nickname, ==, NS(mock_nickname)); - tt_int_op(warn_if_unused, ==, 1); + tt_str_op(nickname, OP_EQ, NS(mock_nickname)); + tt_int_op(warn_if_unused, OP_EQ, 1); done: return &NS(mock_node); @@ -1629,9 +1629,9 @@ NS(test_main)(void *arg) smartlist_free(out); routerset_free(set); - tt_int_op(out_len, ==, 1); - tt_ptr_op(ent, ==, &NS(mock_node)); - tt_int_op(CALLED(node_get_by_nickname), ==, 1); + tt_int_op(out_len, OP_EQ, 1); + tt_ptr_op(ent, OP_EQ, &NS(mock_node)); + tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1); done: ; @@ -1641,8 +1641,8 @@ const node_t * NS(node_get_by_nickname)(const char *nickname, int warn_if_unused) { CALLED(node_get_by_nickname)++; - tt_str_op(nickname, ==, NS(mock_nickname)); - tt_int_op(warn_if_unused, ==, 1); + tt_str_op(nickname, OP_EQ, NS(mock_nickname)); + tt_int_op(warn_if_unused, OP_EQ, 1); done: return &NS(mock_node); @@ -1678,8 +1678,8 @@ NS(test_main)(void *arg) smartlist_free(out); smartlist_free(NS(mock_smartlist)); - tt_int_op(r, ==, 0); - tt_int_op(CALLED(nodelist_get_list), ==, 1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(CALLED(nodelist_get_list), OP_EQ, 1); done: ; @@ -1727,8 +1727,8 @@ NS(test_main)(void *arg) smartlist_free(out); smartlist_free(NS(mock_smartlist)); - tt_int_op(r, ==, 0); - tt_int_op(CALLED(nodelist_get_list), ==, 1); + tt_int_op(r, OP_EQ, 0); + tt_int_op(CALLED(nodelist_get_list), OP_EQ, 1); done: ; @@ -1766,10 +1766,10 @@ NS(test_main)(void *arg) mock_node.ri = &ri; smartlist_add(list, (void *)&mock_node); - tt_int_op(smartlist_len(list), !=, 0); + tt_int_op(smartlist_len(list), OP_NE, 0); routerset_subtract_nodes(list, set); - tt_int_op(smartlist_len(list), ==, 0); + tt_int_op(smartlist_len(list), OP_EQ, 0); done: routerset_free(set); smartlist_free(list); @@ -1796,10 +1796,10 @@ NS(test_main)(void *arg) mock_node.ri = &ri; smartlist_add(list, (void *)&mock_node); - tt_int_op(smartlist_len(list), !=, 0); + tt_int_op(smartlist_len(list), OP_NE, 0); routerset_subtract_nodes(list, set); - tt_int_op(smartlist_len(list), !=, 0); + tt_int_op(smartlist_len(list), OP_NE, 0); done: routerset_free(set); smartlist_free(list); @@ -1821,19 +1821,19 @@ NS(test_main)(void *arg) set = NULL; s = routerset_to_string(set); - tt_str_op(s, ==, ""); + tt_str_op(s, OP_EQ, ""); tor_free(s); set = routerset_new(); s = routerset_to_string(set); - tt_str_op(s, ==, ""); + tt_str_op(s, OP_EQ, ""); tor_free(s); routerset_free(set); set = NULL; set = routerset_new(); smartlist_add(set->list, tor_strndup("a", 1)); s = routerset_to_string(set); - tt_str_op(s, ==, "a"); + tt_str_op(s, OP_EQ, "a"); tor_free(s); routerset_free(set); set = NULL; @@ -1841,7 +1841,7 @@ NS(test_main)(void *arg) smartlist_add(set->list, tor_strndup("a", 1)); smartlist_add(set->list, tor_strndup("b", 1)); s = routerset_to_string(set); - tt_str_op(s, ==, "a,b"); + tt_str_op(s, OP_EQ, "a,b"); tor_free(s); routerset_free(set); set = NULL; @@ -1868,7 +1868,7 @@ NS(test_main)(void *arg) routerset_free(a); routerset_free(b); - tt_int_op(r, ==, 1); + tt_int_op(r, OP_EQ, 1); done: ; @@ -1893,7 +1893,7 @@ NS(test_main)(void *arg) routerset_free(a); routerset_free(b); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); done: ; } @@ -1920,7 +1920,7 @@ NS(test_main)(void *arg) routerset_free(a); routerset_free(b); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); done: ; } @@ -1946,7 +1946,7 @@ NS(test_main)(void *arg) routerset_free(a); routerset_free(b); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); done: ; } @@ -1972,7 +1972,7 @@ NS(test_main)(void *arg) routerset_free(a); routerset_free(b); - tt_int_op(r, ==, 1); + tt_int_op(r, OP_EQ, 1); done: ; } @@ -1995,7 +1995,7 @@ NS(test_main)(void *arg) routerset_free(NULL); - tt_int_op(CALLED(smartlist_free), ==, 0); + tt_int_op(CALLED(smartlist_free), OP_EQ, 0); done: ; @@ -2031,9 +2031,9 @@ NS(test_main)(void *arg) routerset_free(routerset); - tt_int_op(CALLED(smartlist_free), !=, 0); - tt_int_op(CALLED(strmap_free), !=, 0); - tt_int_op(CALLED(digestmap_free), !=, 0); + tt_int_op(CALLED(smartlist_free), OP_NE, 0); + tt_int_op(CALLED(strmap_free), OP_NE, 0); + tt_int_op(CALLED(digestmap_free), OP_NE, 0); done: ; diff --git a/src/test/test_socks.c b/src/test/test_socks.c index 29faa69fb8..98c5be0119 100644 --- a/src/test/test_socks.c +++ b/src/test/test_socks.c @@ -63,8 +63,8 @@ test_socks_4_unsupported_commands(void *ptr) ADD_DATA(buf, "\x04\x02\x11\x11\x02\x02\x02\x02\x00"); tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == -1); - tt_int_op(4,==, socks->socks_version); - tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */ + tt_int_op(4,OP_EQ, socks->socks_version); + tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */ done: ; @@ -76,49 +76,49 @@ test_socks_4_supported_commands(void *ptr) { SOCKS_TEST_INIT(); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4370 */ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x03\x00"); tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == 1); - tt_int_op(4,==, socks->socks_version); - tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */ - tt_int_op(SOCKS_COMMAND_CONNECT,==, socks->command); - tt_str_op("2.2.2.3",==, socks->address); - tt_int_op(4370,==, socks->port); + tt_int_op(4,OP_EQ, socks->socks_version); + tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */ + tt_int_op(SOCKS_COMMAND_CONNECT,OP_EQ, socks->command); + tt_str_op("2.2.2.3",OP_EQ, socks->address); + tt_int_op(4370,OP_EQ, socks->port); tt_assert(socks->got_auth == 0); tt_assert(! socks->username); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); socks_request_clear(socks); /* SOCKS 4 Send CONNECT [01] to IP address 2.2.2.2:4369 with userid*/ ADD_DATA(buf, "\x04\x01\x11\x12\x02\x02\x02\x04me\x00"); tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == 1); - tt_int_op(4,==, socks->socks_version); - tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */ - tt_int_op(SOCKS_COMMAND_CONNECT,==, socks->command); - tt_str_op("2.2.2.4",==, socks->address); - tt_int_op(4370,==, socks->port); + tt_int_op(4,OP_EQ, socks->socks_version); + tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */ + tt_int_op(SOCKS_COMMAND_CONNECT,OP_EQ, socks->command); + tt_str_op("2.2.2.4",OP_EQ, socks->address); + tt_int_op(4370,OP_EQ, socks->port); tt_assert(socks->got_auth == 1); tt_assert(socks->username); - tt_int_op(2,==, socks->usernamelen); - tt_mem_op("me",==, socks->username, 2); + tt_int_op(2,OP_EQ, socks->usernamelen); + tt_mem_op("me",OP_EQ, socks->username, 2); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); socks_request_clear(socks); /* SOCKS 4a Send RESOLVE [F0] request for torproject.org */ ADD_DATA(buf, "\x04\xF0\x01\x01\x00\x00\x00\x02me\x00torproject.org\x00"); tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == 1); - tt_int_op(4,==, socks->socks_version); - tt_int_op(0,==, socks->replylen); /* XXX: shouldn't tor reply? */ - tt_str_op("torproject.org",==, socks->address); + tt_int_op(4,OP_EQ, socks->socks_version); + tt_int_op(0,OP_EQ, socks->replylen); /* XXX: shouldn't tor reply? */ + tt_str_op("torproject.org",OP_EQ, socks->address); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); done: ; @@ -134,21 +134,21 @@ test_socks_5_unsupported_commands(void *ptr) ADD_DATA(buf, "\x05\x02\x00\x01"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, 0); - tt_int_op(0,==, buf_datalen(buf)); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + get_options()->SafeSocks),OP_EQ, 0); + tt_int_op(0,OP_EQ, buf_datalen(buf)); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); ADD_DATA(buf, "\x05\x02\x00\x01\x02\x02\x02\x01\x01\x01"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, -1); + get_options()->SafeSocks),OP_EQ, -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_COMMAND_NOT_SUPPORTED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_COMMAND_NOT_SUPPORTED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); buf_clear(buf); socks_request_clear(socks); @@ -156,20 +156,20 @@ test_socks_5_unsupported_commands(void *ptr) /* SOCKS 5 Send unsupported UDP_ASSOCIATE [03] command */ ADD_DATA(buf, "\x05\x02\x00\x01"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, 0); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + get_options()->SafeSocks),OP_EQ, 0); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); ADD_DATA(buf, "\x05\x03\x00\x01\x02\x02\x02\x01\x01\x01"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, -1); + get_options()->SafeSocks),OP_EQ, -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_COMMAND_NOT_SUPPORTED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_COMMAND_NOT_SUPPORTED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); done: ; @@ -184,35 +184,35 @@ test_socks_5_supported_commands(void *ptr) /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */ ADD_DATA(buf, "\x05\x01\x00"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, 0); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + get_options()->SafeSocks),OP_EQ, 0); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, 1); - tt_str_op("2.2.2.2",==, socks->address); - tt_int_op(4369,==, socks->port); + get_options()->SafeSocks),OP_EQ, 1); + tt_str_op("2.2.2.2",OP_EQ, socks->address); + tt_int_op(4369,OP_EQ, socks->port); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); socks_request_clear(socks); /* SOCKS 5 Send CONNECT [01] to FQDN torproject.org:4369 */ ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00\x03\x0Etorproject.org\x11\x11"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, 1); + get_options()->SafeSocks),OP_EQ, 1); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); - tt_str_op("torproject.org",==, socks->address); - tt_int_op(4369,==, socks->port); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); + tt_str_op("torproject.org",OP_EQ, socks->address); + tt_int_op(4369,OP_EQ, socks->port); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); socks_request_clear(socks); /* SOCKS 5 Send RESOLVE [F0] request for torproject.org:4369 */ @@ -220,13 +220,13 @@ test_socks_5_supported_commands(void *ptr) ADD_DATA(buf, "\x05\xF0\x00\x03\x0Etorproject.org\x01\x02"); tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == 1); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); - tt_str_op("torproject.org",==, socks->address); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); + tt_str_op("torproject.org",OP_EQ, socks->address); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); socks_request_clear(socks); /* SOCKS 5 Should reject RESOLVE [F0] request for IPv4 address @@ -239,11 +239,11 @@ test_socks_5_supported_commands(void *ptr) tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1) == -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_NOT_ALLOWED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_NOT_ALLOWED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); socks_request_clear(socks); @@ -257,11 +257,11 @@ test_socks_5_supported_commands(void *ptr) tt_assert(fetch_from_buf_socks(buf,socks,get_options()->TestSocks,1) == -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_NOT_ALLOWED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_NOT_ALLOWED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); socks_request_clear(socks); @@ -270,13 +270,13 @@ test_socks_5_supported_commands(void *ptr) ADD_DATA(buf, "\x05\xF1\x00\x01\x02\x02\x02\x05\x01\x03"); tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == 1); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); - tt_str_op("2.2.2.5",==, socks->address); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); + tt_str_op("2.2.2.5",OP_EQ, socks->address); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); done: ; @@ -293,27 +293,27 @@ test_socks_5_no_authenticate(void *ptr) tt_assert(!fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks)); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(SOCKS_NO_AUTH,==, socks->reply[1]); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(SOCKS_NO_AUTH,OP_EQ, socks->reply[1]); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); /*SOCKS 5 Send username/password anyway - pretend to be broken */ ADD_DATA(buf,"\x01\x02\x01\x01\x02\x01\x01"); tt_assert(!fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks)); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(1,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(1,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); - tt_int_op(2,==, socks->usernamelen); - tt_int_op(2,==, socks->passwordlen); + tt_int_op(2,OP_EQ, socks->usernamelen); + tt_int_op(2,OP_EQ, socks->passwordlen); - tt_mem_op("\x01\x01",==, socks->username, 2); - tt_mem_op("\x01\x01",==, socks->password, 2); + tt_mem_op("\x01\x01",OP_EQ, socks->username, 2); + tt_mem_op("\x01\x01",OP_EQ, socks->password, 2); done: ; @@ -331,28 +331,28 @@ test_socks_5_authenticate(void *ptr) tt_assert(!fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks)); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(SOCKS_USER_PASS,==, socks->reply[1]); - tt_int_op(5,==, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(SOCKS_USER_PASS,OP_EQ, socks->reply[1]); + tt_int_op(5,OP_EQ, socks->socks_version); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); /* SOCKS 5 Send username/password */ ADD_DATA(buf, "\x01\x02me\x08mypasswd"); tt_assert(!fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks)); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(1,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(1,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); - tt_int_op(2,==, socks->usernamelen); - tt_int_op(8,==, socks->passwordlen); + tt_int_op(2,OP_EQ, socks->usernamelen); + tt_int_op(8,OP_EQ, socks->passwordlen); - tt_mem_op("me",==, socks->username, 2); - tt_mem_op("mypasswd",==, socks->password, 8); + tt_mem_op("me",OP_EQ, socks->username, 2); + tt_mem_op("mypasswd",OP_EQ, socks->password, 8); done: ; @@ -370,12 +370,12 @@ test_socks_5_authenticate_with_data(void *ptr) tt_assert(!fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks)); - tt_int_op(2,==, socks->replylen); - tt_int_op(5,==, socks->reply[0]); - tt_int_op(SOCKS_USER_PASS,==, socks->reply[1]); - tt_int_op(5,==, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(5,OP_EQ, socks->reply[0]); + tt_int_op(SOCKS_USER_PASS,OP_EQ, socks->reply[1]); + tt_int_op(5,OP_EQ, socks->socks_version); - tt_int_op(0,==, buf_datalen(buf)); + tt_int_op(0,OP_EQ, buf_datalen(buf)); /* SOCKS 5 Send username/password */ /* SOCKS 5 Send CONNECT [01] to IP address 2.2.2.2:4369 */ @@ -383,18 +383,18 @@ test_socks_5_authenticate_with_data(void *ptr) tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == 1); - tt_int_op(5,==, socks->socks_version); - tt_int_op(2,==, socks->replylen); - tt_int_op(1,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + tt_int_op(5,OP_EQ, socks->socks_version); + tt_int_op(2,OP_EQ, socks->replylen); + tt_int_op(1,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); - tt_str_op("2.2.2.2",==, socks->address); - tt_int_op(4369,==, socks->port); + tt_str_op("2.2.2.2",OP_EQ, socks->address); + tt_int_op(4369,OP_EQ, socks->port); - tt_int_op(2,==, socks->usernamelen); - tt_int_op(3,==, socks->passwordlen); - tt_mem_op("me",==, socks->username, 2); - tt_mem_op("you",==, socks->password, 3); + tt_int_op(2,OP_EQ, socks->usernamelen); + tt_int_op(3,OP_EQ, socks->passwordlen); + tt_mem_op("me",OP_EQ, socks->username, 2); + tt_mem_op("you",OP_EQ, socks->password, 3); done: ; @@ -411,10 +411,10 @@ test_socks_5_auth_before_negotiation(void *ptr) tt_assert(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, get_options()->SafeSocks) == -1); - tt_int_op(0,==, socks->socks_version); - tt_int_op(0,==, socks->replylen); - tt_int_op(0,==, socks->reply[0]); - tt_int_op(0,==, socks->reply[1]); + tt_int_op(0,OP_EQ, socks->socks_version); + tt_int_op(0,OP_EQ, socks->replylen); + tt_int_op(0,OP_EQ, socks->reply[0]); + tt_int_op(0,OP_EQ, socks->reply[1]); done: ; @@ -432,14 +432,14 @@ test_socks_5_malformed_commands(void *ptr) */ ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11"); - tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1),==, + tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1),OP_EQ, -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_NOT_ALLOWED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_NOT_ALLOWED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); buf_clear(buf); socks_request_clear(socks); @@ -448,13 +448,13 @@ test_socks_5_malformed_commands(void *ptr) ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\xF1\x00\x03\x0Etorproject.org\x11\x11"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, -1); + get_options()->SafeSocks),OP_EQ, -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); buf_clear(buf); socks_request_clear(socks); @@ -465,13 +465,13 @@ test_socks_5_malformed_commands(void *ptr) ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00\x03\x09\"\"\"\"\".com\x11\x11"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, -1); + get_options()->SafeSocks),OP_EQ, -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_GENERAL_ERROR,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_GENERAL_ERROR,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); buf_clear(buf); socks_request_clear(socks); @@ -480,13 +480,13 @@ test_socks_5_malformed_commands(void *ptr) ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00\x23\x02\x02\x02\x02\x11\x11"); tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, - get_options()->SafeSocks),==, -1); + get_options()->SafeSocks),OP_EQ, -1); - tt_int_op(5,==,socks->socks_version); - tt_int_op(10,==,socks->replylen); - tt_int_op(5,==,socks->reply[0]); - tt_int_op(SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED,==,socks->reply[1]); - tt_int_op(1,==,socks->reply[3]); + tt_int_op(5,OP_EQ,socks->socks_version); + tt_int_op(10,OP_EQ,socks->replylen); + tt_int_op(5,OP_EQ,socks->reply[0]); + tt_int_op(SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED,OP_EQ,socks->reply[1]); + tt_int_op(1,OP_EQ,socks->reply[3]); done: ; diff --git a/src/test/test_status.c b/src/test/test_status.c index 8bc0152ffb..dd825f2753 100644 --- a/src/test/test_status.c +++ b/src/test/test_status.c @@ -86,62 +86,62 @@ NS(test_main)(void *arg) expected = "0:00 hours"; actual = secs_to_uptime(0); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "0:00 hours"; actual = secs_to_uptime(1); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "0:01 hours"; actual = secs_to_uptime(60); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "0:59 hours"; actual = secs_to_uptime(60 * 59); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1:00 hours"; actual = secs_to_uptime(60 * 60); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "23:59 hours"; actual = secs_to_uptime(60 * 60 * 23 + 60 * 59); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1 day 0:00 hours"; actual = secs_to_uptime(60 * 60 * 23 + 60 * 60); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1 day 0:00 hours"; actual = secs_to_uptime(86400 + 1); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1 day 0:01 hours"; actual = secs_to_uptime(86400 + 60); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "10 days 0:00 hours"; actual = secs_to_uptime(86400 * 10); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "10 days 0:00 hours"; actual = secs_to_uptime(864000 + 1); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "10 days 0:01 hours"; actual = secs_to_uptime(864000 + 60); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); done: @@ -167,62 +167,62 @@ NS(test_main)(void *arg) expected = "0 kB"; actual = bytes_to_usage(0); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "0 kB"; actual = bytes_to_usage(1); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1 kB"; actual = bytes_to_usage(1024); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1023 kB"; actual = bytes_to_usage((1 << 20) - 1); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1.00 MB"; actual = bytes_to_usage((1 << 20)); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1.00 MB"; actual = bytes_to_usage((1 << 20) + 5242); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1.01 MB"; actual = bytes_to_usage((1 << 20) + 5243); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1024.00 MB"; actual = bytes_to_usage((1 << 30) - 1); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1.00 GB"; actual = bytes_to_usage((1 << 30)); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1.00 GB"; actual = bytes_to_usage((1 << 30) + 5368709); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "1.01 GB"; actual = bytes_to_usage((1 << 30) + 5368710); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); expected = "10.00 GB"; actual = bytes_to_usage((U64_LITERAL(1) << 30) * 10L); - tt_str_op(actual, ==, expected); + tt_str_op(actual, OP_EQ, expected); tor_free(actual); done: @@ -259,7 +259,7 @@ NS(test_main)(void *arg) expected = -1; actual = log_heartbeat(0); - tt_int_op(actual, ==, expected); + tt_int_op(actual, OP_EQ, expected); done: NS_UNMOCK(tls_get_write_overhead_ratio); @@ -347,8 +347,8 @@ NS(test_main)(void *arg) expected = 0; actual = log_heartbeat(0); - tt_int_op(actual, ==, expected); - tt_int_op(CALLED(logv), ==, 3); + tt_int_op(actual, OP_EQ, expected); + tt_int_op(CALLED(logv), OP_EQ, 3); done: NS_UNMOCK(tls_get_write_overhead_ratio); @@ -411,39 +411,39 @@ NS(logv)(int severity, log_domain_mask_t domain, switch (CALLED(logv)) { case 0: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: It seems like we are not in the cached consensus."); break; case 1: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: Tor's uptime is %s, with %d circuits open. " "I've sent %s and received %s.%s"); - tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */ - tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */ - tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */ + tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */ + tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* hibernating */ break; case 2: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); tt_ptr_op( - strstr(funcname, "rep_hist_log_circuit_handshake_stats"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + strstr(funcname, "rep_hist_log_circuit_handshake_stats"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Circuit handshake stats since last time: %d/%d TAP, %d/%d NTor."); - tt_int_op(va_arg(ap, int), ==, 1); /* handshakes assigned (TAP) */ - tt_int_op(va_arg(ap, int), ==, 1); /* handshakes requested (TAP) */ - tt_int_op(va_arg(ap, int), ==, 1); /* handshakes assigned (NTOR) */ - tt_int_op(va_arg(ap, int), ==, 1); /* handshakes requested (NTOR) */ + tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes assigned (TAP) */ + tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes requested (TAP) */ + tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes assigned (NTOR) */ + tt_int_op(va_arg(ap, int), OP_EQ, 1); /* handshakes requested (NTOR) */ break; default: tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args @@ -502,7 +502,7 @@ NS(test_main)(void *arg) expected = 0; actual = log_heartbeat(0); - tt_int_op(actual, ==, expected); + tt_int_op(actual, OP_EQ, expected); done: NS_UNMOCK(tls_get_write_overhead_ratio); @@ -564,18 +564,18 @@ static void NS(logv)(int severity, log_domain_mask_t domain, const char *funcname, const char *suffix, const char *format, va_list ap) { - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: Tor's uptime is %s, with %d circuits open. " "I've sent %s and received %s.%s"); - tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */ - tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */ - tt_str_op(va_arg(ap, char *), ==, " We are currently hibernating."); + tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */ + tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */ + tt_str_op(va_arg(ap, char *), OP_EQ, " We are currently hibernating."); done: ; @@ -638,8 +638,8 @@ NS(test_main)(void *arg) expected = 0; actual = log_heartbeat(0); - tt_int_op(actual, ==, expected); - tt_int_op(CALLED(logv), ==, 2); + tt_int_op(actual, OP_EQ, expected); + tt_int_op(CALLED(logv), OP_EQ, 2); done: NS_UNMOCK(tls_get_write_overhead_ratio); @@ -711,34 +711,34 @@ NS(logv)(int severity, log_domain_mask_t domain, switch (CALLED(logv)) { case 0: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: Tor's uptime is %s, with %d circuits open. " "I've sent %s and received %s.%s"); - tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */ - tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */ - tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */ + tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */ + tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* hibernating */ break; case 1: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_accounting"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_accounting"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: Accounting enabled. Sent: %s / %s, Received: %s / %s. " "The current accounting interval ends on %s, in %s."); - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_sent */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_max */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_rcvd */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_max */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_sent */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_max */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_rcvd */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_max */ /* format_local_iso_time uses local tz, just check mins and secs. */ - tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"), !=, NULL); /* end_buf */ - tt_str_op(va_arg(ap, char *), ==, "0:01 hours"); /* remaining */ + tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"), OP_NE, NULL); /* end_buf */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0:01 hours"); /* remaining */ break; default: tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args @@ -824,8 +824,8 @@ NS(test_main)(void *arg) expected = 0; actual = log_heartbeat(0); - tt_int_op(actual, ==, expected); - tt_int_op(CALLED(logv), ==, 2); + tt_int_op(actual, OP_EQ, expected); + tt_int_op(CALLED(logv), OP_EQ, 2); done: stats_n_data_bytes_packaged = 0; @@ -893,27 +893,27 @@ NS(logv)(int severity, log_domain_mask_t domain, const char *funcname, switch (CALLED(logv)) { case 0: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: Tor's uptime is %s, with %d circuits open. " "I've sent %s and received %s.%s"); - tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */ - tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */ - tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */ + tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */ + tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* hibernating */ break; case 1: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Average packaged cell fullness: %2.3f%%"); - tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1); + tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, OP_EQ, 1); break; default: tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args @@ -982,8 +982,8 @@ NS(test_main)(void *arg) expected = 0; actual = log_heartbeat(0); - tt_int_op(actual, ==, expected); - tt_int_op(CALLED(logv), ==, 2); + tt_int_op(actual, OP_EQ, expected); + tt_int_op(CALLED(logv), OP_EQ, 2); done: NS_UNMOCK(tls_get_write_overhead_ratio); @@ -1049,26 +1049,26 @@ NS(logv)(int severity, log_domain_mask_t domain, switch (CALLED(logv)) { case 0: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "Heartbeat: Tor's uptime is %s, with %d circuits open. " "I've sent %s and received %s.%s"); - tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */ - tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */ - tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */ - tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0:00 hours"); /* uptime */ + tt_int_op(va_arg(ap, int), OP_EQ, 0); /* count_circuits() */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_sent */ + tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* bw_rcvd */ + tt_str_op(va_arg(ap, char *), OP_EQ, ""); /* hibernating */ break; case 1: - tt_int_op(severity, ==, LOG_NOTICE); - tt_int_op(domain, ==, LD_HEARTBEAT); - tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL); - tt_ptr_op(suffix, ==, NULL); - tt_str_op(format, ==, "TLS write overhead: %.f%%"); - tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1); + tt_int_op(severity, OP_EQ, LOG_NOTICE); + tt_int_op(domain, OP_EQ, LD_HEARTBEAT); + tt_ptr_op(strstr(funcname, "log_heartbeat"), OP_NE, NULL); + tt_ptr_op(suffix, OP_EQ, NULL); + tt_str_op(format, OP_EQ, "TLS write overhead: %.f%%"); + tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, OP_EQ, 1); break; default: tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args diff --git a/src/test/test_util.c b/src/test/test_util.c index 04dfe64f5a..5211701cf1 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -53,20 +53,20 @@ test_util_read_until_eof_impl(const char *fname, size_t file_len, crypto_rand(test_str, file_len); r = write_bytes_to_file(fifo_name, test_str, file_len, 1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); fd = open(fifo_name, O_RDONLY|O_BINARY); - tt_int_op(fd, >=, 0); + tt_int_op(fd, OP_GE, 0); str = read_file_to_str_until_eof(fd, read_limit, &sz); tt_assert(str != NULL); if (read_limit < file_len) - tt_int_op(sz, ==, read_limit); + tt_int_op(sz, OP_EQ, read_limit); else - tt_int_op(sz, ==, file_len); + tt_int_op(sz, OP_EQ, file_len); - tt_mem_op(test_str, ==, str, sz); - tt_int_op(str[sz], ==, '\0'); + tt_mem_op(test_str, OP_EQ, str, sz); + tt_int_op(str[sz], OP_EQ, '\0'); done: unlink(fifo_name); @@ -168,17 +168,17 @@ test_util_write_chunks_to_file(void *arg) // write a known string to a file where the tempfile will be r = write_bytes_to_file(tempname, temp_str, temp_str_len, 1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); // call write_chunks_to_file r = write_chunks_to_file(fname, chunks, 1, 0); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); // assert the file has been written (expected size) str = read_file_to_str(fname, RFTS_BIN, &st); tt_assert(str != NULL); - tt_u64_op((uint64_t)st.st_size, ==, data_str_len); - tt_mem_op(data_str, ==, str, data_str_len); + tt_u64_op((uint64_t)st.st_size, OP_EQ, data_str_len); + tt_mem_op(data_str, OP_EQ, str, data_str_len); tor_free(str); // assert that the tempfile is removed (should not leave artifacts) @@ -187,7 +187,7 @@ test_util_write_chunks_to_file(void *arg) // Remove old testfile for second test r = unlink(fname); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); tor_free(fname); tor_free(tempname); @@ -199,24 +199,24 @@ test_util_write_chunks_to_file(void *arg) // write a known string to a file where the tempfile will be r = write_bytes_to_file(tempname, temp_str, temp_str_len, 1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); // call write_chunks_to_file with no_tempfile = true r = write_chunks_to_file(fname, chunks, 1, 1); - tt_int_op(r, ==, 0); + tt_int_op(r, OP_EQ, 0); // assert the file has been written (expected size) str = read_file_to_str(fname, RFTS_BIN, &st); tt_assert(str != NULL); - tt_u64_op((uint64_t)st.st_size, ==, data_str_len); - tt_mem_op(data_str, ==, str, data_str_len); + tt_u64_op((uint64_t)st.st_size, OP_EQ, data_str_len); + tt_mem_op(data_str, OP_EQ, str, data_str_len); tor_free(str); // assert the tempfile still contains the known string str = read_file_to_str(tempname, RFTS_BIN, &st); tt_assert(str != NULL); - tt_u64_op((uint64_t)st.st_size, ==, temp_str_len); - tt_mem_op(temp_str, ==, str, temp_str_len); + tt_u64_op((uint64_t)st.st_size, OP_EQ, temp_str_len); + tt_mem_op(temp_str, OP_EQ, str, temp_str_len); done: unlink(fname); @@ -229,7 +229,7 @@ test_util_write_chunks_to_file(void *arg) tor_free(temp_str); } -#define _TFE(a, b, f) tt_int_op((a).f, ==, (b).f) +#define _TFE(a, b, f) tt_int_op((a).f, OP_EQ, (b).f) /** test the minimum set of struct tm fields needed for a unique epoch value * this is also the set we use to test tor_timegm */ #define TM_EQUAL(a, b) \ @@ -261,23 +261,23 @@ test_util_time(void *arg) end.tv_sec = 5; end.tv_usec = 5000; - tt_int_op(0L,==, tv_udiff(&start, &end)); + tt_int_op(0L,OP_EQ, tv_udiff(&start, &end)); end.tv_usec = 7000; - tt_int_op(2000L,==, tv_udiff(&start, &end)); + tt_int_op(2000L,OP_EQ, tv_udiff(&start, &end)); end.tv_sec = 6; - tt_int_op(1002000L,==, tv_udiff(&start, &end)); + tt_int_op(1002000L,OP_EQ, tv_udiff(&start, &end)); end.tv_usec = 0; - tt_int_op(995000L,==, tv_udiff(&start, &end)); + tt_int_op(995000L,OP_EQ, tv_udiff(&start, &end)); end.tv_sec = 4; - tt_int_op(-1005000L,==, tv_udiff(&start, &end)); + tt_int_op(-1005000L,OP_EQ, tv_udiff(&start, &end)); /* Test tor_timegm & tor_gmtime_r */ @@ -299,26 +299,26 @@ test_util_time(void *arg) a_time.tm_min = 14; a_time.tm_sec = 55; t_res = 1062224095UL; - tt_int_op(t_res, ==, tor_timegm(&a_time)); + tt_int_op(t_res, OP_EQ, tor_timegm(&a_time)); tor_gmtime_r(&t_res, &b_time); TM_EQUAL(a_time, b_time); a_time.tm_year = 2004-1900; /* Try a leap year, after feb. */ t_res = 1093846495UL; - tt_int_op(t_res, ==, tor_timegm(&a_time)); + tt_int_op(t_res, OP_EQ, tor_timegm(&a_time)); tor_gmtime_r(&t_res, &b_time); TM_EQUAL(a_time, b_time); a_time.tm_mon = 1; /* Try a leap year, in feb. */ a_time.tm_mday = 10; t_res = 1076393695UL; - tt_int_op(t_res, ==, tor_timegm(&a_time)); + tt_int_op(t_res, OP_EQ, tor_timegm(&a_time)); tor_gmtime_r(&t_res, &b_time); TM_EQUAL(a_time, b_time); a_time.tm_mon = 0; t_res = 1073715295UL; - tt_int_op(t_res, ==, tor_timegm(&a_time)); + tt_int_op(t_res, OP_EQ, tor_timegm(&a_time)); tor_gmtime_r(&t_res, &b_time); TM_EQUAL(a_time, b_time); @@ -328,27 +328,27 @@ test_util_time(void *arg) /* Wrong year < 1970 */ a_time.tm_year = 1969-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = -1-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); #if SIZEOF_INT == 4 || SIZEOF_INT == 8 a_time.tm_year = -1*(1 << 16); - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* one of the smallest tm_year values my 64 bit system supports: * t_res = -9223372036854775LL without clamping */ a_time.tm_year = -292275055-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = INT32_MIN; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); #endif #if SIZEOF_INT == 8 a_time.tm_year = -1*(1 << 48); - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* while unlikely, the system's gmtime(_r) could return * a "correct" retrospective gregorian negative year value, @@ -356,25 +356,25 @@ test_util_time(void *arg) * -1*(2^63)/60/60/24*2000/730485 + 1970 = -292277022657 * 730485 is the number of days in two millenia, including leap days */ a_time.tm_year = -292277022657-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = INT64_MIN; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); #endif /* Wrong year >= INT32_MAX - 1900 */ #if SIZEOF_INT == 4 || SIZEOF_INT == 8 a_time.tm_year = INT32_MAX-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = INT32_MAX; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); #endif #if SIZEOF_INT == 8 /* one of the largest tm_year values my 64 bit system supports */ a_time.tm_year = 292278994-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* while unlikely, the system's gmtime(_r) could return * a "correct" proleptic gregorian year value, @@ -382,72 +382,72 @@ test_util_time(void *arg) * (2^63-1)/60/60/24*2000/730485 + 1970 = 292277026596 * 730485 is the number of days in two millenia, including leap days */ a_time.tm_year = 292277026596-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = INT64_MAX-1900; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = INT64_MAX; - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); #endif /* month */ a_time.tm_year = 2007-1900; /* restore valid year */ a_time.tm_mon = 12; /* Wrong month, it's 0-based */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_mon = -1; /* Wrong month */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* day */ a_time.tm_mon = 6; /* Try July */ a_time.tm_mday = 32; /* Wrong day */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_mon = 5; /* Try June */ a_time.tm_mday = 31; /* Wrong day */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = 2008-1900; /* Try a leap year */ a_time.tm_mon = 1; /* in feb. */ a_time.tm_mday = 30; /* Wrong day */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_year = 2011-1900; /* Try a non-leap year */ a_time.tm_mon = 1; /* in feb. */ a_time.tm_mday = 29; /* Wrong day */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_mday = 0; /* Wrong day, it's 1-based (to be different) */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* hour */ a_time.tm_mday = 3; /* restore valid month day */ a_time.tm_hour = 24; /* Wrong hour, it's 0-based */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_hour = -1; /* Wrong hour */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* minute */ a_time.tm_hour = 22; /* restore valid hour */ a_time.tm_min = 60; /* Wrong minute, it's 0-based */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_min = -1; /* Wrong minute */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* second */ a_time.tm_min = 37; /* restore valid minute */ a_time.tm_sec = 61; /* Wrong second: 0-based with leap seconds */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); a_time.tm_sec = -1; /* Wrong second */ - tt_int_op((time_t) -1,==, tor_timegm(&a_time)); + tt_int_op((time_t) -1,OP_EQ, tor_timegm(&a_time)); /* Test tor_gmtime_r out of range */ @@ -534,69 +534,69 @@ test_util_time(void *arg) /* Test {format,parse}_rfc1123_time */ format_rfc1123_time(timestr, 0); - tt_str_op("Thu, 01 Jan 1970 00:00:00 GMT",==, timestr); + tt_str_op("Thu, 01 Jan 1970 00:00:00 GMT",OP_EQ, timestr); format_rfc1123_time(timestr, (time_t)1091580502UL); - tt_str_op("Wed, 04 Aug 2004 00:48:22 GMT",==, timestr); + tt_str_op("Wed, 04 Aug 2004 00:48:22 GMT",OP_EQ, timestr); t_res = 0; i = parse_rfc1123_time(timestr, &t_res); - tt_int_op(0,==, i); - tt_int_op(t_res,==, (time_t)1091580502UL); + tt_int_op(0,OP_EQ, i); + tt_int_op(t_res,OP_EQ, (time_t)1091580502UL); /* The timezone doesn't matter */ t_res = 0; - tt_int_op(0,==, parse_rfc1123_time("Wed, 04 Aug 2004 00:48:22 ZUL", &t_res)); - tt_int_op(t_res,==, (time_t)1091580502UL); - tt_int_op(-1,==, + tt_int_op(0,OP_EQ, parse_rfc1123_time("Wed, 04 Aug 2004 00:48:22 ZUL", &t_res)); + tt_int_op(t_res,OP_EQ, (time_t)1091580502UL); + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, zz Aug 2004 99-99x99 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 32 Mar 2011 00:00:00 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Mar 2011 24:00:00 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Mar 2011 23:60:00 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Mar 2011 23:59:62 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Mar 1969 23:59:59 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Ene 2011 23:59:59 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Mar 2011 23:59:59 GM", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 29 Feb 2011 16:00:00 GMT", &t_res)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, 30 Mar 2011 23:59:61 GMT", &t_res)); /* Test parse_iso_time */ t_res = 0; i = parse_iso_time("", &t_res); - tt_int_op(-1,==, i); + tt_int_op(-1,OP_EQ, i); t_res = 0; i = parse_iso_time("2004-08-32 00:48:22", &t_res); - tt_int_op(-1,==, i); + tt_int_op(-1,OP_EQ, i); t_res = 0; i = parse_iso_time("1969-08-03 00:48:22", &t_res); - tt_int_op(-1,==, i); + tt_int_op(-1,OP_EQ, i); t_res = 0; i = parse_iso_time("2004-08-04 00:48:22", &t_res); - tt_int_op(0,==, i); - tt_int_op(t_res,==, (time_t)1091580502UL); + tt_int_op(0,OP_EQ, i); + tt_int_op(t_res,OP_EQ, (time_t)1091580502UL); t_res = 0; i = parse_iso_time("2004-8-4 0:48:22", &t_res); - tt_int_op(0,==, i); - tt_int_op(t_res,==, (time_t)1091580502UL); - tt_int_op(-1,==, parse_iso_time("2004-08-zz 99-99x99 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("2011-03-32 00:00:00 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("2011-03-30 24:00:00 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("2011-03-30 23:60:00 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("2011-03-30 23:59:62 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("1969-03-30 23:59:59 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("2011-00-30 23:59:59 GMT", &t_res)); - tt_int_op(-1,==, parse_iso_time("2147483647-08-29 14:00:00", &t_res)); - tt_int_op(-1,==, parse_iso_time("2011-03-30 23:59", &t_res)); + tt_int_op(0,OP_EQ, i); + tt_int_op(t_res,OP_EQ, (time_t)1091580502UL); + tt_int_op(-1,OP_EQ, parse_iso_time("2004-08-zz 99-99x99 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-32 00:00:00 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 24:00:00 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 23:60:00 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 23:59:62 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("1969-03-30 23:59:59 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2011-00-30 23:59:59 GMT", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2147483647-08-29 14:00:00", &t_res)); + tt_int_op(-1,OP_EQ, parse_iso_time("2011-03-30 23:59", &t_res)); /* Test tor_gettimeofday */ @@ -609,14 +609,14 @@ test_util_time(void *arg) /* now make sure time works. */ tor_gettimeofday(&end); /* We might've timewarped a little. */ - tt_int_op(tv_udiff(&start, &end), >=, -5000); + tt_int_op(tv_udiff(&start, &end), OP_GE, -5000); /* Test format_iso_time */ tv.tv_sec = (time_t)1326296338; tv.tv_usec = 3060; format_iso_time(timestr, (time_t)tv.tv_sec); - tt_str_op("2012-01-11 15:38:58",==, timestr); + tt_str_op("2012-01-11 15:38:58",OP_EQ, timestr); /* The output of format_local_iso_time will vary by timezone, and setting our timezone for testing purposes would be a nontrivial flaky pain. Skip this test for now. @@ -624,11 +624,11 @@ test_util_time(void *arg) test_streq("2012-01-11 10:38:58", timestr); */ format_iso_time_nospace(timestr, (time_t)tv.tv_sec); - tt_str_op("2012-01-11T15:38:58",==, timestr); - tt_int_op(strlen(timestr),==, ISO_TIME_LEN); + tt_str_op("2012-01-11T15:38:58",OP_EQ, timestr); + tt_int_op(strlen(timestr),OP_EQ, ISO_TIME_LEN); format_iso_time_nospace_usec(timestr, &tv); - tt_str_op("2012-01-11T15:38:58.003060",==, timestr); - tt_int_op(strlen(timestr),==, ISO_TIME_USEC_LEN); + tt_str_op("2012-01-11T15:38:58.003060",OP_EQ, timestr); + tt_int_op(strlen(timestr),OP_EQ, ISO_TIME_USEC_LEN); done: ; @@ -643,72 +643,72 @@ test_util_parse_http_time(void *arg) #define T(s) do { \ format_iso_time(b, tor_timegm(&a_time)); \ - tt_str_op(b, ==, (s)); \ + tt_str_op(b, OP_EQ, (s)); \ b[0]='\0'; \ } while (0) /* Test parse_http_time */ - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("", &a_time)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("Sunday, 32 Aug 2004 00:48:22 GMT", &a_time)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("Sunday, 3 Aug 1869 00:48:22 GMT", &a_time)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("Sunday, 32-Aug-94 00:48:22 GMT", &a_time)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("Sunday, 3-Ago-04 00:48:22", &a_time)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("Sunday, August the third", &a_time)); - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, parse_http_time("Wednesday,,04 Aug 1994 00:48:22 GMT", &a_time)); - tt_int_op(0,==, + tt_int_op(0,OP_EQ, parse_http_time("Wednesday, 04 Aug 1994 00:48:22 GMT", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, + tt_int_op(0,OP_EQ, parse_http_time("Wednesday, 4 Aug 1994 0:48:22 GMT", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, + tt_int_op(0,OP_EQ, parse_http_time("Miercoles, 4 Aug 1994 0:48:22 GMT", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, + tt_int_op(0,OP_EQ, parse_http_time("Wednesday, 04-Aug-94 00:48:22 GMT", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, parse_http_time("Wednesday, 4-Aug-94 0:48:22 GMT", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Wednesday, 4-Aug-94 0:48:22 GMT", &a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, parse_http_time("Miercoles, 4-Aug-94 0:48:22 GMT", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Miercoles, 4-Aug-94 0:48:22 GMT", &a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, parse_http_time("Wed Aug 04 00:48:22 1994", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Wed Aug 04 00:48:22 1994", &a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, parse_http_time("Wed Aug 4 0:48:22 1994", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Wed Aug 4 0:48:22 1994", &a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, parse_http_time("Mie Aug 4 0:48:22 1994", &a_time)); - tt_int_op((time_t)775961302UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Mie Aug 4 0:48:22 1994", &a_time)); + tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,==, parse_http_time("Sun, 1 Jan 2012 00:00:00 GMT", &a_time)); - tt_int_op((time_t)1325376000UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Sun, 1 Jan 2012 00:00:00 GMT", &a_time)); + tt_int_op((time_t)1325376000UL,OP_EQ, tor_timegm(&a_time)); T("2012-01-01 00:00:00"); - tt_int_op(0,==, parse_http_time("Mon, 31 Dec 2012 00:00:00 GMT", &a_time)); - tt_int_op((time_t)1356912000UL,==, tor_timegm(&a_time)); + tt_int_op(0,OP_EQ, parse_http_time("Mon, 31 Dec 2012 00:00:00 GMT", &a_time)); + tt_int_op((time_t)1356912000UL,OP_EQ, tor_timegm(&a_time)); T("2012-12-31 00:00:00"); - tt_int_op(-1,==, parse_http_time("2004-08-zz 99-99x99 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("2011-03-32 00:00:00 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("2011-03-30 24:00:00 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("2011-03-30 23:60:00 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("2011-03-30 23:59:62 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("1969-03-30 23:59:59 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("2011-00-30 23:59:59 GMT", &a_time)); - tt_int_op(-1,==, parse_http_time("2011-03-30 23:59", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2004-08-zz 99-99x99 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2011-03-32 00:00:00 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 24:00:00 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 23:60:00 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 23:59:62 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("1969-03-30 23:59:59 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2011-00-30 23:59:59 GMT", &a_time)); + tt_int_op(-1,OP_EQ, parse_http_time("2011-03-30 23:59", &a_time)); #undef T done: @@ -743,110 +743,110 @@ test_util_config_line(void *arg) str = buf; str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k"); - tt_str_op(v,==, "v"); + tt_str_op(k,OP_EQ, "k"); + tt_str_op(v,OP_EQ, "v"); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "key value with")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "key"); - tt_str_op(v,==, "value with spaces"); + tt_str_op(k,OP_EQ, "key"); + tt_str_op(v,OP_EQ, "value with spaces"); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "keykey")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "keykey"); - tt_str_op(v,==, "val"); + tt_str_op(k,OP_EQ, "keykey"); + tt_str_op(v,OP_EQ, "val"); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "k2\n")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k2"); - tt_str_op(v,==, ""); + tt_str_op(k,OP_EQ, "k2"); + tt_str_op(v,OP_EQ, ""); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "k3 \n")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k3"); - tt_str_op(v,==, ""); + tt_str_op(k,OP_EQ, "k3"); + tt_str_op(v,OP_EQ, ""); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "#comment")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k4"); - tt_str_op(v,==, ""); + tt_str_op(k,OP_EQ, "k4"); + tt_str_op(v,OP_EQ, ""); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "k5#abc")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k5"); - tt_str_op(v,==, ""); + tt_str_op(k,OP_EQ, "k5"); + tt_str_op(v,OP_EQ, ""); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "k6")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k6"); - tt_str_op(v,==, "val"); + tt_str_op(k,OP_EQ, "k6"); + tt_str_op(v,OP_EQ, "val"); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "kseven")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "kseven"); - tt_str_op(v,==, "a quoted \'string"); + tt_str_op(k,OP_EQ, "kseven"); + tt_str_op(v,OP_EQ, "a quoted \'string"); tor_free(k); tor_free(v); tt_assert(!strcmpstart(str, "k8 ")); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k8"); - tt_str_op(v,==, "a quoted\n\"str\\ing\t\x01\x01\x01\""); + tt_str_op(k,OP_EQ, "k8"); + tt_str_op(v,OP_EQ, "a quoted\n\"str\\ing\t\x01\x01\x01\""); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k9"); - tt_str_op(v,==, "a line that spans two lines."); + tt_str_op(k,OP_EQ, "k9"); + tt_str_op(v,OP_EQ, "a line that spans two lines."); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k10"); - tt_str_op(v,==, "more than one continuation"); + tt_str_op(k,OP_EQ, "k10"); + tt_str_op(v,OP_EQ, "more than one continuation"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k11"); - tt_str_op(v,==, "continuation at the start"); + tt_str_op(k,OP_EQ, "k11"); + tt_str_op(v,OP_EQ, "continuation at the start"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k12"); - tt_str_op(v,==, "line with a embedded"); + tt_str_op(k,OP_EQ, "k12"); + tt_str_op(v,OP_EQ, "line with a embedded"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k13"); - tt_str_op(v,==, "continuation at the very start"); + tt_str_op(k,OP_EQ, "k13"); + tt_str_op(v,OP_EQ, "continuation at the very start"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k14"); - tt_str_op(v,==, "a line that has a comment and" ); + tt_str_op(k,OP_EQ, "k14"); + tt_str_op(v,OP_EQ, "a line that has a comment and" ); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k15"); - tt_str_op(v,==, "this should be the next new line"); + tt_str_op(k,OP_EQ, "k15"); + tt_str_op(v,OP_EQ, "this should be the next new line"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k16"); - tt_str_op(v,==, "a line that has a comment and" ); + tt_str_op(k,OP_EQ, "k16"); + tt_str_op(v,OP_EQ, "a line that has a comment and" ); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k17"); - tt_str_op(v,==, "this should be the next new line"); + tt_str_op(k,OP_EQ, "k17"); + tt_str_op(v,OP_EQ, "this should be the next new line"); tor_free(k); tor_free(v); - tt_str_op(str,==, ""); + tt_str_op(str,OP_EQ, ""); done: tor_free(k); @@ -877,30 +877,30 @@ test_util_config_line_quotes(void *arg) str = buf1; str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "kTrailingSpace"); - tt_str_op(v,==, "quoted value"); + tt_str_op(k,OP_EQ, "kTrailingSpace"); + tt_str_op(v,OP_EQ, "quoted value"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); str = buf2; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); str = buf3; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); str = buf4; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); done: @@ -924,16 +924,16 @@ test_util_config_line_comment_character(void *arg) str = buf; str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k1"); - tt_str_op(v,==, "# in quotes"); + tt_str_op(k,OP_EQ, "k1"); + tt_str_op(v,OP_EQ, "# in quotes"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "k2"); - tt_str_op(v,==, "some value"); + tt_str_op(k,OP_EQ, "k2"); + tt_str_op(v,OP_EQ, "some value"); tor_free(k); tor_free(v); - tt_str_op(str,==, "k3 /home/user/myTorNetwork#2\n"); + tt_str_op(str,OP_EQ, "k3 /home/user/myTorNetwork#2\n"); #if 0 str = parse_config_line_from_str(str, &k, &v); @@ -994,91 +994,91 @@ test_util_config_line_escaped_content(void *arg) str = buf1; str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "HexadecimalLower"); - tt_str_op(v,==, "*"); + tt_str_op(k,OP_EQ, "HexadecimalLower"); + tt_str_op(v,OP_EQ, "*"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "HexadecimalUpper"); - tt_str_op(v,==, "*"); + tt_str_op(k,OP_EQ, "HexadecimalUpper"); + tt_str_op(v,OP_EQ, "*"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "HexadecimalUpperX"); - tt_str_op(v,==, "*"); + tt_str_op(k,OP_EQ, "HexadecimalUpperX"); + tt_str_op(v,OP_EQ, "*"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "Octal"); - tt_str_op(v,==, "*"); + tt_str_op(k,OP_EQ, "Octal"); + tt_str_op(v,OP_EQ, "*"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "Newline"); - tt_str_op(v,==, "\n"); + tt_str_op(k,OP_EQ, "Newline"); + tt_str_op(v,OP_EQ, "\n"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "Tab"); - tt_str_op(v,==, "\t"); + tt_str_op(k,OP_EQ, "Tab"); + tt_str_op(v,OP_EQ, "\t"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "CarriageReturn"); - tt_str_op(v,==, "\r"); + tt_str_op(k,OP_EQ, "CarriageReturn"); + tt_str_op(v,OP_EQ, "\r"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "DoubleQuote"); - tt_str_op(v,==, "\""); + tt_str_op(k,OP_EQ, "DoubleQuote"); + tt_str_op(v,OP_EQ, "\""); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "SimpleQuote"); - tt_str_op(v,==, "'"); + tt_str_op(k,OP_EQ, "SimpleQuote"); + tt_str_op(v,OP_EQ, "'"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "Backslash"); - tt_str_op(v,==, "\\"); + tt_str_op(k,OP_EQ, "Backslash"); + tt_str_op(v,OP_EQ, "\\"); tor_free(k); tor_free(v); str = parse_config_line_from_str(str, &k, &v); - tt_str_op(k,==, "Mix"); - tt_str_op(v,==, "This is a \"star\":\t'*'\nAnd second line"); + tt_str_op(k,OP_EQ, "Mix"); + tt_str_op(v,OP_EQ, "This is a \"star\":\t'*'\nAnd second line"); tor_free(k); tor_free(v); - tt_str_op(str,==, ""); + tt_str_op(str,OP_EQ, ""); str = buf2; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); str = buf3; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); str = buf4; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); #if 0 str = buf5; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str, ==, NULL); + tt_ptr_op(str, OP_EQ, NULL); tor_free(k); tor_free(v); #endif str = buf6; str = parse_config_line_from_str(str, &k, &v); - tt_ptr_op(str,==, NULL); + tt_ptr_op(str,OP_EQ, NULL); tor_free(k); tor_free(v); done: @@ -1096,39 +1096,39 @@ test_util_expand_filename(void *arg) setenv("HOME", "/home/itv", 1); /* For "internal test value" */ str = expand_filename(""); - tt_str_op("",==, str); + tt_str_op("",OP_EQ, str); tor_free(str); str = expand_filename("/normal/path"); - tt_str_op("/normal/path",==, str); + tt_str_op("/normal/path",OP_EQ, str); tor_free(str); str = expand_filename("/normal/trailing/path/"); - tt_str_op("/normal/trailing/path/",==, str); + tt_str_op("/normal/trailing/path/",OP_EQ, str); tor_free(str); str = expand_filename("~"); - tt_str_op("/home/itv/",==, str); + tt_str_op("/home/itv/",OP_EQ, str); tor_free(str); str = expand_filename("$HOME/nodice"); - tt_str_op("$HOME/nodice",==, str); + tt_str_op("$HOME/nodice",OP_EQ, str); tor_free(str); str = expand_filename("~/"); - tt_str_op("/home/itv/",==, str); + tt_str_op("/home/itv/",OP_EQ, str); tor_free(str); str = expand_filename("~/foobarqux"); - tt_str_op("/home/itv/foobarqux",==, str); + tt_str_op("/home/itv/foobarqux",OP_EQ, str); tor_free(str); str = expand_filename("~/../../etc/passwd"); - tt_str_op("/home/itv/../../etc/passwd",==, str); + tt_str_op("/home/itv/../../etc/passwd",OP_EQ, str); tor_free(str); str = expand_filename("~/trailing/"); - tt_str_op("/home/itv/trailing/",==, str); + tt_str_op("/home/itv/trailing/",OP_EQ, str); tor_free(str); /* Ideally we'd test ~anotheruser, but that's shady to test (we'd have to somehow inject/fake the get_user_homedir call) */ @@ -1137,15 +1137,15 @@ test_util_expand_filename(void *arg) setenv("HOME", "/home/itv/", 1); str = expand_filename("~"); - tt_str_op("/home/itv/",==, str); + tt_str_op("/home/itv/",OP_EQ, str); tor_free(str); str = expand_filename("~/"); - tt_str_op("/home/itv/",==, str); + tt_str_op("/home/itv/",OP_EQ, str); tor_free(str); str = expand_filename("~/foo"); - tt_str_op("/home/itv/foo",==, str); + tt_str_op("/home/itv/foo",OP_EQ, str); tor_free(str); /* Try with empty $HOME */ @@ -1153,15 +1153,15 @@ test_util_expand_filename(void *arg) setenv("HOME", "", 1); str = expand_filename("~"); - tt_str_op("/",==, str); + tt_str_op("/",OP_EQ, str); tor_free(str); str = expand_filename("~/"); - tt_str_op("/",==, str); + tt_str_op("/",OP_EQ, str); tor_free(str); str = expand_filename("~/foobar"); - tt_str_op("/foobar",==, str); + tt_str_op("/foobar",OP_EQ, str); tor_free(str); /* Try with $HOME unset */ @@ -1169,15 +1169,15 @@ test_util_expand_filename(void *arg) unsetenv("HOME"); str = expand_filename("~"); - tt_str_op("/",==, str); + tt_str_op("/",OP_EQ, str); tor_free(str); str = expand_filename("~/"); - tt_str_op("/",==, str); + tt_str_op("/",OP_EQ, str); tor_free(str); str = expand_filename("~/foobar"); - tt_str_op("/foobar",==, str); + tt_str_op("/foobar",OP_EQ, str); tor_free(str); done: @@ -1195,30 +1195,30 @@ test_util_escape_string_socks(void *arg) (void)arg; escaped_string = tor_escape_str_for_pt_args("This is a backslash: \\",";\\"); tt_assert(escaped_string); - tt_str_op(escaped_string,==, "This is a backslash: \\\\"); + tt_str_op(escaped_string,OP_EQ, "This is a backslash: \\\\"); tor_free(escaped_string); /** Simple semicolon escape. */ escaped_string = tor_escape_str_for_pt_args("First rule:Do not use ;",";\\"); tt_assert(escaped_string); - tt_str_op(escaped_string,==, "First rule:Do not use \\;"); + tt_str_op(escaped_string,OP_EQ, "First rule:Do not use \\;"); tor_free(escaped_string); /** Empty string. */ escaped_string = tor_escape_str_for_pt_args("", ";\\"); tt_assert(escaped_string); - tt_str_op(escaped_string,==, ""); + tt_str_op(escaped_string,OP_EQ, ""); tor_free(escaped_string); /** Escape all characters. */ escaped_string = tor_escape_str_for_pt_args(";\\;\\", ";\\"); tt_assert(escaped_string); - tt_str_op(escaped_string,==, "\\;\\\\\\;\\\\"); + tt_str_op(escaped_string,OP_EQ, "\\;\\\\\\;\\\\"); tor_free(escaped_string); escaped_string = tor_escape_str_for_pt_args(";", ";\\"); tt_assert(escaped_string); - tt_str_op(escaped_string,==, "\\;"); + tt_str_op(escaped_string,OP_EQ, "\\;"); tor_free(escaped_string); done: @@ -1254,152 +1254,152 @@ test_util_strmisc(void *arg) /* Test strl operations */ (void)arg; - tt_int_op(5,==, strlcpy(buf, "Hello", 0)); - tt_int_op(5,==, strlcpy(buf, "Hello", 10)); - tt_str_op(buf,==, "Hello"); - tt_int_op(5,==, strlcpy(buf, "Hello", 6)); - tt_str_op(buf,==, "Hello"); - tt_int_op(5,==, strlcpy(buf, "Hello", 5)); - tt_str_op(buf,==, "Hell"); + tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 0)); + tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 10)); + tt_str_op(buf,OP_EQ, "Hello"); + tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 6)); + tt_str_op(buf,OP_EQ, "Hello"); + tt_int_op(5,OP_EQ, strlcpy(buf, "Hello", 5)); + tt_str_op(buf,OP_EQ, "Hell"); strlcpy(buf, "Hello", sizeof(buf)); - tt_int_op(10,==, strlcat(buf, "Hello", 5)); + tt_int_op(10,OP_EQ, strlcat(buf, "Hello", 5)); /* Test strstrip() */ strlcpy(buf, "Testing 1 2 3", sizeof(buf)); tor_strstrip(buf, ",!"); - tt_str_op(buf,==, "Testing 1 2 3"); + tt_str_op(buf,OP_EQ, "Testing 1 2 3"); strlcpy(buf, "!Testing 1 2 3?", sizeof(buf)); tor_strstrip(buf, "!? "); - tt_str_op(buf,==, "Testing123"); + tt_str_op(buf,OP_EQ, "Testing123"); strlcpy(buf, "!!!Testing 1 2 3??", sizeof(buf)); tor_strstrip(buf, "!? "); - tt_str_op(buf,==, "Testing123"); + tt_str_op(buf,OP_EQ, "Testing123"); /* Test parse_long */ /* Empty/zero input */ - tt_int_op(0L,==, tor_parse_long("",10,0,100,&i,NULL)); - tt_int_op(0,==, i); - tt_int_op(0L,==, tor_parse_long("0",10,0,100,&i,NULL)); - tt_int_op(1,==, i); + tt_int_op(0L,OP_EQ, tor_parse_long("",10,0,100,&i,NULL)); + tt_int_op(0,OP_EQ, i); + tt_int_op(0L,OP_EQ, tor_parse_long("0",10,0,100,&i,NULL)); + tt_int_op(1,OP_EQ, i); /* Normal cases */ - tt_int_op(10L,==, tor_parse_long("10",10,0,100,&i,NULL)); - tt_int_op(1,==, i); - tt_int_op(10L,==, tor_parse_long("10",10,0,10,&i,NULL)); - tt_int_op(1,==, i); - tt_int_op(10L,==, tor_parse_long("10",10,10,100,&i,NULL)); - tt_int_op(1,==, i); - tt_int_op(-50L,==, tor_parse_long("-50",10,-100,100,&i,NULL)); - tt_int_op(1,==, i); - tt_int_op(-50L,==, tor_parse_long("-50",10,-100,0,&i,NULL)); - tt_int_op(1,==, i); - tt_int_op(-50L,==, tor_parse_long("-50",10,-50,0,&i,NULL)); - tt_int_op(1,==, i); + tt_int_op(10L,OP_EQ, tor_parse_long("10",10,0,100,&i,NULL)); + tt_int_op(1,OP_EQ, i); + tt_int_op(10L,OP_EQ, tor_parse_long("10",10,0,10,&i,NULL)); + tt_int_op(1,OP_EQ, i); + tt_int_op(10L,OP_EQ, tor_parse_long("10",10,10,100,&i,NULL)); + tt_int_op(1,OP_EQ, i); + tt_int_op(-50L,OP_EQ, tor_parse_long("-50",10,-100,100,&i,NULL)); + tt_int_op(1,OP_EQ, i); + tt_int_op(-50L,OP_EQ, tor_parse_long("-50",10,-100,0,&i,NULL)); + tt_int_op(1,OP_EQ, i); + tt_int_op(-50L,OP_EQ, tor_parse_long("-50",10,-50,0,&i,NULL)); + tt_int_op(1,OP_EQ, i); /* Extra garbage */ - tt_int_op(0L,==, tor_parse_long("10m",10,0,100,&i,NULL)); - tt_int_op(0,==, i); - tt_int_op(0L,==, tor_parse_long("-50 plus garbage",10,-100,100,&i,NULL)); - tt_int_op(0,==, i); - tt_int_op(10L,==, tor_parse_long("10m",10,0,100,&i,&cp)); - tt_int_op(1,==, i); - tt_str_op(cp,==, "m"); - tt_int_op(-50L,==, tor_parse_long("-50 plus garbage",10,-100,100,&i,&cp)); - tt_int_op(1,==, i); - tt_str_op(cp,==, " plus garbage"); + tt_int_op(0L,OP_EQ, tor_parse_long("10m",10,0,100,&i,NULL)); + tt_int_op(0,OP_EQ, i); + tt_int_op(0L,OP_EQ, tor_parse_long("-50 plus garbage",10,-100,100,&i,NULL)); + tt_int_op(0,OP_EQ, i); + tt_int_op(10L,OP_EQ, tor_parse_long("10m",10,0,100,&i,&cp)); + tt_int_op(1,OP_EQ, i); + tt_str_op(cp,OP_EQ, "m"); + tt_int_op(-50L,OP_EQ, tor_parse_long("-50 plus garbage",10,-100,100,&i,&cp)); + tt_int_op(1,OP_EQ, i); + tt_str_op(cp,OP_EQ, " plus garbage"); /* Out of bounds */ - tt_int_op(0L,==, tor_parse_long("10",10,50,100,&i,NULL)); - tt_int_op(0,==, i); - tt_int_op(0L,==, tor_parse_long("-50",10,0,100,&i,NULL)); - tt_int_op(0,==, i); + tt_int_op(0L,OP_EQ, tor_parse_long("10",10,50,100,&i,NULL)); + tt_int_op(0,OP_EQ, i); + tt_int_op(0L,OP_EQ, tor_parse_long("-50",10,0,100,&i,NULL)); + tt_int_op(0,OP_EQ, i); /* Base different than 10 */ - tt_int_op(2L,==, tor_parse_long("10",2,0,100,NULL,NULL)); - tt_int_op(0L,==, tor_parse_long("2",2,0,100,NULL,NULL)); - tt_int_op(0L,==, tor_parse_long("10",-2,0,100,NULL,NULL)); - tt_int_op(68284L,==, tor_parse_long("10abc",16,0,70000,NULL,NULL)); - tt_int_op(68284L,==, tor_parse_long("10ABC",16,0,70000,NULL,NULL)); - tt_int_op(0,==, tor_parse_long("10ABC",-1,0,70000,&i,NULL)); - tt_int_op(i,==, 0); + tt_int_op(2L,OP_EQ, tor_parse_long("10",2,0,100,NULL,NULL)); + tt_int_op(0L,OP_EQ, tor_parse_long("2",2,0,100,NULL,NULL)); + tt_int_op(0L,OP_EQ, tor_parse_long("10",-2,0,100,NULL,NULL)); + tt_int_op(68284L,OP_EQ, tor_parse_long("10abc",16,0,70000,NULL,NULL)); + tt_int_op(68284L,OP_EQ, tor_parse_long("10ABC",16,0,70000,NULL,NULL)); + tt_int_op(0,OP_EQ, tor_parse_long("10ABC",-1,0,70000,&i,NULL)); + tt_int_op(i,OP_EQ, 0); /* Test parse_ulong */ - tt_int_op(0UL,==, tor_parse_ulong("",10,0,100,NULL,NULL)); - tt_int_op(0UL,==, tor_parse_ulong("0",10,0,100,NULL,NULL)); - tt_int_op(10UL,==, tor_parse_ulong("10",10,0,100,NULL,NULL)); - tt_int_op(0UL,==, tor_parse_ulong("10",10,50,100,NULL,NULL)); - tt_int_op(10UL,==, tor_parse_ulong("10",10,0,10,NULL,NULL)); - tt_int_op(10UL,==, tor_parse_ulong("10",10,10,100,NULL,NULL)); - tt_int_op(0UL,==, tor_parse_ulong("8",8,0,100,NULL,NULL)); - tt_int_op(50UL,==, tor_parse_ulong("50",10,50,100,NULL,NULL)); - tt_int_op(0UL,==, tor_parse_ulong("-50",10,-100,100,NULL,NULL)); - tt_int_op(0UL,==, tor_parse_ulong("50",-1,50,100,&i,NULL)); - tt_int_op(0,==, i); + tt_int_op(0UL,OP_EQ, tor_parse_ulong("",10,0,100,NULL,NULL)); + tt_int_op(0UL,OP_EQ, tor_parse_ulong("0",10,0,100,NULL,NULL)); + tt_int_op(10UL,OP_EQ, tor_parse_ulong("10",10,0,100,NULL,NULL)); + tt_int_op(0UL,OP_EQ, tor_parse_ulong("10",10,50,100,NULL,NULL)); + tt_int_op(10UL,OP_EQ, tor_parse_ulong("10",10,0,10,NULL,NULL)); + tt_int_op(10UL,OP_EQ, tor_parse_ulong("10",10,10,100,NULL,NULL)); + tt_int_op(0UL,OP_EQ, tor_parse_ulong("8",8,0,100,NULL,NULL)); + tt_int_op(50UL,OP_EQ, tor_parse_ulong("50",10,50,100,NULL,NULL)); + tt_int_op(0UL,OP_EQ, tor_parse_ulong("-50",10,-100,100,NULL,NULL)); + tt_int_op(0UL,OP_EQ, tor_parse_ulong("50",-1,50,100,&i,NULL)); + tt_int_op(0,OP_EQ, i); /* Test parse_uint64 */ tt_assert(U64_LITERAL(10) == tor_parse_uint64("10 x",10,0,100, &i, &cp)); - tt_int_op(1,==, i); - tt_str_op(cp,==, " x"); + tt_int_op(1,OP_EQ, i); + tt_str_op(cp,OP_EQ, " x"); tt_assert(U64_LITERAL(12345678901) == tor_parse_uint64("12345678901",10,0,UINT64_MAX, &i, &cp)); - tt_int_op(1,==, i); - tt_str_op(cp,==, ""); + tt_int_op(1,OP_EQ, i); + tt_str_op(cp,OP_EQ, ""); tt_assert(U64_LITERAL(0) == tor_parse_uint64("12345678901",10,500,INT32_MAX, &i, &cp)); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); tt_assert(U64_LITERAL(0) == tor_parse_uint64("123",-1,0,INT32_MAX, &i, &cp)); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); { /* Test parse_double */ double d = tor_parse_double("10", 0, UINT64_MAX,&i,NULL); - tt_int_op(1,==, i); + tt_int_op(1,OP_EQ, i); tt_assert(DBL_TO_U64(d) == 10); d = tor_parse_double("0", 0, UINT64_MAX,&i,NULL); - tt_int_op(1,==, i); + tt_int_op(1,OP_EQ, i); tt_assert(DBL_TO_U64(d) == 0); d = tor_parse_double(" ", 0, UINT64_MAX,&i,NULL); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); d = tor_parse_double(".0a", 0, UINT64_MAX,&i,NULL); - tt_int_op(0,==, i); + tt_int_op(0,OP_EQ, i); d = tor_parse_double(".0a", 0, UINT64_MAX,&i,&cp); - tt_int_op(1,==, i); + tt_int_op(1,OP_EQ, i); d = tor_parse_double("-.0", 0, UINT64_MAX,&i,NULL); - tt_int_op(1,==, i); + tt_int_op(1,OP_EQ, i); tt_assert(DBL_TO_U64(d) == 0); d = tor_parse_double("-10", -100.0, 100.0,&i,NULL); - tt_int_op(1,==, i); - tt_int_op(-10.0,==, d); + tt_int_op(1,OP_EQ, i); + tt_int_op(-10.0,OP_EQ, d); } { /* Test tor_parse_* where we overflow/underflow the underlying type. */ /* This string should overflow 64-bit ints. */ #define TOOBIG "100000000000000000000000000" - tt_int_op(0L,==, tor_parse_long(TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL)); - tt_int_op(i,==, 0); - tt_int_op(0L,==, + tt_int_op(0L,OP_EQ, tor_parse_long(TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL)); + tt_int_op(i,OP_EQ, 0); + tt_int_op(0L,OP_EQ, tor_parse_long("-"TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL)); - tt_int_op(i,==, 0); - tt_int_op(0UL,==, tor_parse_ulong(TOOBIG, 10, 0, ULONG_MAX, &i, NULL)); - tt_int_op(i,==, 0); - tt_u64_op(U64_LITERAL(0), ==, tor_parse_uint64(TOOBIG, 10, + tt_int_op(i,OP_EQ, 0); + tt_int_op(0UL,OP_EQ, tor_parse_ulong(TOOBIG, 10, 0, ULONG_MAX, &i, NULL)); + tt_int_op(i,OP_EQ, 0); + tt_u64_op(U64_LITERAL(0), OP_EQ, tor_parse_uint64(TOOBIG, 10, 0, UINT64_MAX, &i, NULL)); - tt_int_op(i,==, 0); + tt_int_op(i,OP_EQ, 0); } /* Test snprintf */ /* Returning -1 when there's not enough room in the output buffer */ - tt_int_op(-1,==, tor_snprintf(buf, 0, "Foo")); - tt_int_op(-1,==, tor_snprintf(buf, 2, "Foo")); - tt_int_op(-1,==, tor_snprintf(buf, 3, "Foo")); - tt_int_op(-1,!=, tor_snprintf(buf, 4, "Foo")); + tt_int_op(-1,OP_EQ, tor_snprintf(buf, 0, "Foo")); + tt_int_op(-1,OP_EQ, tor_snprintf(buf, 2, "Foo")); + tt_int_op(-1,OP_EQ, tor_snprintf(buf, 3, "Foo")); + tt_int_op(-1,OP_NE, tor_snprintf(buf, 4, "Foo")); /* Always NUL-terminate the output */ tor_snprintf(buf, 5, "abcdef"); - tt_int_op(0,==, buf[4]); + tt_int_op(0,OP_EQ, buf[4]); tor_snprintf(buf, 10, "abcdef"); - tt_int_op(0,==, buf[6]); + tt_int_op(0,OP_EQ, buf[6]); /* uint64 */ tor_snprintf(buf, sizeof(buf), "x!"U64_FORMAT"!x", U64_PRINTF_ARG(U64_LITERAL(12345678901))); - tt_str_op("x!12345678901!x",==, buf); + tt_str_op("x!12345678901!x",OP_EQ, buf); /* Test str{,case}cmpstart */ tt_assert(strcmpstart("abcdef", "abcdef")==0); @@ -1450,31 +1450,31 @@ test_util_strmisc(void *arg) /* Test 'escaped' */ tt_assert(NULL == escaped(NULL)); - tt_str_op("\"\"",==, escaped("")); - tt_str_op("\"abcd\"",==, escaped("abcd")); - tt_str_op("\"\\\\ \\n\\r\\t\\\"\\'\"",==, escaped("\\ \n\r\t\"'")); - tt_str_op("\"unnecessary \\'backslashes\\'\"",==, + tt_str_op("\"\"",OP_EQ, escaped("")); + tt_str_op("\"abcd\"",OP_EQ, escaped("abcd")); + tt_str_op("\"\\\\ \\n\\r\\t\\\"\\'\"",OP_EQ, escaped("\\ \n\r\t\"'")); + tt_str_op("\"unnecessary \\'backslashes\\'\"",OP_EQ, escaped("unnecessary \'backslashes\'")); /* Non-printable characters appear as octal */ - tt_str_op("\"z\\001abc\\277d\"",==, escaped("z\001abc\277d")); - tt_str_op("\"z\\336\\255 ;foo\"",==, escaped("z\xde\xad\x20;foo")); + tt_str_op("\"z\\001abc\\277d\"",OP_EQ, escaped("z\001abc\277d")); + tt_str_op("\"z\\336\\255 ;foo\"",OP_EQ, escaped("z\xde\xad\x20;foo")); /* Test strndup and memdup */ { const char *s = "abcdefghijklmnopqrstuvwxyz"; cp_tmp = tor_strndup(s, 30); - tt_str_op(cp_tmp,==, s); /* same string, */ - tt_ptr_op(cp_tmp,!=,s); /* but different pointers. */ + tt_str_op(cp_tmp,OP_EQ, s); /* same string, */ + tt_ptr_op(cp_tmp,OP_NE,s); /* but different pointers. */ tor_free(cp_tmp); cp_tmp = tor_strndup(s, 5); - tt_str_op(cp_tmp,==, "abcde"); + tt_str_op(cp_tmp,OP_EQ, "abcde"); tor_free(cp_tmp); s = "a\0b\0c\0d\0e\0"; cp_tmp = tor_memdup(s,10); - tt_mem_op(cp_tmp,==, s, 10); /* same ram, */ - tt_ptr_op(cp_tmp,!=,s); /* but different pointers. */ + tt_mem_op(cp_tmp,OP_EQ, s, 10); /* same ram, */ + tt_ptr_op(cp_tmp,OP_NE,s); /* but different pointers. */ tor_free(cp_tmp); } @@ -1484,9 +1484,9 @@ test_util_strmisc(void *arg) cp_tmp[3] = 'D'; tt_assert(!tor_strisnonupper(cp_tmp)); tor_strupper(cp_tmp); - tt_str_op(cp_tmp,==, "ABCDEF"); + tt_str_op(cp_tmp,OP_EQ, "ABCDEF"); tor_strlower(cp_tmp); - tt_str_op(cp_tmp,==, "abcdef"); + tt_str_op(cp_tmp,OP_EQ, "abcdef"); tt_assert(tor_strisnonupper(cp_tmp)); tt_assert(tor_strisprint(cp_tmp)); cp_tmp[3] = 3; @@ -1497,18 +1497,18 @@ test_util_strmisc(void *arg) { const char *haystack = "abcde"; tt_assert(!tor_memmem(haystack, 5, "ef", 2)); - tt_ptr_op(tor_memmem(haystack, 5, "cd", 2),==, haystack + 2); - tt_ptr_op(tor_memmem(haystack, 5, "cde", 3),==, haystack + 2); + tt_ptr_op(tor_memmem(haystack, 5, "cd", 2),OP_EQ, haystack + 2); + tt_ptr_op(tor_memmem(haystack, 5, "cde", 3),OP_EQ, haystack + 2); tt_assert(!tor_memmem(haystack, 4, "cde", 3)); haystack = "ababcad"; - tt_ptr_op(tor_memmem(haystack, 7, "abc", 3),==, haystack + 2); - tt_ptr_op(tor_memmem(haystack, 7, "ad", 2),==, haystack + 5); - tt_ptr_op(tor_memmem(haystack, 7, "cad", 3),==, haystack + 4); + tt_ptr_op(tor_memmem(haystack, 7, "abc", 3),OP_EQ, haystack + 2); + tt_ptr_op(tor_memmem(haystack, 7, "ad", 2),OP_EQ, haystack + 5); + tt_ptr_op(tor_memmem(haystack, 7, "cad", 3),OP_EQ, haystack + 4); tt_assert(!tor_memmem(haystack, 7, "dadad", 5)); tt_assert(!tor_memmem(haystack, 7, "abcdefghij", 10)); /* memstr */ - tt_ptr_op(tor_memstr(haystack, 7, "abc"),==, haystack + 2); - tt_ptr_op(tor_memstr(haystack, 7, "cad"),==, haystack + 4); + tt_ptr_op(tor_memstr(haystack, 7, "abc"),OP_EQ, haystack + 2); + tt_ptr_op(tor_memstr(haystack, 7, "cad"),OP_EQ, haystack + 4); tt_assert(!tor_memstr(haystack, 6, "cad")); tt_assert(!tor_memstr(haystack, 7, "cadd")); tt_assert(!tor_memstr(haystack, 7, "fe")); @@ -1521,42 +1521,42 @@ test_util_strmisc(void *arg) size_t i; for (i = 0; i < sizeof(binary_data); ++i) binary_data[i] = i; - tt_str_op(hex_str(binary_data, 0),==, ""); - tt_str_op(hex_str(binary_data, 1),==, "00"); - tt_str_op(hex_str(binary_data, 17),==, + tt_str_op(hex_str(binary_data, 0),OP_EQ, ""); + tt_str_op(hex_str(binary_data, 1),OP_EQ, "00"); + tt_str_op(hex_str(binary_data, 17),OP_EQ, "000102030405060708090A0B0C0D0E0F10"); - tt_str_op(hex_str(binary_data, 32),==, + tt_str_op(hex_str(binary_data, 32),OP_EQ, "000102030405060708090A0B0C0D0E0F" "101112131415161718191A1B1C1D1E1F"); - tt_str_op(hex_str(binary_data, 34),==, + tt_str_op(hex_str(binary_data, 34),OP_EQ, "000102030405060708090A0B0C0D0E0F" "101112131415161718191A1B1C1D1E1F"); /* Repeat these tests for shorter strings after longer strings have been tried, to make sure we're correctly terminating strings */ - tt_str_op(hex_str(binary_data, 1),==, "00"); - tt_str_op(hex_str(binary_data, 0),==, ""); + tt_str_op(hex_str(binary_data, 1),OP_EQ, "00"); + tt_str_op(hex_str(binary_data, 0),OP_EQ, ""); } /* Test strcmp_opt */ - tt_int_op(strcmp_opt("", "foo"), <, 0); - tt_int_op(strcmp_opt("", ""), ==, 0); - tt_int_op(strcmp_opt("foo", ""), >, 0); + tt_int_op(strcmp_opt("", "foo"), OP_LT, 0); + tt_int_op(strcmp_opt("", ""), OP_EQ, 0); + tt_int_op(strcmp_opt("foo", ""), OP_GT, 0); - tt_int_op(strcmp_opt(NULL, ""), <, 0); - tt_int_op(strcmp_opt(NULL, NULL), ==, 0); - tt_int_op(strcmp_opt("", NULL), >, 0); + tt_int_op(strcmp_opt(NULL, ""), OP_LT, 0); + tt_int_op(strcmp_opt(NULL, NULL), OP_EQ, 0); + tt_int_op(strcmp_opt("", NULL), OP_GT, 0); - tt_int_op(strcmp_opt(NULL, "foo"), <, 0); - tt_int_op(strcmp_opt("foo", NULL), >, 0); + tt_int_op(strcmp_opt(NULL, "foo"), OP_LT, 0); + tt_int_op(strcmp_opt("foo", NULL), OP_GT, 0); /* Test strcmp_len */ - tt_int_op(strcmp_len("foo", "bar", 3), >, 0); - tt_int_op(strcmp_len("foo", "bar", 2), <, 0); /* First len, then lexical */ - tt_int_op(strcmp_len("foo2", "foo1", 4), >, 0); - tt_int_op(strcmp_len("foo2", "foo1", 3), <, 0); /* Really stop at len */ - tt_int_op(strcmp_len("foo2", "foo", 3), ==, 0); /* Really stop at len */ - tt_int_op(strcmp_len("blah", "", 4), >, 0); - tt_int_op(strcmp_len("blah", "", 0), ==, 0); + tt_int_op(strcmp_len("foo", "bar", 3), OP_GT, 0); + tt_int_op(strcmp_len("foo", "bar", 2), OP_LT, 0); /* First len, then lexical */ + tt_int_op(strcmp_len("foo2", "foo1", 4), OP_GT, 0); + tt_int_op(strcmp_len("foo2", "foo1", 3), OP_LT, 0); /* Really stop at len */ + tt_int_op(strcmp_len("foo2", "foo", 3), OP_EQ, 0); /* Really stop at len */ + tt_int_op(strcmp_len("blah", "", 4), OP_GT, 0); + tt_int_op(strcmp_len("blah", "", 0), OP_EQ, 0); done: tor_free(cp_tmp); @@ -1567,34 +1567,34 @@ test_util_pow2(void *arg) { /* Test tor_log2(). */ (void)arg; - tt_int_op(tor_log2(64),==, 6); - tt_int_op(tor_log2(65),==, 6); - tt_int_op(tor_log2(63),==, 5); - tt_int_op(tor_log2(0),==, 0);/* incorrect mathematically, but as specified */ - tt_int_op(tor_log2(1),==, 0); - tt_int_op(tor_log2(2),==, 1); - tt_int_op(tor_log2(3),==, 1); - tt_int_op(tor_log2(4),==, 2); - tt_int_op(tor_log2(5),==, 2); - tt_int_op(tor_log2(U64_LITERAL(40000000000000000)),==, 55); - tt_int_op(tor_log2(UINT64_MAX),==, 63); + tt_int_op(tor_log2(64),OP_EQ, 6); + tt_int_op(tor_log2(65),OP_EQ, 6); + tt_int_op(tor_log2(63),OP_EQ, 5); + tt_int_op(tor_log2(0),OP_EQ, 0);/* incorrect mathematically, but as specified */ + tt_int_op(tor_log2(1),OP_EQ, 0); + tt_int_op(tor_log2(2),OP_EQ, 1); + tt_int_op(tor_log2(3),OP_EQ, 1); + tt_int_op(tor_log2(4),OP_EQ, 2); + tt_int_op(tor_log2(5),OP_EQ, 2); + tt_int_op(tor_log2(U64_LITERAL(40000000000000000)),OP_EQ, 55); + tt_int_op(tor_log2(UINT64_MAX),OP_EQ, 63); /* Test round_to_power_of_2 */ - tt_u64_op(round_to_power_of_2(120), ==, 128); - tt_u64_op(round_to_power_of_2(128), ==, 128); - tt_u64_op(round_to_power_of_2(130), ==, 128); - tt_u64_op(round_to_power_of_2(U64_LITERAL(40000000000000000)), ==, + tt_u64_op(round_to_power_of_2(120), OP_EQ, 128); + tt_u64_op(round_to_power_of_2(128), OP_EQ, 128); + tt_u64_op(round_to_power_of_2(130), OP_EQ, 128); + tt_u64_op(round_to_power_of_2(U64_LITERAL(40000000000000000)), OP_EQ, U64_LITERAL(1)<<55); - tt_u64_op(round_to_power_of_2(U64_LITERAL(0xffffffffffffffff)), ==, + tt_u64_op(round_to_power_of_2(U64_LITERAL(0xffffffffffffffff)), OP_EQ, U64_LITERAL(1)<<63); - tt_u64_op(round_to_power_of_2(0), ==, 1); - tt_u64_op(round_to_power_of_2(1), ==, 1); - tt_u64_op(round_to_power_of_2(2), ==, 2); - tt_u64_op(round_to_power_of_2(3), ==, 2); - tt_u64_op(round_to_power_of_2(4), ==, 4); - tt_u64_op(round_to_power_of_2(5), ==, 4); - tt_u64_op(round_to_power_of_2(6), ==, 4); - tt_u64_op(round_to_power_of_2(7), ==, 8); + tt_u64_op(round_to_power_of_2(0), OP_EQ, 1); + tt_u64_op(round_to_power_of_2(1), OP_EQ, 1); + tt_u64_op(round_to_power_of_2(2), OP_EQ, 2); + tt_u64_op(round_to_power_of_2(3), OP_EQ, 2); + tt_u64_op(round_to_power_of_2(4), OP_EQ, 4); + tt_u64_op(round_to_power_of_2(5), OP_EQ, 4); + tt_u64_op(round_to_power_of_2(6), OP_EQ, 4); + tt_u64_op(round_to_power_of_2(7), OP_EQ, 8); done: ; @@ -1758,8 +1758,8 @@ test_util_gzip(void *arg) tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1, GZIP_METHOD, 1, LOG_INFO)); tt_assert(buf3); - tt_int_op(strlen(buf1) + 1,==, len2); - tt_str_op(buf1,==, buf3); + tt_int_op(strlen(buf1) + 1,OP_EQ, len2); + tt_str_op(buf1,OP_EQ, buf3); tor_free(buf2); tor_free(buf3); @@ -1773,8 +1773,8 @@ test_util_gzip(void *arg) tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1, ZLIB_METHOD, 1, LOG_INFO)); tt_assert(buf3); - tt_int_op(strlen(buf1) + 1,==, len2); - tt_str_op(buf1,==, buf3); + tt_int_op(strlen(buf1) + 1,OP_EQ, len2); + tt_str_op(buf1,OP_EQ, buf3); /* Check whether we can uncompress concatenated, compressed strings. */ tor_free(buf3); @@ -1782,8 +1782,8 @@ test_util_gzip(void *arg) memcpy(buf2+len1, buf2, len1); tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf2, len1*2, ZLIB_METHOD, 1, LOG_INFO)); - tt_int_op((strlen(buf1)+1)*2,==, len2); - tt_mem_op(buf3,==, + tt_int_op((strlen(buf1)+1)*2,OP_EQ, len2); + tt_mem_op(buf3,OP_EQ, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0", (strlen(buf1)+1)*2); @@ -1823,20 +1823,20 @@ test_util_gzip(void *arg) len2 = 21; tt_assert(tor_zlib_process(state, &cp1, &len1, &ccp2, &len2, 0) == TOR_ZLIB_OK); - tt_int_op(0,==, len2); /* Make sure we compressed it all. */ + tt_int_op(0,OP_EQ, len2); /* Make sure we compressed it all. */ tt_assert(cp1 > buf1); len2 = 0; cp2 = cp1; tt_assert(tor_zlib_process(state, &cp1, &len1, &ccp2, &len2, 1) == TOR_ZLIB_DONE); - tt_int_op(0,==, len2); + tt_int_op(0,OP_EQ, len2); tt_assert(cp1 > cp2); /* Make sure we really added something. */ tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf1, 1024-len1, ZLIB_METHOD, 1, LOG_WARN)); - tt_str_op(buf3,==,"ABCDEFGHIJABCDEFGHIJ"); /*Make sure it compressed right.*/ - tt_int_op(21,==, len2); + tt_str_op(buf3,OP_EQ,"ABCDEFGHIJABCDEFGHIJ"); /*Make sure it compressed right.*/ + tt_int_op(21,OP_EQ, len2); done: if (state) @@ -1867,25 +1867,25 @@ test_util_mmap(void *arg) mapping = tor_mmap_file(fname1); tt_assert(mapping); - tt_int_op(mapping->size,==, strlen("Short file.")); - tt_str_op(mapping->data,==, "Short file."); + tt_int_op(mapping->size,OP_EQ, strlen("Short file.")); + tt_str_op(mapping->data,OP_EQ, "Short file."); #ifdef _WIN32 - tt_int_op(0, ==, tor_munmap_file(mapping)); + tt_int_op(0, OP_EQ, tor_munmap_file(mapping)); mapping = NULL; tt_assert(unlink(fname1) == 0); #else /* make sure we can unlink. */ tt_assert(unlink(fname1) == 0); - tt_str_op(mapping->data,==, "Short file."); - tt_int_op(0, ==, tor_munmap_file(mapping)); + tt_str_op(mapping->data,OP_EQ, "Short file."); + tt_int_op(0, OP_EQ, tor_munmap_file(mapping)); mapping = NULL; #endif /* Now a zero-length file. */ write_str_to_file(fname1, "", 1); mapping = tor_mmap_file(fname1); - tt_ptr_op(mapping,==, NULL); - tt_int_op(ERANGE,==, errno); + tt_ptr_op(mapping,OP_EQ, NULL); + tt_int_op(ERANGE,OP_EQ, errno); unlink(fname1); /* Make sure that we fail to map a no-longer-existent file. */ @@ -1896,18 +1896,18 @@ test_util_mmap(void *arg) write_bytes_to_file(fname2, buf, buflen, 1); mapping = tor_mmap_file(fname2); tt_assert(mapping); - tt_int_op(mapping->size,==, buflen); - tt_mem_op(mapping->data,==, buf, buflen); - tt_int_op(0, ==, tor_munmap_file(mapping)); + tt_int_op(mapping->size,OP_EQ, buflen); + tt_mem_op(mapping->data,OP_EQ, buf, buflen); + tt_int_op(0, OP_EQ, tor_munmap_file(mapping)); mapping = NULL; /* Now try a big aligned file. */ write_bytes_to_file(fname3, buf, 16384, 1); mapping = tor_mmap_file(fname3); tt_assert(mapping); - tt_int_op(mapping->size,==, 16384); - tt_mem_op(mapping->data,==, buf, 16384); - tt_int_op(0, ==, tor_munmap_file(mapping)); + tt_int_op(mapping->size,OP_EQ, 16384); + tt_mem_op(mapping->data,OP_EQ, buf, 16384); + tt_int_op(0, OP_EQ, tor_munmap_file(mapping)); mapping = NULL; done: @@ -1934,9 +1934,9 @@ test_util_control_formats(void *arg) (void)arg; sz = read_escaped_data(inp, strlen(inp), &out); - tt_str_op(out,==, + tt_str_op(out,OP_EQ, ".This is a test\nof the emergency \n.system.\n\rZ.\n"); - tt_int_op(sz,==, strlen(out)); + tt_int_op(sz,OP_EQ, strlen(out)); done: tor_free(out); @@ -1968,334 +1968,334 @@ test_util_sscanf(void *arg) /* Simple tests (malformed patterns, literal matching, ...) */ (void)arg; - tt_int_op(-1,==, tor_sscanf("123", "%i", &r)); /* %i is not supported */ - tt_int_op(-1,==, + tt_int_op(-1,OP_EQ, tor_sscanf("123", "%i", &r)); /* %i is not supported */ + tt_int_op(-1,OP_EQ, tor_sscanf("wrong", "%5c", s1)); /* %c cannot have a number. */ - tt_int_op(-1,==, tor_sscanf("hello", "%s", s1)); /* %s needs a number. */ - tt_int_op(-1,==, tor_sscanf("prettylongstring", "%999999s", s1)); + tt_int_op(-1,OP_EQ, tor_sscanf("hello", "%s", s1)); /* %s needs a number. */ + tt_int_op(-1,OP_EQ, tor_sscanf("prettylongstring", "%999999s", s1)); #if 0 /* GCC thinks these two are illegal. */ test_eq(-1, tor_sscanf("prettylongstring", "%0s", s1)); test_eq(0, tor_sscanf("prettylongstring", "%10s", NULL)); #endif /* No '%'-strings: always "success" */ - tt_int_op(0,==, tor_sscanf("hello world", "hello world")); - tt_int_op(0,==, tor_sscanf("hello world", "good bye")); + tt_int_op(0,OP_EQ, tor_sscanf("hello world", "hello world")); + tt_int_op(0,OP_EQ, tor_sscanf("hello world", "good bye")); /* Excess data */ - tt_int_op(0,==, + tt_int_op(0,OP_EQ, tor_sscanf("hello 3", "%u", &u1)); /* have to match the start */ - tt_int_op(0,==, tor_sscanf(" 3 hello", "%u", &u1)); - tt_int_op(0,==, + tt_int_op(0,OP_EQ, tor_sscanf(" 3 hello", "%u", &u1)); + tt_int_op(0,OP_EQ, tor_sscanf(" 3 hello", "%2u", &u1)); /* not even in this case */ - tt_int_op(1,==, + tt_int_op(1,OP_EQ, tor_sscanf("3 hello", "%u", &u1)); /* but trailing is alright */ /* Numbers (ie. %u) */ - tt_int_op(0,==, + tt_int_op(0,OP_EQ, tor_sscanf("hello world 3", "hello worlb %u", &u1)); /* d vs b */ - tt_int_op(1,==, tor_sscanf("12345", "%u", &u1)); - tt_int_op(12345u,==, u1); - tt_int_op(1,==, tor_sscanf("12346 ", "%u", &u1)); - tt_int_op(12346u,==, u1); - tt_int_op(0,==, tor_sscanf(" 12347", "%u", &u1)); - tt_int_op(1,==, tor_sscanf(" 12348", " %u", &u1)); - tt_int_op(12348u,==, u1); - tt_int_op(1,==, tor_sscanf("0", "%u", &u1)); - tt_int_op(0u,==, u1); - tt_int_op(1,==, tor_sscanf("0000", "%u", &u2)); - tt_int_op(0u,==, u2); - tt_int_op(0,==, tor_sscanf("", "%u", &u1)); /* absent number */ - tt_int_op(0,==, tor_sscanf("A", "%u", &u1)); /* bogus number */ - tt_int_op(0,==, tor_sscanf("-1", "%u", &u1)); /* negative number */ + tt_int_op(1,OP_EQ, tor_sscanf("12345", "%u", &u1)); + tt_int_op(12345u,OP_EQ, u1); + tt_int_op(1,OP_EQ, tor_sscanf("12346 ", "%u", &u1)); + tt_int_op(12346u,OP_EQ, u1); + tt_int_op(0,OP_EQ, tor_sscanf(" 12347", "%u", &u1)); + tt_int_op(1,OP_EQ, tor_sscanf(" 12348", " %u", &u1)); + tt_int_op(12348u,OP_EQ, u1); + tt_int_op(1,OP_EQ, tor_sscanf("0", "%u", &u1)); + tt_int_op(0u,OP_EQ, u1); + tt_int_op(1,OP_EQ, tor_sscanf("0000", "%u", &u2)); + tt_int_op(0u,OP_EQ, u2); + tt_int_op(0,OP_EQ, tor_sscanf("", "%u", &u1)); /* absent number */ + tt_int_op(0,OP_EQ, tor_sscanf("A", "%u", &u1)); /* bogus number */ + tt_int_op(0,OP_EQ, tor_sscanf("-1", "%u", &u1)); /* negative number */ /* Numbers with size (eg. %2u) */ - tt_int_op(0,==, tor_sscanf("-1", "%2u", &u1)); - tt_int_op(2,==, tor_sscanf("123456", "%2u%u", &u1, &u2)); - tt_int_op(12u,==, u1); - tt_int_op(3456u,==, u2); - tt_int_op(1,==, tor_sscanf("123456", "%8u", &u1)); - tt_int_op(123456u,==, u1); - tt_int_op(1,==, tor_sscanf("123457 ", "%8u", &u1)); - tt_int_op(123457u,==, u1); - tt_int_op(0,==, tor_sscanf(" 123456", "%8u", &u1)); - tt_int_op(3,==, tor_sscanf("!12:3:456", "!%2u:%2u:%3u", &u1, &u2, &u3)); - tt_int_op(12u,==, u1); - tt_int_op(3u,==, u2); - tt_int_op(456u,==, u3); - tt_int_op(3,==, + tt_int_op(0,OP_EQ, tor_sscanf("-1", "%2u", &u1)); + tt_int_op(2,OP_EQ, tor_sscanf("123456", "%2u%u", &u1, &u2)); + tt_int_op(12u,OP_EQ, u1); + tt_int_op(3456u,OP_EQ, u2); + tt_int_op(1,OP_EQ, tor_sscanf("123456", "%8u", &u1)); + tt_int_op(123456u,OP_EQ, u1); + tt_int_op(1,OP_EQ, tor_sscanf("123457 ", "%8u", &u1)); + tt_int_op(123457u,OP_EQ, u1); + tt_int_op(0,OP_EQ, tor_sscanf(" 123456", "%8u", &u1)); + tt_int_op(3,OP_EQ, tor_sscanf("!12:3:456", "!%2u:%2u:%3u", &u1, &u2, &u3)); + tt_int_op(12u,OP_EQ, u1); + tt_int_op(3u,OP_EQ, u2); + tt_int_op(456u,OP_EQ, u3); + tt_int_op(3,OP_EQ, tor_sscanf("67:8:099", "%2u:%2u:%3u", &u1, &u2, &u3)); /* 0s */ - tt_int_op(67u,==, u1); - tt_int_op(8u,==, u2); - tt_int_op(99u,==, u3); + tt_int_op(67u,OP_EQ, u1); + tt_int_op(8u,OP_EQ, u2); + tt_int_op(99u,OP_EQ, u3); /* %u does not match space.*/ - tt_int_op(2,==, tor_sscanf("12:3: 45", "%2u:%2u:%3u", &u1, &u2, &u3)); - tt_int_op(12u,==, u1); - tt_int_op(3u,==, u2); + tt_int_op(2,OP_EQ, tor_sscanf("12:3: 45", "%2u:%2u:%3u", &u1, &u2, &u3)); + tt_int_op(12u,OP_EQ, u1); + tt_int_op(3u,OP_EQ, u2); /* %u does not match negative numbers. */ - tt_int_op(2,==, tor_sscanf("67:8:-9", "%2u:%2u:%3u", &u1, &u2, &u3)); - tt_int_op(67u,==, u1); - tt_int_op(8u,==, u2); + tt_int_op(2,OP_EQ, tor_sscanf("67:8:-9", "%2u:%2u:%3u", &u1, &u2, &u3)); + tt_int_op(67u,OP_EQ, u1); + tt_int_op(8u,OP_EQ, u2); /* Arbitrary amounts of 0-padding are okay */ - tt_int_op(3,==, tor_sscanf("12:03:000000000000000099", "%2u:%2u:%u", + tt_int_op(3,OP_EQ, tor_sscanf("12:03:000000000000000099", "%2u:%2u:%u", &u1, &u2, &u3)); - tt_int_op(12u,==, u1); - tt_int_op(3u,==, u2); - tt_int_op(99u,==, u3); + tt_int_op(12u,OP_EQ, u1); + tt_int_op(3u,OP_EQ, u2); + tt_int_op(99u,OP_EQ, u3); /* Hex (ie. %x) */ - tt_int_op(3,==, tor_sscanf("1234 02aBcdEf ff", "%x %x %x", &u1, &u2, &u3)); - tt_int_op(0x1234,==, u1); - tt_int_op(0x2ABCDEF,==, u2); - tt_int_op(0xFF,==, u3); + tt_int_op(3,OP_EQ, tor_sscanf("1234 02aBcdEf ff", "%x %x %x", &u1, &u2, &u3)); + tt_int_op(0x1234,OP_EQ, u1); + tt_int_op(0x2ABCDEF,OP_EQ, u2); + tt_int_op(0xFF,OP_EQ, u3); /* Width works on %x */ - tt_int_op(3,==, tor_sscanf("f00dcafe444", "%4x%4x%u", &u1, &u2, &u3)); - tt_int_op(0xf00d,==, u1); - tt_int_op(0xcafe,==, u2); - tt_int_op(444,==, u3); + tt_int_op(3,OP_EQ, tor_sscanf("f00dcafe444", "%4x%4x%u", &u1, &u2, &u3)); + tt_int_op(0xf00d,OP_EQ, u1); + tt_int_op(0xcafe,OP_EQ, u2); + tt_int_op(444,OP_EQ, u3); /* Literal '%' (ie. '%%') */ - tt_int_op(1,==, tor_sscanf("99% fresh", "%3u%% fresh", &u1)); - tt_int_op(99,==, u1); - tt_int_op(0,==, tor_sscanf("99 fresh", "%% %3u %s", &u1, s1)); - tt_int_op(1,==, tor_sscanf("99 fresh", "%3u%% %s", &u1, s1)); - tt_int_op(2,==, tor_sscanf("99 fresh", "%3u %5s %%", &u1, s1)); - tt_int_op(99,==, u1); - tt_str_op(s1,==, "fresh"); - tt_int_op(1,==, tor_sscanf("% boo", "%% %3s", s1)); - tt_str_op("boo",==, s1); + tt_int_op(1,OP_EQ, tor_sscanf("99% fresh", "%3u%% fresh", &u1)); + tt_int_op(99,OP_EQ, u1); + tt_int_op(0,OP_EQ, tor_sscanf("99 fresh", "%% %3u %s", &u1, s1)); + tt_int_op(1,OP_EQ, tor_sscanf("99 fresh", "%3u%% %s", &u1, s1)); + tt_int_op(2,OP_EQ, tor_sscanf("99 fresh", "%3u %5s %%", &u1, s1)); + tt_int_op(99,OP_EQ, u1); + tt_str_op(s1,OP_EQ, "fresh"); + tt_int_op(1,OP_EQ, tor_sscanf("% boo", "%% %3s", s1)); + tt_str_op("boo",OP_EQ, s1); /* Strings (ie. %s) */ - tt_int_op(2,==, tor_sscanf("hello", "%3s%7s", s1, s2)); - tt_str_op(s1,==, "hel"); - tt_str_op(s2,==, "lo"); - tt_int_op(2,==, tor_sscanf("WD40", "%2s%u", s3, &u1)); /* %s%u */ - tt_str_op(s3,==, "WD"); - tt_int_op(40,==, u1); - tt_int_op(2,==, tor_sscanf("WD40", "%3s%u", s3, &u1)); /* %s%u */ - tt_str_op(s3,==, "WD4"); - tt_int_op(0,==, u1); - tt_int_op(2,==, tor_sscanf("76trombones", "%6u%9s", &u1, s1)); /* %u%s */ - tt_int_op(76,==, u1); - tt_str_op(s1,==, "trombones"); - tt_int_op(1,==, tor_sscanf("prettylongstring", "%999s", s1)); - tt_str_op(s1,==, "prettylongstring"); + tt_int_op(2,OP_EQ, tor_sscanf("hello", "%3s%7s", s1, s2)); + tt_str_op(s1,OP_EQ, "hel"); + tt_str_op(s2,OP_EQ, "lo"); + tt_int_op(2,OP_EQ, tor_sscanf("WD40", "%2s%u", s3, &u1)); /* %s%u */ + tt_str_op(s3,OP_EQ, "WD"); + tt_int_op(40,OP_EQ, u1); + tt_int_op(2,OP_EQ, tor_sscanf("WD40", "%3s%u", s3, &u1)); /* %s%u */ + tt_str_op(s3,OP_EQ, "WD4"); + tt_int_op(0,OP_EQ, u1); + tt_int_op(2,OP_EQ, tor_sscanf("76trombones", "%6u%9s", &u1, s1)); /* %u%s */ + tt_int_op(76,OP_EQ, u1); + tt_str_op(s1,OP_EQ, "trombones"); + tt_int_op(1,OP_EQ, tor_sscanf("prettylongstring", "%999s", s1)); + tt_str_op(s1,OP_EQ, "prettylongstring"); /* %s doesn't eat spaces */ - tt_int_op(2,==, tor_sscanf("hello world", "%9s %9s", s1, s2)); - tt_str_op(s1,==, "hello"); - tt_str_op(s2,==, "world"); - tt_int_op(2,==, tor_sscanf("bye world?", "%9s %9s", s1, s2)); - tt_str_op(s1,==, "bye"); - tt_str_op(s2,==, ""); - tt_int_op(3,==, + tt_int_op(2,OP_EQ, tor_sscanf("hello world", "%9s %9s", s1, s2)); + tt_str_op(s1,OP_EQ, "hello"); + tt_str_op(s2,OP_EQ, "world"); + tt_int_op(2,OP_EQ, tor_sscanf("bye world?", "%9s %9s", s1, s2)); + tt_str_op(s1,OP_EQ, "bye"); + tt_str_op(s2,OP_EQ, ""); + tt_int_op(3,OP_EQ, tor_sscanf("hi", "%9s%9s%3s", s1, s2, s3)); /* %s can be empty. */ - tt_str_op(s1,==, "hi"); - tt_str_op(s2,==, ""); - tt_str_op(s3,==, ""); + tt_str_op(s1,OP_EQ, "hi"); + tt_str_op(s2,OP_EQ, ""); + tt_str_op(s3,OP_EQ, ""); - tt_int_op(3,==, tor_sscanf("1.2.3", "%u.%u.%u%c", &u1, &u2, &u3, &ch)); - tt_int_op(4,==, + tt_int_op(3,OP_EQ, tor_sscanf("1.2.3", "%u.%u.%u%c", &u1, &u2, &u3, &ch)); + tt_int_op(4,OP_EQ, tor_sscanf("1.2.3 foobar", "%u.%u.%u%c", &u1, &u2, &u3, &ch)); - tt_int_op(' ',==, ch); + tt_int_op(' ',OP_EQ, ch); r = tor_sscanf("12345 -67890 -1", "%d %ld %d", &int1, &lng1, &int2); - tt_int_op(r,==, 3); - tt_int_op(int1,==, 12345); - tt_int_op(lng1,==, -67890); - tt_int_op(int2,==, -1); + tt_int_op(r,OP_EQ, 3); + tt_int_op(int1,OP_EQ, 12345); + tt_int_op(lng1,OP_EQ, -67890); + tt_int_op(int2,OP_EQ, -1); #if SIZEOF_INT == 4 /* %u */ /* UINT32_MAX should work */ - tt_int_op(1,==, tor_sscanf("4294967295", "%u", &u1)); - tt_int_op(4294967295U,==, u1); + tt_int_op(1,OP_EQ, tor_sscanf("4294967295", "%u", &u1)); + tt_int_op(4294967295U,OP_EQ, u1); /* But UINT32_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("4294967296", "%u", &u1)); + tt_int_op(0,OP_EQ, tor_sscanf("4294967296", "%u", &u1)); /* but parsing only 9... */ - tt_int_op(1,==, tor_sscanf("4294967296", "%9u", &u1)); - tt_int_op(429496729U,==, u1); + tt_int_op(1,OP_EQ, tor_sscanf("4294967296", "%9u", &u1)); + tt_int_op(429496729U,OP_EQ, u1); /* %x */ /* UINT32_MAX should work */ - tt_int_op(1,==, tor_sscanf("FFFFFFFF", "%x", &u1)); - tt_int_op(0xFFFFFFFF,==, u1); + tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFF", "%x", &u1)); + tt_int_op(0xFFFFFFFF,OP_EQ, u1); /* But UINT32_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("100000000", "%x", &u1)); + tt_int_op(0,OP_EQ, tor_sscanf("100000000", "%x", &u1)); /* %d */ /* INT32_MIN and INT32_MAX should work */ r = tor_sscanf("-2147483648. 2147483647.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 2); - tt_int_op(int1,==, -2147483647 - 1); - tt_int_op(int2,==, 2147483647); + tt_int_op(r,OP_EQ, 2); + tt_int_op(int1,OP_EQ, -2147483647 - 1); + tt_int_op(int2,OP_EQ, 2147483647); /* But INT32_MIN - 1 and INT32_MAX + 1 shouldn't work */ r = tor_sscanf("-2147483649.", "%d.", &int1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("2147483648.", "%d.", &int1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); /* and the first failure stops further processing */ r = tor_sscanf("-2147483648. 2147483648.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 1); + tt_int_op(r,OP_EQ, 1); r = tor_sscanf("-2147483649. 2147483647.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("2147483648. -2147483649.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); #elif SIZEOF_INT == 8 /* %u */ /* UINT64_MAX should work */ - tt_int_op(1,==, tor_sscanf("18446744073709551615", "%u", &u1)); - tt_int_op(18446744073709551615U,==, u1); + tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551615", "%u", &u1)); + tt_int_op(18446744073709551615U,OP_EQ, u1); /* But UINT64_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("18446744073709551616", "%u", &u1)); + tt_int_op(0,OP_EQ, tor_sscanf("18446744073709551616", "%u", &u1)); /* but parsing only 19... */ - tt_int_op(1,==, tor_sscanf("18446744073709551616", "%19u", &u1)); - tt_int_op(1844674407370955161U,==, u1); + tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551616", "%19u", &u1)); + tt_int_op(1844674407370955161U,OP_EQ, u1); /* %x */ /* UINT64_MAX should work */ - tt_int_op(1,==, tor_sscanf("FFFFFFFFFFFFFFFF", "%x", &u1)); - tt_int_op(0xFFFFFFFFFFFFFFFF,==, u1); + tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFFFFFFFFFF", "%x", &u1)); + tt_int_op(0xFFFFFFFFFFFFFFFF,OP_EQ, u1); /* But UINT64_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("10000000000000000", "%x", &u1)); + tt_int_op(0,OP_EQ, tor_sscanf("10000000000000000", "%x", &u1)); /* %d */ /* INT64_MIN and INT64_MAX should work */ r = tor_sscanf("-9223372036854775808. 9223372036854775807.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 2); - tt_int_op(int1,==, -9223372036854775807 - 1); - tt_int_op(int2,==, 9223372036854775807); + tt_int_op(r,OP_EQ, 2); + tt_int_op(int1,OP_EQ, -9223372036854775807 - 1); + tt_int_op(int2,OP_EQ, 9223372036854775807); /* But INT64_MIN - 1 and INT64_MAX + 1 shouldn't work */ r = tor_sscanf("-9223372036854775809.", "%d.", &int1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("9223372036854775808.", "%d.", &int1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); /* and the first failure stops further processing */ r = tor_sscanf("-9223372036854775808. 9223372036854775808.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 1); + tt_int_op(r,OP_EQ, 1); r = tor_sscanf("-9223372036854775809. 9223372036854775807.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("9223372036854775808. -9223372036854775809.", "%d. %d.", &int1, &int2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); #endif #if SIZEOF_LONG == 4 /* %lu */ /* UINT32_MAX should work */ - tt_int_op(1,==, tor_sscanf("4294967295", "%lu", &ulng)); - tt_int_op(4294967295UL,==, ulng); + tt_int_op(1,OP_EQ, tor_sscanf("4294967295", "%lu", &ulng)); + tt_int_op(4294967295UL,OP_EQ, ulng); /* But UINT32_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("4294967296", "%lu", &ulng)); + tt_int_op(0,OP_EQ, tor_sscanf("4294967296", "%lu", &ulng)); /* but parsing only 9... */ - tt_int_op(1,==, tor_sscanf("4294967296", "%9lu", &ulng)); - tt_int_op(429496729UL,==, ulng); + tt_int_op(1,OP_EQ, tor_sscanf("4294967296", "%9lu", &ulng)); + tt_int_op(429496729UL,OP_EQ, ulng); /* %lx */ /* UINT32_MAX should work */ - tt_int_op(1,==, tor_sscanf("FFFFFFFF", "%lx", &ulng)); - tt_int_op(0xFFFFFFFFUL,==, ulng); + tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFF", "%lx", &ulng)); + tt_int_op(0xFFFFFFFFUL,OP_EQ, ulng); /* But UINT32_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("100000000", "%lx", &ulng)); + tt_int_op(0,OP_EQ, tor_sscanf("100000000", "%lx", &ulng)); /* %ld */ /* INT32_MIN and INT32_MAX should work */ r = tor_sscanf("-2147483648. 2147483647.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 2); - tt_int_op(lng1,==, -2147483647L - 1L); - tt_int_op(lng2,==, 2147483647L); + tt_int_op(r,OP_EQ, 2); + tt_int_op(lng1,OP_EQ, -2147483647L - 1L); + tt_int_op(lng2,OP_EQ, 2147483647L); /* But INT32_MIN - 1 and INT32_MAX + 1 shouldn't work */ r = tor_sscanf("-2147483649.", "%ld.", &lng1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("2147483648.", "%ld.", &lng1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); /* and the first failure stops further processing */ r = tor_sscanf("-2147483648. 2147483648.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 1); + tt_int_op(r,OP_EQ, 1); r = tor_sscanf("-2147483649. 2147483647.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("2147483648. -2147483649.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); #elif SIZEOF_LONG == 8 /* %lu */ /* UINT64_MAX should work */ - tt_int_op(1,==, tor_sscanf("18446744073709551615", "%lu", &ulng)); - tt_int_op(18446744073709551615UL,==, ulng); + tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551615", "%lu", &ulng)); + tt_int_op(18446744073709551615UL,OP_EQ, ulng); /* But UINT64_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("18446744073709551616", "%lu", &ulng)); + tt_int_op(0,OP_EQ, tor_sscanf("18446744073709551616", "%lu", &ulng)); /* but parsing only 19... */ - tt_int_op(1,==, tor_sscanf("18446744073709551616", "%19lu", &ulng)); - tt_int_op(1844674407370955161UL,==, ulng); + tt_int_op(1,OP_EQ, tor_sscanf("18446744073709551616", "%19lu", &ulng)); + tt_int_op(1844674407370955161UL,OP_EQ, ulng); /* %lx */ /* UINT64_MAX should work */ - tt_int_op(1,==, tor_sscanf("FFFFFFFFFFFFFFFF", "%lx", &ulng)); - tt_int_op(0xFFFFFFFFFFFFFFFFUL,==, ulng); + tt_int_op(1,OP_EQ, tor_sscanf("FFFFFFFFFFFFFFFF", "%lx", &ulng)); + tt_int_op(0xFFFFFFFFFFFFFFFFUL,OP_EQ, ulng); /* But UINT64_MAX + 1 shouldn't work */ - tt_int_op(0,==, tor_sscanf("10000000000000000", "%lx", &ulng)); + tt_int_op(0,OP_EQ, tor_sscanf("10000000000000000", "%lx", &ulng)); /* %ld */ /* INT64_MIN and INT64_MAX should work */ r = tor_sscanf("-9223372036854775808. 9223372036854775807.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 2); - tt_int_op(lng1,==, -9223372036854775807L - 1L); - tt_int_op(lng2,==, 9223372036854775807L); + tt_int_op(r,OP_EQ, 2); + tt_int_op(lng1,OP_EQ, -9223372036854775807L - 1L); + tt_int_op(lng2,OP_EQ, 9223372036854775807L); /* But INT64_MIN - 1 and INT64_MAX + 1 shouldn't work */ r = tor_sscanf("-9223372036854775809.", "%ld.", &lng1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("9223372036854775808.", "%ld.", &lng1); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); /* and the first failure stops further processing */ r = tor_sscanf("-9223372036854775808. 9223372036854775808.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 1); + tt_int_op(r,OP_EQ, 1); r = tor_sscanf("-9223372036854775809. 9223372036854775807.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); r = tor_sscanf("9223372036854775808. -9223372036854775809.", "%ld. %ld.", &lng1, &lng2); - tt_int_op(r,==, 0); + tt_int_op(r,OP_EQ, 0); #endif r = tor_sscanf("123.456 .000007 -900123123.2000787 00003.2", "%lf %lf %lf %lf", &d1,&d2,&d3,&d4); - tt_int_op(r,==, 4); + tt_int_op(r,OP_EQ, 4); test_feq(d1, 123.456); test_feq(d2, .000007); test_feq(d3, -900123123.2000787); @@ -2350,234 +2350,234 @@ test_util_format_time_interval(void *arg) /* ignore exact spelling of "second(s)"*/ format_time_interval(dbuf, sizeof(dbuf), 0); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &sec, label_s); - tt_int_op(r,==, 2); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(sec,==, 0); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(sec,OP_EQ, 0); format_time_interval(dbuf, sizeof(dbuf), 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &sec, label_s); - tt_int_op(r,==, 2); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(sec,==, 1); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(sec,OP_EQ, 1); format_time_interval(dbuf, sizeof(dbuf), 10); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &sec, label_s); - tt_int_op(r,==, 2); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(sec,==, 10); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(sec,OP_EQ, 10); format_time_interval(dbuf, sizeof(dbuf), 59); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &sec, label_s); - tt_int_op(r,==, 2); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(sec,==, 59); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(sec,OP_EQ, 59); /* negative seconds are reported as their absolute value */ format_time_interval(dbuf, sizeof(dbuf), -4); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &sec, label_s); - tt_int_op(r,==, 2); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(sec,==, 4); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(sec,OP_EQ, 4); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); format_time_interval(dbuf, sizeof(dbuf), -32); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &sec, label_s); - tt_int_op(r,==, 2); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(sec,==, 32); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(sec,OP_EQ, 32); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); /* minutes: 1:00, 1:01, 1:59, 2:00, 2:01, 59:59 */ /* ignore trailing "0 second(s)", if present */ format_time_interval(dbuf, sizeof(dbuf), 60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &min, label_m); - tt_int_op(r,==, 2); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(min,==, 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(r,OP_EQ, 2); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(min,OP_EQ, 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); /* ignore exact spelling of "minute(s)," and "second(s)" */ format_time_interval(dbuf, sizeof(dbuf), 60 + 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &min, label_m, &sec, label_s); - tt_int_op(r,==, 4); - tt_int_op(min,==, 1); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(sec,==, 1); - tt_ci_char_op(label_s[0],==, 's'); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(r,OP_EQ, 4); + tt_int_op(min,OP_EQ, 1); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(sec,OP_EQ, 1); + tt_ci_char_op(label_s[0],OP_EQ, 's'); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); format_time_interval(dbuf, sizeof(dbuf), 60*2 - 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &min, label_m, &sec, label_s); - tt_int_op(r,==, 4); - tt_int_op(min,==, 1); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(sec,==, 59); - tt_ci_char_op(label_s[0],==, 's'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(min,OP_EQ, 1); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(sec,OP_EQ, 59); + tt_ci_char_op(label_s[0],OP_EQ, 's'); /* ignore trailing "0 second(s)", if present */ format_time_interval(dbuf, sizeof(dbuf), 60*2); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &min, label_m); - tt_int_op(r,==, 2); - tt_int_op(min,==, 2); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(min,OP_EQ, 2); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* ignore exact spelling of "minute(s)," and "second(s)" */ format_time_interval(dbuf, sizeof(dbuf), 60*2 + 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &min, label_m, &sec, label_s); - tt_int_op(r,==, 4); - tt_int_op(min,==, 2); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(sec,==, 1); - tt_ci_char_op(label_s[0],==, 's'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(min,OP_EQ, 2); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(sec,OP_EQ, 1); + tt_ci_char_op(label_s[0],OP_EQ, 's'); format_time_interval(dbuf, sizeof(dbuf), 60*60 - 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &min, label_m, &sec, label_s); - tt_int_op(r,==, 4); - tt_int_op(min,==, 59); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(sec,==, 59); - tt_ci_char_op(label_s[0],==, 's'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(min,OP_EQ, 59); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(sec,OP_EQ, 59); + tt_ci_char_op(label_s[0],OP_EQ, 's'); /* negative minutes are reported as their absolute value */ /* ignore trailing "0 second(s)", if present */ format_time_interval(dbuf, sizeof(dbuf), -3*60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &min, label_m); - tt_int_op(r,==, 2); - tt_int_op(min,==, 3); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(min,OP_EQ, 3); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* ignore exact spelling of "minute(s)," and "second(s)" */ format_time_interval(dbuf, sizeof(dbuf), -96); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &min, label_m, &sec, label_s); - tt_int_op(r,==, 4); - tt_int_op(min,==, 1); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(sec,==, 36); - tt_ci_char_op(label_s[0],==, 's'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(min,OP_EQ, 1); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(sec,OP_EQ, 36); + tt_ci_char_op(label_s[0],OP_EQ, 's'); format_time_interval(dbuf, sizeof(dbuf), -2815); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &min, label_m, &sec, label_s); - tt_int_op(r,==, 4); - tt_int_op(min,==, 46); - tt_ci_char_op(label_m[0],==, 'm'); - tt_int_op(sec,==, 55); - tt_ci_char_op(label_s[0],==, 's'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(min,OP_EQ, 46); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); + tt_int_op(sec,OP_EQ, 55); + tt_ci_char_op(label_s[0],OP_EQ, 's'); /* hours: 1:00, 1:00:01, 1:01, 23:59, 23:59:59 */ /* always ignore trailing seconds, if present */ /* ignore trailing "0 minute(s)" etc., if present */ format_time_interval(dbuf, sizeof(dbuf), 60*60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &hour, label_h); - tt_int_op(r,==, 2); - tt_int_op(hour,==, 1); - tt_ci_char_op(label_h[0],==, 'h'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(hour,OP_EQ, 1); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); format_time_interval(dbuf, sizeof(dbuf), 60*60 + 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &hour, label_h); - tt_int_op(r,==, 2); - tt_int_op(hour,==, 1); - tt_ci_char_op(label_h[0],==, 'h'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(hour,OP_EQ, 1); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); /* ignore exact spelling of "hour(s)," etc. */ format_time_interval(dbuf, sizeof(dbuf), 60*60 + 60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &hour, label_h, &min, label_m); - tt_int_op(r,==, 4); - tt_int_op(hour,==, 1); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 1); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(hour,OP_EQ, 1); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 1); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); format_time_interval(dbuf, sizeof(dbuf), 24*60*60 - 60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &hour, label_h, &min, label_m); - tt_int_op(r,==, 4); - tt_int_op(hour,==, 23); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 59); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(hour,OP_EQ, 23); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 59); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); format_time_interval(dbuf, sizeof(dbuf), 24*60*60 - 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &hour, label_h, &min, label_m); - tt_int_op(r,==, 4); - tt_int_op(hour,==, 23); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 59); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(hour,OP_EQ, 23); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 59); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* negative hours are reported as their absolute value */ /* ignore exact spelling of "hour(s)," etc., if present */ format_time_interval(dbuf, sizeof(dbuf), -2*60*60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &hour, label_h); - tt_int_op(r,==, 2); - tt_int_op(hour,==, 2); - tt_ci_char_op(label_h[0],==, 'h'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(hour,OP_EQ, 2); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); format_time_interval(dbuf, sizeof(dbuf), -75804); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &hour, label_h, &min, label_m); - tt_int_op(r,==, 4); - tt_int_op(hour,==, 21); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 3); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(hour,OP_EQ, 21); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 3); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* days: 1:00, 1:00:00:01, 1:00:01, 1:01 */ /* always ignore trailing seconds, if present */ /* ignore trailing "0 hours(s)" etc., if present */ format_time_interval(dbuf, sizeof(dbuf), 24*60*60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &day, label_d); - tt_int_op(r,==, 2); - tt_int_op(day,==, 1); - tt_ci_char_op(label_d[0],==, 'd'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(day,OP_EQ, 1); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); format_time_interval(dbuf, sizeof(dbuf), 24*60*60 + 1); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_, &day, label_d); - tt_int_op(r,==, 2); - tt_int_op(day,==, 1); - tt_ci_char_op(label_d[0],==, 'd'); + tt_int_op(r,OP_EQ, 2); + tt_int_op(day,OP_EQ, 1); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); /* ignore exact spelling of "days(s)," etc. */ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 + 60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); if (r == -1) { @@ -2586,68 +2586,68 @@ test_util_format_time_interval(void *arg) &day, label_d, &min, label_m); } tt_assert(r == 4 || r == 6); - tt_int_op(day,==, 1); - tt_ci_char_op(label_d[0],==, 'd'); + tt_int_op(day,OP_EQ, 1); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); if (r == 6) { - tt_int_op(hour,==, 0); - tt_ci_char_op(label_h[0],==, 'h'); + tt_int_op(hour,OP_EQ, 0); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); } - tt_int_op(min,==, 1); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(min,OP_EQ, 1); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* ignore trailing "0 minutes(s)" etc., if present */ format_time_interval(dbuf, sizeof(dbuf), 24*60*60 + 60*60); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_, &day, label_d, &hour, label_h); - tt_int_op(r,==, 4); - tt_int_op(day,==, 1); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 1); - tt_ci_char_op(label_h[0],==, 'h'); + tt_int_op(r,OP_EQ, 4); + tt_int_op(day,OP_EQ, 1); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 1); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); /* negative days are reported as their absolute value */ format_time_interval(dbuf, sizeof(dbuf), -21936184); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 253); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 21); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 23); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 253); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 21); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 23); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* periods > 1 year are reported in days (warn?) */ /* ignore exact spelling of "days(s)," etc., if present */ format_time_interval(dbuf, sizeof(dbuf), 758635154); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 8780); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 11); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 59); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 8780); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 11); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 59); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* negative periods > 1 year are reported in days (warn?) */ format_time_interval(dbuf, sizeof(dbuf), -1427014922); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 16516); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 9); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 2); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 16516); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 9); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 2); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); #if SIZEOF_LONG == 4 || SIZEOF_LONG == 8 @@ -2656,32 +2656,32 @@ test_util_format_time_interval(void *arg) /* INT32_MAX */ format_time_interval(dbuf, sizeof(dbuf), 2147483647); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 24855); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 3); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 14); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 24855); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 3); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 14); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* and 7 seconds - ignored */ /* INT32_MIN: check that we get the absolute value of interval, * which doesn't actually fit in int32_t. * We expect INT32_MAX or INT32_MAX + 1 with 64 bit longs */ format_time_interval(dbuf, sizeof(dbuf), -2147483647L - 1L); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 24855); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 3); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 14); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 24855); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 3); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 14); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* and 7 or 8 seconds - ignored */ #endif @@ -2693,16 +2693,16 @@ test_util_format_time_interval(void *arg) /* INT64_MAX */ format_time_interval(dbuf, sizeof(dbuf), 9223372036854775807L); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 106751991167300L); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 15); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 30); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 106751991167300L); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 15); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 30); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* and 7 seconds - ignored */ /* INT64_MIN: check that we get the absolute value of interval, @@ -2710,16 +2710,16 @@ test_util_format_time_interval(void *arg) * We expect INT64_MAX */ format_time_interval(dbuf, sizeof(dbuf), -9223372036854775807L - 1L); - tt_int_op(strnlen(dbuf, DBUF_SIZE),<=, DBUF_SIZE - 1); + tt_int_op(strnlen(dbuf, DBUF_SIZE),OP_LE, DBUF_SIZE - 1); r = tor_sscanf(dbuf, TL_ " " TL_ " " TL_, &day, label_d, &hour, label_h, &min, label_m); - tt_int_op(r,==, 6); - tt_int_op(day,==, 106751991167300L); - tt_ci_char_op(label_d[0],==, 'd'); - tt_int_op(hour,==, 15); - tt_ci_char_op(label_h[0],==, 'h'); - tt_int_op(min,==, 30); - tt_ci_char_op(label_m[0],==, 'm'); + tt_int_op(r,OP_EQ, 6); + tt_int_op(day,OP_EQ, 106751991167300L); + tt_ci_char_op(label_d[0],OP_EQ, 'd'); + tt_int_op(hour,OP_EQ, 15); + tt_ci_char_op(label_h[0],OP_EQ, 'h'); + tt_int_op(min,OP_EQ, 30); + tt_ci_char_op(label_m[0],OP_EQ, 'm'); /* and 7 or 8 seconds - ignored */ #endif @@ -2741,30 +2741,30 @@ test_util_path_is_relative(void *arg) { /* OS-independent tests */ (void)arg; - tt_int_op(1,==, path_is_relative("")); - tt_int_op(1,==, path_is_relative("dir")); - tt_int_op(1,==, path_is_relative("dir/")); - tt_int_op(1,==, path_is_relative("./dir")); - tt_int_op(1,==, path_is_relative("../dir")); + tt_int_op(1,OP_EQ, path_is_relative("")); + tt_int_op(1,OP_EQ, path_is_relative("dir")); + tt_int_op(1,OP_EQ, path_is_relative("dir/")); + tt_int_op(1,OP_EQ, path_is_relative("./dir")); + tt_int_op(1,OP_EQ, path_is_relative("../dir")); - tt_int_op(0,==, path_is_relative("/")); - tt_int_op(0,==, path_is_relative("/dir")); - tt_int_op(0,==, path_is_relative("/dir/")); + tt_int_op(0,OP_EQ, path_is_relative("/")); + tt_int_op(0,OP_EQ, path_is_relative("/dir")); + tt_int_op(0,OP_EQ, path_is_relative("/dir/")); /* Windows */ #ifdef _WIN32 /* I don't have Windows so I can't test this, hence the "#ifdef 0". These are tests that look useful, so please try to get them running and uncomment if it all works as it should */ - tt_int_op(1,==, path_is_relative("dir")); - tt_int_op(1,==, path_is_relative("dir\\")); - tt_int_op(1,==, path_is_relative("dir\\a:")); - tt_int_op(1,==, path_is_relative("dir\\a:\\")); - tt_int_op(1,==, path_is_relative("http:\\dir")); + tt_int_op(1,OP_EQ, path_is_relative("dir")); + tt_int_op(1,OP_EQ, path_is_relative("dir\\")); + tt_int_op(1,OP_EQ, path_is_relative("dir\\a:")); + tt_int_op(1,OP_EQ, path_is_relative("dir\\a:\\")); + tt_int_op(1,OP_EQ, path_is_relative("http:\\dir")); - tt_int_op(0,==, path_is_relative("\\dir")); - tt_int_op(0,==, path_is_relative("a:\\dir")); - tt_int_op(0,==, path_is_relative("z:\\dir")); + tt_int_op(0,OP_EQ, path_is_relative("\\dir")); + tt_int_op(0,OP_EQ, path_is_relative("a:\\dir")); + tt_int_op(0,OP_EQ, path_is_relative("z:\\dir")); #endif done: @@ -2793,7 +2793,7 @@ test_util_mempool(void *arg) tt_assert(pool); tt_assert(pool->new_chunk_capacity >= 10); tt_assert(pool->item_alloc_size >= sizeof(void*)+241); - tt_int_op(pool->item_alloc_size & 0x03,==, 0); + tt_int_op(pool->item_alloc_size & 0x03,OP_EQ, 0); tt_assert(pool->new_chunk_capacity < 60); allocated = smartlist_new(); @@ -2857,16 +2857,16 @@ test_util_memarea(void *arg) tt_assert(p1+64 <= p2); tt_assert(p2+52 <= p3); /* Make sure we aligned. */ - tt_int_op(((uintptr_t)p1) % sizeof(void*),==, 0); - tt_int_op(((uintptr_t)p2) % sizeof(void*),==, 0); - tt_int_op(((uintptr_t)p3) % sizeof(void*),==, 0); + tt_int_op(((uintptr_t)p1) % sizeof(void*),OP_EQ, 0); + tt_int_op(((uintptr_t)p2) % sizeof(void*),OP_EQ, 0); + tt_int_op(((uintptr_t)p3) % sizeof(void*),OP_EQ, 0); tt_assert(!memarea_owns_ptr(area, p3+8192)); tt_assert(!memarea_owns_ptr(area, p3+30)); tt_assert(tor_mem_is_zero(p2, 52)); /* Make sure we don't overalign. */ p1 = memarea_alloc(area, 1); p2 = memarea_alloc(area, 1); - tt_ptr_op(p1+sizeof(void*),==, p2); + tt_ptr_op(p1+sizeof(void*),OP_EQ, p2); { malloced_ptr = tor_malloc(64); tt_assert(!memarea_owns_ptr(area, malloced_ptr)); @@ -2879,7 +2879,7 @@ test_util_memarea(void *arg) crypto_rand((char*)malloced_ptr, 64); p1 = memarea_memdup(area, malloced_ptr, 64); tt_assert(p1 != malloced_ptr); - tt_mem_op(p1,==, malloced_ptr, 64); + tt_mem_op(p1,OP_EQ, malloced_ptr, 64); tor_free(malloced_ptr); } @@ -2888,8 +2888,8 @@ test_util_memarea(void *arg) p2 = memarea_strdup(area, "abcd"); tt_assert(p1); tt_assert(p2); - tt_str_op(p1,==, ""); - tt_str_op(p2,==, "abcd"); + tt_str_op(p1,OP_EQ, ""); + tt_str_op(p2,OP_EQ, "abcd"); /* memarea_strndup. */ { @@ -2898,20 +2898,20 @@ test_util_memarea(void *arg) size_t len = strlen(s); p1 = memarea_strndup(area, s, 1000); p2 = memarea_strndup(area, s, 10); - tt_str_op(p1,==, s); + tt_str_op(p1,OP_EQ, s); tt_assert(p2 >= p1 + len + 1); - tt_mem_op(s,==, p2, 10); - tt_int_op(p2[10],==, '\0'); + tt_mem_op(s,OP_EQ, p2, 10); + tt_int_op(p2[10],OP_EQ, '\0'); p3 = memarea_strndup(area, s, len); - tt_str_op(p3,==, s); + tt_str_op(p3,OP_EQ, s); p3 = memarea_strndup(area, s, len-1); - tt_mem_op(s,==, p3, len-1); - tt_int_op(p3[len-1],==, '\0'); + tt_mem_op(s,OP_EQ, p3, len-1); + tt_int_op(p3[len-1],OP_EQ, '\0'); } memarea_clear(area); p1 = memarea_alloc(area, 1); - tt_ptr_op(p1,==, p1_orig); + tt_ptr_op(p1,OP_EQ, p1_orig); memarea_clear(area); /* Check for running over an area's size. */ @@ -2944,22 +2944,22 @@ test_util_datadir(void *arg) temp_dir = get_datadir_fname(NULL); f = get_datadir_fname("state"); tor_snprintf(buf, sizeof(buf), "%s"PATH_SEPARATOR"state", temp_dir); - tt_str_op(f,==, buf); + tt_str_op(f,OP_EQ, buf); tor_free(f); f = get_datadir_fname2("cache", "thingy"); tor_snprintf(buf, sizeof(buf), "%s"PATH_SEPARATOR"cache"PATH_SEPARATOR"thingy", temp_dir); - tt_str_op(f,==, buf); + tt_str_op(f,OP_EQ, buf); tor_free(f); f = get_datadir_fname2_suffix("cache", "thingy", ".foo"); tor_snprintf(buf, sizeof(buf), "%s"PATH_SEPARATOR"cache"PATH_SEPARATOR"thingy.foo", temp_dir); - tt_str_op(f,==, buf); + tt_str_op(f,OP_EQ, buf); tor_free(f); f = get_datadir_fname_suffix("cache", ".foo"); tor_snprintf(buf, sizeof(buf), "%s"PATH_SEPARATOR"cache.foo", temp_dir); - tt_str_op(f,==, buf); + tt_str_op(f,OP_EQ, buf); done: tor_free(f); @@ -3000,43 +3000,43 @@ test_util_strtok(void *arg) "%sthey.seemed;;their!.own;most.perfect;monument%s",pad2,pad2); /* -- "Year's End", Richard Wilbur */ - tt_str_op("Graved",==, tor_strtok_r_impl(buf, " ", &cp1)); - tt_str_op("they",==, tor_strtok_r_impl(buf2, ".!..;!", &cp2)); + tt_str_op("Graved",OP_EQ, tor_strtok_r_impl(buf, " ", &cp1)); + tt_str_op("they",OP_EQ, tor_strtok_r_impl(buf2, ".!..;!", &cp2)); #define S1() tor_strtok_r_impl(NULL, " ", &cp1) #define S2() tor_strtok_r_impl(NULL, ".!..;!", &cp2) - tt_str_op("on",==, S1()); - tt_str_op("the",==, S1()); - tt_str_op("dark",==, S1()); - tt_str_op("seemed",==, S2()); - tt_str_op("their",==, S2()); - tt_str_op("own",==, S2()); - tt_str_op("in",==, S1()); - tt_str_op("gestures",==, S1()); - tt_str_op("of",==, S1()); - tt_str_op("most",==, S2()); - tt_str_op("perfect",==, S2()); - tt_str_op("descent",==, S1()); - tt_str_op("monument",==, S2()); - tt_ptr_op(NULL,==, S1()); - tt_ptr_op(NULL,==, S2()); + tt_str_op("on",OP_EQ, S1()); + tt_str_op("the",OP_EQ, S1()); + tt_str_op("dark",OP_EQ, S1()); + tt_str_op("seemed",OP_EQ, S2()); + tt_str_op("their",OP_EQ, S2()); + tt_str_op("own",OP_EQ, S2()); + tt_str_op("in",OP_EQ, S1()); + tt_str_op("gestures",OP_EQ, S1()); + tt_str_op("of",OP_EQ, S1()); + tt_str_op("most",OP_EQ, S2()); + tt_str_op("perfect",OP_EQ, S2()); + tt_str_op("descent",OP_EQ, S1()); + tt_str_op("monument",OP_EQ, S2()); + tt_ptr_op(NULL,OP_EQ, S1()); + tt_ptr_op(NULL,OP_EQ, S2()); } buf[0] = 0; - tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, " ", &cp1)); - tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, "!", &cp1)); + tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, " ", &cp1)); + tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, "!", &cp1)); strlcpy(buf, "Howdy!", sizeof(buf)); - tt_str_op("Howdy",==, tor_strtok_r_impl(buf, "!", &cp1)); - tt_ptr_op(NULL,==, tor_strtok_r_impl(NULL, "!", &cp1)); + tt_str_op("Howdy",OP_EQ, tor_strtok_r_impl(buf, "!", &cp1)); + tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(NULL, "!", &cp1)); strlcpy(buf, " ", sizeof(buf)); - tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, " ", &cp1)); + tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, " ", &cp1)); strlcpy(buf, " ", sizeof(buf)); - tt_ptr_op(NULL,==, tor_strtok_r_impl(buf, " ", &cp1)); + tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(buf, " ", &cp1)); strlcpy(buf, "something ", sizeof(buf)); - tt_str_op("something",==, tor_strtok_r_impl(buf, " ", &cp1)); - tt_ptr_op(NULL,==, tor_strtok_r_impl(NULL, ";", &cp1)); + tt_str_op("something",OP_EQ, tor_strtok_r_impl(buf, " ", &cp1)); + tt_ptr_op(NULL,OP_EQ, tor_strtok_r_impl(NULL, ";", &cp1)); done: ; } @@ -3056,24 +3056,24 @@ test_util_find_str_at_start_of_line(void *ptr) (void)ptr; - tt_ptr_op(long_string,==, find_str_at_start_of_line(long_string, "")); - tt_ptr_op(NULL,==, find_str_at_start_of_line(short_string, "nonsense")); - tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "nonsense")); - tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "\n")); - tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "how ")); - tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "kitty")); - tt_ptr_op(long_string,==, find_str_at_start_of_line(long_string, "h")); - tt_ptr_op(long_string,==, find_str_at_start_of_line(long_string, "how")); - tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "he")); - tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "hell")); - tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "hello k")); - tt_ptr_op(line2,==, find_str_at_start_of_line(long_string, "hello kitty\n")); - tt_ptr_op(line2,==, + tt_ptr_op(long_string,OP_EQ, find_str_at_start_of_line(long_string, "")); + tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(short_string, "nonsense")); + tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "nonsense")); + tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "\n")); + tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "how ")); + tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "kitty")); + tt_ptr_op(long_string,OP_EQ, find_str_at_start_of_line(long_string, "h")); + tt_ptr_op(long_string,OP_EQ, find_str_at_start_of_line(long_string, "how")); + tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "he")); + tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hell")); + tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello k")); + tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello kitty\n")); + tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello kitty\nt")); - tt_ptr_op(line3,==, find_str_at_start_of_line(long_string, "third")); - tt_ptr_op(line3,==, find_str_at_start_of_line(long_string, "third line")); - tt_ptr_op(NULL,==, find_str_at_start_of_line(long_string, "third line\n")); - tt_ptr_op(short_line2,==, find_str_at_start_of_line(short_string, + tt_ptr_op(line3,OP_EQ, find_str_at_start_of_line(long_string, "third")); + tt_ptr_op(line3,OP_EQ, find_str_at_start_of_line(long_string, "third line")); + tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "third line\n")); + tt_ptr_op(short_line2,OP_EQ, find_str_at_start_of_line(short_string, "second line\n")); done: ; @@ -3084,25 +3084,25 @@ test_util_string_is_C_identifier(void *ptr) { (void)ptr; - tt_int_op(1,==, string_is_C_identifier("string_is_C_identifier")); - tt_int_op(1,==, string_is_C_identifier("_string_is_C_identifier")); - tt_int_op(1,==, string_is_C_identifier("_")); - tt_int_op(1,==, string_is_C_identifier("i")); - tt_int_op(1,==, string_is_C_identifier("_____")); - tt_int_op(1,==, string_is_C_identifier("__00__")); - tt_int_op(1,==, string_is_C_identifier("__init__")); - tt_int_op(1,==, string_is_C_identifier("_0")); - tt_int_op(1,==, string_is_C_identifier("_0string_is_C_identifier")); - tt_int_op(1,==, string_is_C_identifier("_0")); + tt_int_op(1,OP_EQ, string_is_C_identifier("string_is_C_identifier")); + tt_int_op(1,OP_EQ, string_is_C_identifier("_string_is_C_identifier")); + tt_int_op(1,OP_EQ, string_is_C_identifier("_")); + tt_int_op(1,OP_EQ, string_is_C_identifier("i")); + tt_int_op(1,OP_EQ, string_is_C_identifier("_____")); + tt_int_op(1,OP_EQ, string_is_C_identifier("__00__")); + tt_int_op(1,OP_EQ, string_is_C_identifier("__init__")); + tt_int_op(1,OP_EQ, string_is_C_identifier("_0")); + tt_int_op(1,OP_EQ, string_is_C_identifier("_0string_is_C_identifier")); + tt_int_op(1,OP_EQ, string_is_C_identifier("_0")); - tt_int_op(0,==, string_is_C_identifier("0_string_is_C_identifier")); - tt_int_op(0,==, string_is_C_identifier("0")); - tt_int_op(0,==, string_is_C_identifier("")); - tt_int_op(0,==, string_is_C_identifier(";")); - tt_int_op(0,==, string_is_C_identifier("i;")); - tt_int_op(0,==, string_is_C_identifier("_;")); - tt_int_op(0,==, string_is_C_identifier("í")); - tt_int_op(0,==, string_is_C_identifier("ñ")); + tt_int_op(0,OP_EQ, string_is_C_identifier("0_string_is_C_identifier")); + tt_int_op(0,OP_EQ, string_is_C_identifier("0")); + tt_int_op(0,OP_EQ, string_is_C_identifier("")); + tt_int_op(0,OP_EQ, string_is_C_identifier(";")); + tt_int_op(0,OP_EQ, string_is_C_identifier("i;")); + tt_int_op(0,OP_EQ, string_is_C_identifier("_;")); + tt_int_op(0,OP_EQ, string_is_C_identifier("í")); + tt_int_op(0,OP_EQ, string_is_C_identifier("ñ")); done: ; @@ -3120,29 +3120,29 @@ test_util_asprintf(void *ptr) /* simple string */ r = tor_asprintf(&cp, "simple string 100%% safe"); tt_assert(cp); - tt_str_op("simple string 100% safe",==, cp); - tt_int_op(strlen(cp),==, r); + tt_str_op("simple string 100% safe",OP_EQ, cp); + tt_int_op(strlen(cp),OP_EQ, r); tor_free(cp); /* empty string */ r = tor_asprintf(&cp, "%s", ""); tt_assert(cp); - tt_str_op("",==, cp); - tt_int_op(strlen(cp),==, r); + tt_str_op("",OP_EQ, cp); + tt_int_op(strlen(cp),OP_EQ, r); tor_free(cp); /* numbers (%i) */ r = tor_asprintf(&cp, "I like numbers-%2i, %i, etc.", -1, 2); tt_assert(cp); - tt_str_op("I like numbers--1, 2, etc.",==, cp); - tt_int_op(strlen(cp),==, r); + tt_str_op("I like numbers--1, 2, etc.",OP_EQ, cp); + tt_int_op(strlen(cp),OP_EQ, r); /* don't free cp; next test uses it. */ /* numbers (%d) */ r = tor_asprintf(&cp2, "First=%d, Second=%d", 101, 202); tt_assert(cp2); - tt_int_op(strlen(cp2),==, r); - tt_str_op("First=101, Second=202",==, cp2); + tt_int_op(strlen(cp2),OP_EQ, r); + tt_str_op("First=101, Second=202",OP_EQ, cp2); tt_assert(cp != cp2); tor_free(cp); tor_free(cp2); @@ -3150,17 +3150,17 @@ test_util_asprintf(void *ptr) /* Glass-box test: a string exactly 128 characters long. */ r = tor_asprintf(&cp, "Lorem1: %sLorem2: %s", LOREMIPSUM, LOREMIPSUM); tt_assert(cp); - tt_int_op(128,==, r); - tt_int_op(cp[128], ==, '\0'); - tt_str_op("Lorem1: "LOREMIPSUM"Lorem2: "LOREMIPSUM,==, cp); + tt_int_op(128,OP_EQ, r); + tt_int_op(cp[128], OP_EQ, '\0'); + tt_str_op("Lorem1: "LOREMIPSUM"Lorem2: "LOREMIPSUM,OP_EQ, cp); tor_free(cp); /* String longer than 128 characters */ r = tor_asprintf(&cp, "1: %s 2: %s 3: %s", LOREMIPSUM, LOREMIPSUM, LOREMIPSUM); tt_assert(cp); - tt_int_op(strlen(cp),==, r); - tt_str_op("1: "LOREMIPSUM" 2: "LOREMIPSUM" 3: "LOREMIPSUM,==, cp); + tt_int_op(strlen(cp),OP_EQ, r); + tt_str_op("1: "LOREMIPSUM" 2: "LOREMIPSUM" 3: "LOREMIPSUM,OP_EQ, cp); done: tor_free(cp); @@ -3181,9 +3181,9 @@ test_util_listdir(void *ptr) dir1 = tor_strdup(get_fname("some-directory")); dirname = tor_strdup(get_fname(NULL)); - tt_int_op(0,==, write_str_to_file(fname1, "X\n", 0)); - tt_int_op(0,==, write_str_to_file(fname2, "Y\n", 0)); - tt_int_op(0,==, write_str_to_file(fname3, "Z\n", 0)); + tt_int_op(0,OP_EQ, write_str_to_file(fname1, "X\n", 0)); + tt_int_op(0,OP_EQ, write_str_to_file(fname2, "Y\n", 0)); + tt_int_op(0,OP_EQ, write_str_to_file(fname3, "Z\n", 0)); #ifdef _WIN32 r = mkdir(dir1); #else @@ -3229,9 +3229,9 @@ test_util_parent_dir(void *ptr) int ok; \ cp = tor_strdup(input); \ ok = get_parent_directory(cp); \ - tt_int_op(expect_ok, ==, ok); \ + tt_int_op(expect_ok, OP_EQ, ok); \ if (ok==0) \ - tt_str_op(output, ==, cp); \ + tt_str_op(output, OP_EQ, cp); \ tor_free(cp); \ } while (0); @@ -3280,32 +3280,32 @@ test_util_ftruncate(void *ptr) fname = get_fname("ftruncate"); fd = tor_open_cloexec(fname, O_WRONLY|O_CREAT, 0600); - tt_int_op(fd, >=, 0); + tt_int_op(fd, OP_GE, 0); /* Make the file be there. */ - tt_int_op(strlen(message), ==, write_all(fd, message, strlen(message), 0)); - tt_int_op((int)tor_fd_getpos(fd), ==, strlen(message)); - tt_int_op(0, ==, fstat(fd, &st)); - tt_int_op((int)st.st_size, ==, strlen(message)); + tt_int_op(strlen(message), OP_EQ, write_all(fd, message, strlen(message), 0)); + tt_int_op((int)tor_fd_getpos(fd), OP_EQ, strlen(message)); + tt_int_op(0, OP_EQ, fstat(fd, &st)); + tt_int_op((int)st.st_size, OP_EQ, strlen(message)); /* Truncate and see if it got truncated */ - tt_int_op(0, ==, tor_ftruncate(fd)); - tt_int_op((int)tor_fd_getpos(fd), ==, 0); - tt_int_op(0, ==, fstat(fd, &st)); - tt_int_op((int)st.st_size, ==, 0); + tt_int_op(0, OP_EQ, tor_ftruncate(fd)); + tt_int_op((int)tor_fd_getpos(fd), OP_EQ, 0); + tt_int_op(0, OP_EQ, fstat(fd, &st)); + tt_int_op((int)st.st_size, OP_EQ, 0); /* Replace, and see if it got replaced */ - tt_int_op(strlen(message2), ==, + tt_int_op(strlen(message2), OP_EQ, write_all(fd, message2, strlen(message2), 0)); - tt_int_op((int)tor_fd_getpos(fd), ==, strlen(message2)); - tt_int_op(0, ==, fstat(fd, &st)); - tt_int_op((int)st.st_size, ==, strlen(message2)); + tt_int_op((int)tor_fd_getpos(fd), OP_EQ, strlen(message2)); + tt_int_op(0, OP_EQ, fstat(fd, &st)); + tt_int_op((int)st.st_size, OP_EQ, strlen(message2)); close(fd); fd = -1; buf = read_file_to_str(fname, 0, NULL); - tt_str_op(message2, ==, buf); + tt_str_op(message2, OP_EQ, buf); done: if (fd >= 0) @@ -3344,53 +3344,53 @@ test_util_exit_status(void *ptr) (void)ptr; clear_hex_errno(hex_errno); - tt_str_op("",==, hex_errno); + tt_str_op("",OP_EQ, hex_errno); clear_hex_errno(hex_errno); n = format_helper_exit_status(0, 0, hex_errno); - tt_str_op("0/0\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); + tt_str_op("0/0\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); #if SIZEOF_INT == 4 clear_hex_errno(hex_errno); n = format_helper_exit_status(0, 0x7FFFFFFF, hex_errno); - tt_str_op("0/7FFFFFFF\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); + tt_str_op("0/7FFFFFFF\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); clear_hex_errno(hex_errno); n = format_helper_exit_status(0xFF, -0x80000000, hex_errno); - tt_str_op("FF/-80000000\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); - tt_int_op(n,==, HEX_ERRNO_SIZE); + tt_str_op("FF/-80000000\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); + tt_int_op(n,OP_EQ, HEX_ERRNO_SIZE); #elif SIZEOF_INT == 8 clear_hex_errno(hex_errno); n = format_helper_exit_status(0, 0x7FFFFFFFFFFFFFFF, hex_errno); - tt_str_op("0/7FFFFFFFFFFFFFFF\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); + tt_str_op("0/7FFFFFFFFFFFFFFF\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); clear_hex_errno(hex_errno); n = format_helper_exit_status(0xFF, -0x8000000000000000, hex_errno); - tt_str_op("FF/-8000000000000000\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); - tt_int_op(n,==, HEX_ERRNO_SIZE); + tt_str_op("FF/-8000000000000000\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); + tt_int_op(n,OP_EQ, HEX_ERRNO_SIZE); #endif clear_hex_errno(hex_errno); n = format_helper_exit_status(0x7F, 0, hex_errno); - tt_str_op("7F/0\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); + tt_str_op("7F/0\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); clear_hex_errno(hex_errno); n = format_helper_exit_status(0x08, -0x242, hex_errno); - tt_str_op("8/-242\n",==, hex_errno); - tt_int_op(n,==, strlen(hex_errno)); + tt_str_op("8/-242\n",OP_EQ, hex_errno); + tt_int_op(n,OP_EQ, strlen(hex_errno)); clear_hex_errno(hex_errno); - tt_str_op("",==, hex_errno); + tt_str_op("",OP_EQ, hex_errno); done: ; @@ -3417,83 +3417,83 @@ test_util_fgets_eagain(void *ptr) /* Set up a pipe to test on */ retval = pipe(test_pipe); - tt_int_op(retval, ==, 0); + tt_int_op(retval, OP_EQ, 0); /* Set up the read-end to be non-blocking */ retval = fcntl(test_pipe[0], F_SETFL, O_NONBLOCK); - tt_int_op(retval, ==, 0); + tt_int_op(retval, OP_EQ, 0); /* Open it as a stdio stream */ test_stream = fdopen(test_pipe[0], "r"); - tt_ptr_op(test_stream, !=, NULL); + tt_ptr_op(test_stream, OP_NE, NULL); /* Send in a partial line */ retlen = write(test_pipe[1], "A", 1); - tt_int_op(retlen, ==, 1); + tt_int_op(retlen, OP_EQ, 1); retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, EAGAIN); - tt_ptr_op(retptr, ==, buf); - tt_str_op(buf, ==, "A"); + tt_int_op(errno, OP_EQ, EAGAIN); + tt_ptr_op(retptr, OP_EQ, buf); + tt_str_op(buf, OP_EQ, "A"); errno = 0; /* Send in the rest */ retlen = write(test_pipe[1], "B\n", 2); - tt_int_op(retlen, ==, 2); + tt_int_op(retlen, OP_EQ, 2); retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, 0); - tt_ptr_op(retptr, ==, buf); - tt_str_op(buf, ==, "B\n"); + tt_int_op(errno, OP_EQ, 0); + tt_ptr_op(retptr, OP_EQ, buf); + tt_str_op(buf, OP_EQ, "B\n"); errno = 0; /* Send in a full line */ retlen = write(test_pipe[1], "CD\n", 3); - tt_int_op(retlen, ==, 3); + tt_int_op(retlen, OP_EQ, 3); retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, 0); - tt_ptr_op(retptr, ==, buf); - tt_str_op(buf, ==, "CD\n"); + tt_int_op(errno, OP_EQ, 0); + tt_ptr_op(retptr, OP_EQ, buf); + tt_str_op(buf, OP_EQ, "CD\n"); errno = 0; /* Send in a partial line */ retlen = write(test_pipe[1], "E", 1); - tt_int_op(retlen, ==, 1); + tt_int_op(retlen, OP_EQ, 1); retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, EAGAIN); - tt_ptr_op(retptr, ==, buf); - tt_str_op(buf, ==, "E"); + tt_int_op(errno, OP_EQ, EAGAIN); + tt_ptr_op(retptr, OP_EQ, buf); + tt_str_op(buf, OP_EQ, "E"); errno = 0; /* Send in the rest */ retlen = write(test_pipe[1], "F\n", 2); - tt_int_op(retlen, ==, 2); + tt_int_op(retlen, OP_EQ, 2); retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, 0); - tt_ptr_op(retptr, ==, buf); - tt_str_op(buf, ==, "F\n"); + tt_int_op(errno, OP_EQ, 0); + tt_ptr_op(retptr, OP_EQ, buf); + tt_str_op(buf, OP_EQ, "F\n"); errno = 0; /* Send in a full line and close */ retlen = write(test_pipe[1], "GH", 2); - tt_int_op(retlen, ==, 2); + tt_int_op(retlen, OP_EQ, 2); retval = close(test_pipe[1]); - tt_int_op(retval, ==, 0); + tt_int_op(retval, OP_EQ, 0); test_pipe[1] = -1; retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, 0); - tt_ptr_op(retptr, ==, buf); - tt_str_op(buf, ==, "GH"); + tt_int_op(errno, OP_EQ, 0); + tt_ptr_op(retptr, OP_EQ, buf); + tt_str_op(buf, OP_EQ, "GH"); errno = 0; /* Check for EOF */ retptr = fgets(buf, sizeof(buf), test_stream); - tt_int_op(errno, ==, 0); - tt_ptr_op(retptr, ==, NULL); + tt_int_op(errno, OP_EQ, 0); + tt_ptr_op(retptr, OP_EQ, NULL); retval = feof(test_stream); - tt_int_op(retval, !=, 0); + tt_int_op(retval, OP_NE, 0); errno = 0; /* Check that buf is unchanged according to C99 and C11 */ - tt_str_op(buf, ==, "GH"); + tt_str_op(buf, OP_EQ, "GH"); done: if (test_stream != NULL) @@ -3568,7 +3568,7 @@ run_util_spawn_background(const char *argv[], const char *expected_out, * but we still need to handle PROCESS_STATUS_RUNNING_OR_NOTRUNNING */ tt_assert(MATCH_PROCESS_STATUS(expected_status, status)); if (status == PROCESS_STATUS_ERROR) { - tt_ptr_op(process_handle, ==, NULL); + tt_ptr_op(process_handle, OP_EQ, NULL); return; } @@ -3611,20 +3611,20 @@ run_util_spawn_background(const char *argv[], const char *expected_out, sizeof(stdout_buf) - 1); tt_assert(pos >= 0); stdout_buf[pos] = '\0'; - tt_int_op(strlen(expected_out),==, pos); - tt_str_op(expected_out,==, stdout_buf); + tt_int_op(strlen(expected_out),OP_EQ, pos); + tt_str_op(expected_out,OP_EQ, stdout_buf); notify_pending_waitpid_callbacks(); /* Check it terminated correctly */ retval = tor_get_exit_code(process_handle, 1, &exit_code); - tt_int_op(PROCESS_EXIT_EXITED,==, retval); - tt_int_op(expected_exit,==, exit_code); + tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval); + tt_int_op(expected_exit,OP_EQ, exit_code); // TODO: Make test-child exit with something other than 0 #ifndef _WIN32 notify_pending_waitpid_callbacks(); - tt_ptr_op(process_handle->waitpid_cb, ==, NULL); + tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL); #endif /* Check stderr */ @@ -3632,8 +3632,8 @@ run_util_spawn_background(const char *argv[], const char *expected_out, sizeof(stderr_buf) - 1); tt_assert(pos >= 0); stderr_buf[pos] = '\0'; - tt_str_op(expected_err,==, stderr_buf); - tt_int_op(strlen(expected_err),==, pos); + tt_str_op(expected_err,OP_EQ, stderr_buf); + tt_int_op(strlen(expected_err),OP_EQ, pos); notify_pending_waitpid_callbacks(); @@ -3722,9 +3722,9 @@ test_util_spawn_background_partial_read_impl(int exit_early) #else status = tor_spawn_background(argv[0], argv, NULL, &process_handle); #endif - tt_int_op(expected_status,==, status); + tt_int_op(expected_status,OP_EQ, status); tt_assert(process_handle); - tt_int_op(expected_status,==, process_handle->status); + tt_int_op(expected_status,OP_EQ, process_handle->status); /* Check stdout */ for (expected_out_ctr = 0; expected_out[expected_out_ctr] != NULL;) { @@ -3745,8 +3745,8 @@ test_util_spawn_background_partial_read_impl(int exit_early) tt_assert(pos > 0); stdout_buf[pos] = '\0'; - tt_str_op(expected_out[expected_out_ctr],==, stdout_buf); - tt_int_op(strlen(expected_out[expected_out_ctr]),==, pos); + tt_str_op(expected_out[expected_out_ctr],OP_EQ, stdout_buf); + tt_int_op(strlen(expected_out[expected_out_ctr]),OP_EQ, pos); expected_out_ctr++; } @@ -3761,14 +3761,14 @@ test_util_spawn_background_partial_read_impl(int exit_early) pos = tor_read_all_handle(process_handle->stdout_pipe, stdout_buf, sizeof(stdout_buf) - 1, process_handle); - tt_int_op(0,==, pos); + tt_int_op(0,OP_EQ, pos); #else if (!eof) { /* We should have got all the data, but maybe not the EOF flag */ pos = tor_read_all_handle(process_handle->stdout_handle, stdout_buf, sizeof(stdout_buf) - 1, process_handle, &eof); - tt_int_op(0,==, pos); + tt_int_op(0,OP_EQ, pos); tt_assert(eof); } /* Otherwise, we got the EOF on the last read */ @@ -3776,8 +3776,8 @@ test_util_spawn_background_partial_read_impl(int exit_early) /* Check it terminated correctly */ retval = tor_get_exit_code(process_handle, 1, &exit_code); - tt_int_op(PROCESS_EXIT_EXITED,==, retval); - tt_int_op(expected_exit,==, exit_code); + tt_int_op(PROCESS_EXIT_EXITED,OP_EQ, retval); + tt_int_op(expected_exit,OP_EQ, exit_code); // TODO: Make test-child exit with something other than 0 @@ -3786,8 +3786,8 @@ test_util_spawn_background_partial_read_impl(int exit_early) sizeof(stderr_buf) - 1); tt_assert(pos >= 0); stderr_buf[pos] = '\0'; - tt_str_op(expected_err,==, stderr_buf); - tt_int_op(strlen(expected_err),==, pos); + tt_str_op(expected_err,OP_EQ, stderr_buf); + tt_int_op(strlen(expected_err),OP_EQ, pos); done: tor_process_handle_destroy(process_handle, 1); @@ -3825,8 +3825,8 @@ test_util_spawn_background_waitpid_notify(void *arg) status = tor_spawn_background(argv[0], argv, NULL, &process_handle); #endif - tt_int_op(status, ==, PROCESS_STATUS_RUNNING); - tt_ptr_op(process_handle, !=, NULL); + tt_int_op(status, OP_EQ, PROCESS_STATUS_RUNNING); + tt_ptr_op(process_handle, OP_NE, NULL); /* We're not going to look at the stdout/stderr output this time. Instead, * we're testing whether notify_pending_waitpid_calbacks() can report the @@ -3835,14 +3835,14 @@ test_util_spawn_background_waitpid_notify(void *arg) #ifndef _WIN32 ms_timer = 30*1000; - tt_ptr_op(process_handle->waitpid_cb, !=, NULL); + tt_ptr_op(process_handle->waitpid_cb, OP_NE, NULL); while (process_handle->waitpid_cb && ms_timer > 0) { tor_sleep_msec(100); ms_timer -= 100; notify_pending_waitpid_callbacks(); } - tt_int_op(ms_timer, >, 0); - tt_ptr_op(process_handle->waitpid_cb, ==, NULL); + tt_int_op(ms_timer, OP_GT, 0); + tt_ptr_op(process_handle->waitpid_cb, OP_EQ, NULL); #endif ms_timer = 30*1000; @@ -3851,9 +3851,9 @@ test_util_spawn_background_waitpid_notify(void *arg) tor_sleep_msec(100); ms_timer -= 100; } - tt_int_op(ms_timer, >, 0); + tt_int_op(ms_timer, OP_GT, 0); - tt_int_op(retval, ==, PROCESS_EXIT_EXITED); + tt_int_op(retval, OP_EQ, PROCESS_EXIT_EXITED); done: tor_process_handle_destroy(process_handle, 1); @@ -3899,15 +3899,15 @@ test_util_format_hex_number(void *ptr) for (i = 0; test_data[i].str != NULL; ++i) { len = format_hex_number_sigsafe(test_data[i].x, buf, sizeof(buf)); - tt_int_op(len,!=, 0); - tt_int_op(len,==, strlen(buf)); - tt_str_op(buf,==, test_data[i].str); + tt_int_op(len,OP_NE, 0); + tt_int_op(len,OP_EQ, strlen(buf)); + tt_str_op(buf,OP_EQ, test_data[i].str); } - tt_int_op(4,==, format_hex_number_sigsafe(0xffff, buf, 5)); - tt_str_op(buf,==, "FFFF"); - tt_int_op(0,==, format_hex_number_sigsafe(0xffff, buf, 4)); - tt_int_op(0,==, format_hex_number_sigsafe(0, buf, 1)); + tt_int_op(4,OP_EQ, format_hex_number_sigsafe(0xffff, buf, 5)); + tt_str_op(buf,OP_EQ, "FFFF"); + tt_int_op(0,OP_EQ, format_hex_number_sigsafe(0xffff, buf, 4)); + tt_int_op(0,OP_EQ, format_hex_number_sigsafe(0, buf, 1)); done: return; @@ -3943,21 +3943,21 @@ test_util_format_dec_number(void *ptr) for (i = 0; test_data[i].str != NULL; ++i) { len = format_dec_number_sigsafe(test_data[i].x, buf, sizeof(buf)); - tt_int_op(len,!=, 0); - tt_int_op(len,==, strlen(buf)); - tt_str_op(buf,==, test_data[i].str); + tt_int_op(len,OP_NE, 0); + tt_int_op(len,OP_EQ, strlen(buf)); + tt_str_op(buf,OP_EQ, test_data[i].str); len = format_dec_number_sigsafe(test_data[i].x, buf, (int)(strlen(test_data[i].str) + 1)); - tt_int_op(len,==, strlen(buf)); - tt_str_op(buf,==, test_data[i].str); + tt_int_op(len,OP_EQ, strlen(buf)); + tt_str_op(buf,OP_EQ, test_data[i].str); } - tt_int_op(4,==, format_dec_number_sigsafe(7331, buf, 5)); - tt_str_op(buf,==, "7331"); - tt_int_op(0,==, format_dec_number_sigsafe(7331, buf, 4)); - tt_int_op(1,==, format_dec_number_sigsafe(0, buf, 2)); - tt_int_op(0,==, format_dec_number_sigsafe(0, buf, 1)); + tt_int_op(4,OP_EQ, format_dec_number_sigsafe(7331, buf, 5)); + tt_str_op(buf,OP_EQ, "7331"); + tt_int_op(0,OP_EQ, format_dec_number_sigsafe(7331, buf, 4)); + tt_int_op(1,OP_EQ, format_dec_number_sigsafe(0, buf, 2)); + tt_int_op(0,OP_EQ, format_dec_number_sigsafe(0, buf, 1)); done: return; @@ -4006,7 +4006,7 @@ test_util_join_win_cmdline(void *ptr) for (i=0; cmdlines[i]!=NULL; i++) { log_info(LD_GENERAL, "Joining argvs[%d], expecting <%s>", i, cmdlines[i]); joined_argv = tor_join_win_cmdline(argvs[i]); - tt_str_op(cmdlines[i],==, joined_argv); + tt_str_op(cmdlines[i],OP_EQ, joined_argv); tor_free(joined_argv); } @@ -4061,17 +4061,17 @@ test_util_split_lines(void *ptr) i, tests[i].orig_length); SMARTLIST_FOREACH_BEGIN(sl, const char *, line) { /* Check we have not got too many lines */ - tt_int_op(MAX_SPLIT_LINE_COUNT, >, j); + tt_int_op(MAX_SPLIT_LINE_COUNT, OP_GT, j); /* Check that there actually should be a line here */ tt_assert(tests[i].split_line[j] != NULL); log_info(LD_GENERAL, "Line %d of test %d, should be <%s>", j, i, tests[i].split_line[j]); /* Check that the line is as expected */ - tt_str_op(line,==, tests[i].split_line[j]); + tt_str_op(line,OP_EQ, tests[i].split_line[j]); j++; } SMARTLIST_FOREACH_END(line); /* Check that we didn't miss some lines */ - tt_ptr_op(NULL,==, tests[i].split_line[j]); + tt_ptr_op(NULL,OP_EQ, tests[i].split_line[j]); tor_free(orig_line); smartlist_free(sl); sl = NULL; @@ -4107,7 +4107,7 @@ test_util_di_ops(void *arg) for (i = 0; examples[i].a; ++i) { size_t len = strlen(examples[i].a); int eq1, eq2, neq1, neq2, cmp1, cmp2; - tt_int_op(len,==, strlen(examples[i].b)); + tt_int_op(len,OP_EQ, strlen(examples[i].b)); /* We do all of the operations, with operands in both orders. */ eq1 = tor_memeq(examples[i].a, examples[i].b, len); eq2 = tor_memeq(examples[i].b, examples[i].a, len); @@ -4125,11 +4125,11 @@ test_util_di_ops(void *arg) TT_DIE(("Assertion failed.")); /* Check for consistency of everything else with cmp1 */ - tt_int_op(eq1,==, eq2); - tt_int_op(neq1,==, neq2); - tt_int_op(cmp1,==, -cmp2); - tt_int_op(eq1,==, cmp1 == 0); - tt_int_op(neq1,==, !eq1); + tt_int_op(eq1,OP_EQ, eq2); + tt_int_op(neq1,OP_EQ, neq2); + tt_int_op(cmp1,OP_EQ, -cmp2); + tt_int_op(eq1,OP_EQ, cmp1 == 0); + tt_int_op(neq1,OP_EQ, !eq1); } { @@ -4144,22 +4144,22 @@ test_util_di_ops(void *arg) for (i = 0; i < 256; i++) { ii = (uint8_t)i; zz = (uint8_t)z; - tt_int_op(tor_memeq(&zz, &ii, 1),==, zz == ii); - tt_int_op(tor_memcmp(&zz, &ii, 1) > 0 ? GT : EQ,==, zz > ii ? GT : EQ); - tt_int_op(tor_memcmp(&ii, &zz, 1) < 0 ? LT : EQ,==, ii < zz ? LT : EQ); + tt_int_op(tor_memeq(&zz, &ii, 1),OP_EQ, zz == ii); + tt_int_op(tor_memcmp(&zz, &ii, 1) > 0 ? GT : EQ,OP_EQ, zz > ii ? GT : EQ); + tt_int_op(tor_memcmp(&ii, &zz, 1) < 0 ? LT : EQ,OP_EQ, ii < zz ? LT : EQ); } } } - tt_int_op(1, ==, safe_mem_is_zero("", 0)); - tt_int_op(1, ==, safe_mem_is_zero("", 1)); - tt_int_op(0, ==, safe_mem_is_zero("a", 1)); - tt_int_op(0, ==, safe_mem_is_zero("a", 2)); - tt_int_op(0, ==, safe_mem_is_zero("\0a", 2)); - tt_int_op(1, ==, safe_mem_is_zero("\0\0a", 2)); - tt_int_op(1, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0", 8)); - tt_int_op(1, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 8)); - tt_int_op(0, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 9)); + tt_int_op(1, OP_EQ, safe_mem_is_zero("", 0)); + tt_int_op(1, OP_EQ, safe_mem_is_zero("", 1)); + tt_int_op(0, OP_EQ, safe_mem_is_zero("a", 1)); + tt_int_op(0, OP_EQ, safe_mem_is_zero("a", 2)); + tt_int_op(0, OP_EQ, safe_mem_is_zero("\0a", 2)); + tt_int_op(1, OP_EQ, safe_mem_is_zero("\0\0a", 2)); + tt_int_op(1, OP_EQ, safe_mem_is_zero("\0\0\0\0\0\0\0\0", 8)); + tt_int_op(1, OP_EQ, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 8)); + tt_int_op(0, OP_EQ, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 9)); done: ; @@ -4172,12 +4172,12 @@ static void test_util_n_bits_set(void *ptr) { (void)ptr; - tt_int_op(0,==, n_bits_set_u8(0)); - tt_int_op(1,==, n_bits_set_u8(1)); - tt_int_op(3,==, n_bits_set_u8(7)); - tt_int_op(1,==, n_bits_set_u8(8)); - tt_int_op(2,==, n_bits_set_u8(129)); - tt_int_op(8,==, n_bits_set_u8(255)); + tt_int_op(0,OP_EQ, n_bits_set_u8(0)); + tt_int_op(1,OP_EQ, n_bits_set_u8(1)); + tt_int_op(3,OP_EQ, n_bits_set_u8(7)); + tt_int_op(1,OP_EQ, n_bits_set_u8(8)); + tt_int_op(2,OP_EQ, n_bits_set_u8(129)); + tt_int_op(8,OP_EQ, n_bits_set_u8(255)); done: ; } @@ -4198,78 +4198,78 @@ test_util_eat_whitespace(void *ptr) strlcpy(str, "fuubaar", sizeof(str)); for (i = 0; i < sizeof(ws); ++i) { str[0] = ws[i]; - tt_ptr_op(str + 1,==, eat_whitespace(str)); - tt_ptr_op(str + 1,==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str + 1,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str + 1,==, eat_whitespace_eos_no_nl(str, str + strlen(str))); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); } str[0] = '\n'; - tt_ptr_op(str + 1,==, eat_whitespace(str)); - tt_ptr_op(str + 1,==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str + strlen(str))); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Empty string */ strlcpy(str, "", sizeof(str)); - tt_ptr_op(str,==, eat_whitespace(str)); - tt_ptr_op(str,==, eat_whitespace_eos(str, str)); - tt_ptr_op(str,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str)); + tt_ptr_op(str,OP_EQ, eat_whitespace(str)); + tt_ptr_op(str,OP_EQ, eat_whitespace_eos(str, str)); + tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str)); /* Only ws */ strlcpy(str, " \t\r\n", sizeof(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str + strlen(str) - 1,==, + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + strlen(str) - 1,OP_EQ, eat_whitespace_no_nl(str)); - tt_ptr_op(str + strlen(str) - 1,==, + tt_ptr_op(str + strlen(str) - 1,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); strlcpy(str, " \t\r ", sizeof(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),==, + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str + strlen(str),==, eat_whitespace_no_nl(str)); - tt_ptr_op(str + strlen(str),==, + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Multiple ws */ strlcpy(str, "fuubaar", sizeof(str)); for (i = 0; i < sizeof(ws); ++i) str[i] = ws[i]; - tt_ptr_op(str + sizeof(ws),==, eat_whitespace(str)); - tt_ptr_op(str + sizeof(ws),==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str + sizeof(ws),==, eat_whitespace_no_nl(str)); - tt_ptr_op(str + sizeof(ws),==, + tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Eat comment */ strlcpy(str, "# Comment \n No Comment", sizeof(str)); - tt_str_op("No Comment",==, eat_whitespace(str)); - tt_str_op("No Comment",==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str + strlen(str))); + tt_str_op("No Comment",OP_EQ, eat_whitespace(str)); + tt_str_op("No Comment",OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Eat comment & ws mix */ strlcpy(str, " # \t Comment \n\t\nNo Comment", sizeof(str)); - tt_str_op("No Comment",==, eat_whitespace(str)); - tt_str_op("No Comment",==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str + 1,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str + 1,==, eat_whitespace_eos_no_nl(str, str + strlen(str))); + tt_str_op("No Comment",OP_EQ, eat_whitespace(str)); + tt_str_op("No Comment",OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str + 1,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Eat entire comment */ strlcpy(str, "#Comment", sizeof(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str,==, eat_whitespace_eos_no_nl(str, str + strlen(str))); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Blank line, then comment */ strlcpy(str, " \t\n # Comment", sizeof(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),==, eat_whitespace_eos(str, str + strlen(str))); - tt_ptr_op(str + 2,==, eat_whitespace_no_nl(str)); - tt_ptr_op(str + 2,==, eat_whitespace_eos_no_nl(str, str + strlen(str))); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); + tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + 2,OP_EQ, eat_whitespace_no_nl(str)); + tt_ptr_op(str + 2,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); done: ; @@ -4308,11 +4308,11 @@ test_util_sl_new_from_text_lines(void *ptr) smartlist_t *sl = smartlist_new_from_text_lines("foo\nbar\nbaz\n"); int sl_len = smartlist_len(sl); - tt_want_int_op(sl_len, ==, 3); + tt_want_int_op(sl_len, OP_EQ, 3); - if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), ==, "foo"); - if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), ==, "bar"); - if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), ==, "baz"); + if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), OP_EQ, "foo"); + if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), OP_EQ, "bar"); + if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), OP_EQ, "baz"); SMARTLIST_FOREACH(sl, void *, x, tor_free(x)); smartlist_free(sl); @@ -4322,11 +4322,11 @@ test_util_sl_new_from_text_lines(void *ptr) smartlist_t *sl = smartlist_new_from_text_lines("foo\nbar\nbaz"); int sl_len = smartlist_len(sl); - tt_want_int_op(sl_len, ==, 3); + tt_want_int_op(sl_len, OP_EQ, 3); - if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), ==, "foo"); - if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), ==, "bar"); - if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), ==, "baz"); + if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), OP_EQ, "foo"); + if (sl_len > 1) tt_want_str_op(smartlist_get(sl, 1), OP_EQ, "bar"); + if (sl_len > 2) tt_want_str_op(smartlist_get(sl, 2), OP_EQ, "baz"); SMARTLIST_FOREACH(sl, void *, x, tor_free(x)); smartlist_free(sl); @@ -4336,9 +4336,9 @@ test_util_sl_new_from_text_lines(void *ptr) smartlist_t *sl = smartlist_new_from_text_lines("foo"); int sl_len = smartlist_len(sl); - tt_want_int_op(sl_len, ==, 1); + tt_want_int_op(sl_len, OP_EQ, 1); - if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), ==, "foo"); + if (sl_len > 0) tt_want_str_op(smartlist_get(sl, 0), OP_EQ, "foo"); SMARTLIST_FOREACH(sl, void *, x, tor_free(x)); smartlist_free(sl); @@ -4348,7 +4348,7 @@ test_util_sl_new_from_text_lines(void *ptr) smartlist_t *sl = smartlist_new_from_text_lines(""); int sl_len = smartlist_len(sl); - tt_want_int_op(sl_len, ==, 0); + tt_want_int_op(sl_len, OP_EQ, 0); SMARTLIST_FOREACH(sl, void *, x, tor_free(x)); smartlist_free(sl); @@ -4431,7 +4431,7 @@ test_util_make_environment(void *ptr) smartlist_sort_strings(env_vars_sorted); smartlist_sort_strings(env_vars_in_unixoid_env_block_sorted); - tt_want_int_op(smartlist_len(env_vars_sorted), ==, + tt_want_int_op(smartlist_len(env_vars_sorted), OP_EQ, smartlist_len(env_vars_in_unixoid_env_block_sorted)); { int len = smartlist_len(env_vars_sorted); @@ -4442,7 +4442,7 @@ test_util_make_environment(void *ptr) } for (i = 0; i < len; ++i) { - tt_want_str_op(smartlist_get(env_vars_sorted, i), ==, + tt_want_str_op(smartlist_get(env_vars_sorted, i), OP_EQ, smartlist_get(env_vars_in_unixoid_env_block_sorted, i)); } } @@ -4524,7 +4524,7 @@ test_util_set_env_var_in_sl(void *ptr) smartlist_sort_strings(merged_env_vars); smartlist_sort_strings(expected_resulting_env_vars); - tt_want_int_op(smartlist_len(merged_env_vars), ==, + tt_want_int_op(smartlist_len(merged_env_vars), OP_EQ, smartlist_len(expected_resulting_env_vars)); { int len = smartlist_len(merged_env_vars); @@ -4535,7 +4535,7 @@ test_util_set_env_var_in_sl(void *ptr) } for (i = 0; i < len; ++i) { - tt_want_str_op(smartlist_get(merged_env_vars, i), ==, + tt_want_str_op(smartlist_get(merged_env_vars, i), OP_EQ, smartlist_get(expected_resulting_env_vars, i)); } } @@ -4562,8 +4562,8 @@ test_util_weak_random(void *arg) for (i = 1; i <= 256; ++i) { for (j=0;j<100;++j) { int r = tor_weak_random_range(&rng, i); - tt_int_op(0, <=, r); - tt_int_op(r, <, i); + tt_int_op(0, OP_LE, r); + tt_int_op(r, OP_LT, i); } } @@ -4573,7 +4573,7 @@ test_util_weak_random(void *arg) } for (i=0;i<16;++i) - tt_int_op(n[i], >, 0); + tt_int_op(n[i], OP_GT, 0); done: ; } @@ -4585,9 +4585,9 @@ test_util_mathlog(void *arg) (void) arg; d = tor_mathlog(2.718281828); - tt_double_op(fabs(d - 1.0), <, .000001); + tt_double_op(fabs(d - 1.0), OP_LT, .000001); d = tor_mathlog(10); - tt_double_op(fabs(d - 2.30258509), <, .000001); + tt_double_op(fabs(d - 2.30258509), OP_LT, .000001); done: ; } @@ -4671,36 +4671,36 @@ test_util_socket(void *arg) fd2 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 0, 1); tt_assert(SOCKET_OK(fd1)); tt_assert(SOCKET_OK(fd2)); - tt_int_op(get_n_open_sockets(), ==, n + 2); + tt_int_op(get_n_open_sockets(), OP_EQ, n + 2); //fd3 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 1, 0); //fd4 = tor_open_socket_with_extensions(AF_INET, SOCK_STREAM, 0, 1, 1); fd3 = tor_open_socket(AF_INET, SOCK_STREAM, 0); fd4 = tor_open_socket_nonblocking(AF_INET, SOCK_STREAM, 0); tt_assert(SOCKET_OK(fd3)); tt_assert(SOCKET_OK(fd4)); - tt_int_op(get_n_open_sockets(), ==, n + 4); + tt_int_op(get_n_open_sockets(), OP_EQ, n + 4); #ifdef CAN_CHECK_CLOEXEC - tt_int_op(fd_is_cloexec(fd1), ==, 0); - tt_int_op(fd_is_cloexec(fd2), ==, 0); - tt_int_op(fd_is_cloexec(fd3), ==, 1); - tt_int_op(fd_is_cloexec(fd4), ==, 1); + tt_int_op(fd_is_cloexec(fd1), OP_EQ, 0); + tt_int_op(fd_is_cloexec(fd2), OP_EQ, 0); + tt_int_op(fd_is_cloexec(fd3), OP_EQ, 1); + tt_int_op(fd_is_cloexec(fd4), OP_EQ, 1); #endif #ifdef CAN_CHECK_NONBLOCK - tt_int_op(fd_is_nonblocking(fd1), ==, 0); - tt_int_op(fd_is_nonblocking(fd2), ==, 1); - tt_int_op(fd_is_nonblocking(fd3), ==, 0); - tt_int_op(fd_is_nonblocking(fd4), ==, 1); + tt_int_op(fd_is_nonblocking(fd1), OP_EQ, 0); + tt_int_op(fd_is_nonblocking(fd2), OP_EQ, 1); + tt_int_op(fd_is_nonblocking(fd3), OP_EQ, 0); + tt_int_op(fd_is_nonblocking(fd4), OP_EQ, 1); #endif tor_close_socket(fd1); tor_close_socket(fd2); fd1 = fd2 = TOR_INVALID_SOCKET; - tt_int_op(get_n_open_sockets(), ==, n + 2); + tt_int_op(get_n_open_sockets(), OP_EQ, n + 2); tor_close_socket(fd3); tor_close_socket(fd4); fd3 = fd4 = TOR_INVALID_SOCKET; - tt_int_op(get_n_open_sockets(), ==, n); + tt_int_op(get_n_open_sockets(), OP_EQ, n); done: if (SOCKET_OK(fd1)) @@ -4742,17 +4742,17 @@ test_util_socketpair(void *arg) tor_socket_t fds[2] = {TOR_INVALID_SOCKET, TOR_INVALID_SOCKET}; const int family = AF_UNIX; - tt_int_op(0, ==, tor_socketpair_fn(family, SOCK_STREAM, 0, fds)); + tt_int_op(0, OP_EQ, tor_socketpair_fn(family, SOCK_STREAM, 0, fds)); tt_assert(SOCKET_OK(fds[0])); tt_assert(SOCKET_OK(fds[1])); - tt_int_op(get_n_open_sockets(), ==, n + 2); + tt_int_op(get_n_open_sockets(), OP_EQ, n + 2); #ifdef CAN_CHECK_CLOEXEC - tt_int_op(fd_is_cloexec(fds[0]), ==, 1); - tt_int_op(fd_is_cloexec(fds[1]), ==, 1); + tt_int_op(fd_is_cloexec(fds[0]), OP_EQ, 1); + tt_int_op(fd_is_cloexec(fds[1]), OP_EQ, 1); #endif #ifdef CAN_CHECK_NONBLOCK - tt_int_op(fd_is_nonblocking(fds[0]), ==, 0); - tt_int_op(fd_is_nonblocking(fds[1]), ==, 0); + tt_int_op(fd_is_nonblocking(fds[0]), OP_EQ, 0); + tt_int_op(fd_is_nonblocking(fds[1]), OP_EQ, 0); #endif done: @@ -4771,18 +4771,18 @@ test_util_max_mem(void *arg) r = get_total_system_memory(&memory1); r2 = get_total_system_memory(&memory2); - tt_int_op(r, ==, r2); - tt_uint_op(memory2, ==, memory1); + tt_int_op(r, OP_EQ, r2); + tt_uint_op(memory2, OP_EQ, memory1); TT_BLATHER(("System memory: "U64_FORMAT, U64_PRINTF_ARG(memory1))); if (r==0) { /* You have at least a megabyte. */ - tt_uint_op(memory1, >, (1<<20)); + tt_uint_op(memory1, OP_GT, (1<<20)); } else { /* You do not have a petabyte. */ #if SIZEOF_SIZE_T == SIZEOF_UINT64_T - tt_uint_op(memory1, <, (U64_LITERAL(1)<<50)); + tt_uint_op(memory1, OP_LT, (U64_LITERAL(1)<<50)); #endif } From 4ac5175109b14f8fafca3374ab5ca63968ab2cca Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 12 Nov 2014 13:42:01 -0500 Subject: [PATCH 148/184] Fix wide lines (from 13172) --- src/test/test.c | 2 +- src/test/test_addr.c | 16 +++++++---- src/test/test_buffers.c | 6 ++-- src/test/test_cell_formats.c | 3 +- src/test/test_config.c | 3 +- src/test/test_containers.c | 15 ++++++---- src/test/test_crypto.c | 15 ++++++---- src/test/test_dir.c | 28 ++++++++++-------- src/test/test_entrynodes.c | 8 ++++-- src/test/test_extorport.c | 9 ++++-- src/test/test_socks.c | 4 +-- src/test/test_status.c | 7 +++-- src/test/test_util.c | 55 +++++++++++++++++++++++------------- 13 files changed, 107 insertions(+), 64 deletions(-) diff --git a/src/test/test.c b/src/test/test.c index 8227176f24..07901ab107 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -704,7 +704,7 @@ test_rend_fns(void *arg) smartlist_get(descs, 0))->desc_str) == 0); tt_assert(parsed); tt_mem_op(((rend_encoded_v2_service_descriptor_t *) - smartlist_get(descs, 0))->desc_id,OP_EQ, parsed_desc_id, DIGEST_LEN); + smartlist_get(descs, 0))->desc_id,OP_EQ, parsed_desc_id, DIGEST_LEN); tt_int_op(rend_parse_introduction_points(parsed, intro_points_encrypted, intro_points_size),OP_EQ, 3); tt_assert(!crypto_pk_cmp_keys(generated->pk, parsed->pk)); diff --git a/src/test/test_addr.c b/src/test/test_addr.c index b7fe2c47fc..a254a34e45 100644 --- a/src/test/test_addr.c +++ b/src/test/test_addr.c @@ -62,12 +62,13 @@ test_addr_basic(void *arg) struct in_addr in; /* good round trip */ - tt_int_op(tor_inet_pton(AF_INET, ip, &in),OP_EQ, 1); - tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)),OP_EQ, &tmpbuf); + tt_int_op(tor_inet_pton(AF_INET, ip, &in), OP_EQ, 1); + tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, sizeof(tmpbuf)), + OP_EQ, &tmpbuf); tt_str_op(tmpbuf,OP_EQ, ip); /* just enough buffer length */ - tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1),OP_EQ, ip); + tt_str_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip) + 1), OP_EQ, ip); /* too short buffer */ tt_ptr_op(tor_inet_ntop(AF_INET, &in, tmpbuf, strlen(ip)),OP_EQ, NULL); @@ -414,7 +415,8 @@ test_addr_ip6_helpers(void *arg) test_addr_compare("0::3:2:1", OP_LT, "0::ffff:0.3.2.1"); test_addr_compare("0::2:2:1", OP_LT, "0::ffff:0.3.2.1"); test_addr_compare("0::ffff:0.3.2.1", OP_GT, "0::0:0:0"); - test_addr_compare("0::ffff:5.2.2.1", OP_LT, "::ffff:6.0.0.0"); /* XXXX wrong. */ + test_addr_compare("0::ffff:5.2.2.1", OP_LT, + "::ffff:6.0.0.0"); /* XXXX wrong. */ tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", 0, &t1, NULL, NULL, NULL); tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL); tt_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0); @@ -461,7 +463,8 @@ test_addr_ip6_helpers(void *arg) tt_ptr_op(tor_addr_to_str(buf, &t1, 7, 0),OP_EQ, NULL); /* too short buf */ tt_str_op(tor_addr_to_str(buf, &t1, 8, 0),OP_EQ, "1.2.3.4"); - tt_int_op(AF_INET,OP_EQ, tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */ + tt_int_op(AF_INET, OP_EQ, + tor_addr_parse(&t1, "255.255.255.255")); /* 15 + \0 */ tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 0),OP_EQ, NULL); /* too short buf */ tt_str_op(tor_addr_to_str(buf, &t1, 16, 0),OP_EQ, "255.255.255.255"); tt_ptr_op(tor_addr_to_str(buf, &t1, 15, 1),OP_EQ, NULL); /* too short buf */ @@ -1014,7 +1017,8 @@ test_addr_is_loopback(void *data) for (i=0; loopback_items[i].name; ++i) { tt_int_op(tor_addr_parse(&addr, loopback_items[i].name), OP_GE, 0); - tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, loopback_items[i].is_loopback); + tt_int_op(tor_addr_is_loopback(&addr), OP_EQ, + loopback_items[i].is_loopback); } tor_addr_make_unspec(&addr); diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c index 7e42124a1c..cb29ab0a9e 100644 --- a/src/test/test_buffers.c +++ b/src/test/test_buffers.c @@ -499,7 +499,8 @@ test_buffer_allocation_tracking(void *arg) tt_int_op(buf_get_total_allocation(), OP_EQ, 16384); write_to_buf(junk, 4000, buf2); tt_int_op(buf_allocation(buf2), OP_EQ, 8192); /* another 4k chunk. */ - tt_int_op(buf_get_total_allocation(), OP_EQ, 5*4096); /* that chunk was new. */ + tt_int_op(buf_get_total_allocation(), + OP_EQ, 5*4096); /* that chunk was new. */ /* Make a really huge buffer */ for (i = 0; i < 1000; ++i) { @@ -554,7 +555,8 @@ test_buffer_time_tracking(void *arg) buf2 = buf_copy(buf); tt_assert(buf2); - tt_int_op(1234, OP_EQ, buf_get_oldest_chunk_timestamp(buf2, START_MSEC+1234)); + tt_int_op(1234, OP_EQ, + buf_get_oldest_chunk_timestamp(buf2, START_MSEC+1234)); /* Now add more bytes; enough to overflow the first chunk. */ tv0.tv_usec += 123 * 1000; diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c index edc011fc98..e1f6bd71f7 100644 --- a/src/test/test_cell_formats.c +++ b/src/test/test_cell_formats.c @@ -841,7 +841,8 @@ test_cfmt_extended_cells(void *arg) crypto_rand((char*)b, 42); memcpy(p,"\x00\x2a",2); memcpy(p+2,b,42); - tt_int_op(0, OP_EQ, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42)); + tt_int_op(0, OP_EQ, + extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42)); tt_int_op(RELAY_COMMAND_EXTENDED2, OP_EQ, ec.cell_type); tt_int_op(cc->cell_type, OP_EQ, CELL_CREATED2); tt_int_op(cc->handshake_len, OP_EQ, 42); diff --git a/src/test/test_config.c b/src/test/test_config.c index 1560c5c6f7..dcb4e92c56 100644 --- a/src/test/test_config.c +++ b/src/test/test_config.c @@ -839,7 +839,8 @@ test_config_fix_my_family(void *arg) TT_FAIL(("options_validate failed: %s", err)); } - tt_str_op(options->MyFamily,OP_EQ, "$1111111111111111111111111111111111111111, " + tt_str_op(options->MyFamily,OP_EQ, + "$1111111111111111111111111111111111111111, " "$1111111111111111111111111111111111111112, " "$1111111111111111111111111111111111111113"); diff --git a/src/test/test_containers.c b/src/test/test_containers.c index 89eb1a20b5..1eb8c15fd5 100644 --- a/src/test/test_containers.c +++ b/src/test/test_containers.c @@ -241,11 +241,14 @@ test_container_smartlist_strings(void *arg) tt_int_op(f,OP_EQ, 1); tt_int_op(1,OP_EQ, smartlist_bsearch_idx(sl," arm",cmp_without_first_,&f)); tt_int_op(f,OP_EQ, 0); - tt_int_op(1,OP_EQ, smartlist_bsearch_idx(sl," arma",cmp_without_first_,&f)); + tt_int_op(1,OP_EQ, + smartlist_bsearch_idx(sl," arma",cmp_without_first_,&f)); tt_int_op(f,OP_EQ, 1); - tt_int_op(2,OP_EQ, smartlist_bsearch_idx(sl," armb",cmp_without_first_,&f)); + tt_int_op(2,OP_EQ, + smartlist_bsearch_idx(sl," armb",cmp_without_first_,&f)); tt_int_op(f,OP_EQ, 0); - tt_int_op(7,OP_EQ, smartlist_bsearch_idx(sl," zzzz",cmp_without_first_,&f)); + tt_int_op(7,OP_EQ, + smartlist_bsearch_idx(sl," zzzz",cmp_without_first_,&f)); tt_int_op(f,OP_EQ, 0); /* Test trivial cases for list of length 0 or 1 */ @@ -477,7 +480,8 @@ test_container_smartlist_join(void *arg) tt_str_op(joined,OP_EQ, "Anemias,Anemias,Crossbowmen,Work"); tor_free(joined); joined = smartlist_join_strings(sl4, ",", 0, NULL); - tt_str_op(joined,OP_EQ, "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance," + tt_str_op(joined,OP_EQ, + "Ambush,Anchorman,Anchorman,Bacon,Inhumane,Insurance," "Knish,Know,Manners,Manners,Maraschinos,Wombats,Wombats"); tor_free(joined); @@ -887,7 +891,8 @@ test_container_order_functions(void *arg) tt_int_op(7,OP_EQ, third_quartile()); /* 1, 2, 3, 4, 5, 6, ~7~, 8, 9 */ lst2[n++] = 10; lst2[n++] = 11; - tt_int_op(9,OP_EQ, third_quartile()); /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */ + /* 1, 2, 3, 4, 5, 6, 7, 8, ~9~, 10, 11 */ + tt_int_op(9,OP_EQ, third_quartile()); #undef third_quartile diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c index d3cd013879..5352b9fdb4 100644 --- a/src/test/test_crypto.c +++ b/src/test/test_crypto.c @@ -700,7 +700,8 @@ test_crypto_formats(void *arg) tt_int_op(strlen(data1),OP_EQ, 40); data2 = tor_malloc(FINGERPRINT_LEN+1); crypto_add_spaces_to_fp(data2, FINGERPRINT_LEN+1, data1); - tt_str_op(data2,OP_EQ, "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"); + tt_str_op(data2, OP_EQ, + "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"); tor_free(data1); tor_free(data2); } @@ -1474,7 +1475,8 @@ test_crypto_curve25519_persist(void *arg) tt_int_op(0,OP_EQ,curve25519_keypair_generate(&keypair, 0)); - tt_int_op(0,OP_EQ,curve25519_keypair_write_to_file(&keypair, fname, "testing")); + tt_int_op(0,OP_EQ, + curve25519_keypair_write_to_file(&keypair, fname, "testing")); tt_int_op(0,OP_EQ,curve25519_keypair_read_from_file(&keypair2, &tag, fname)); tt_str_op(tag,OP_EQ,"testing"); tor_free(tag); @@ -1505,12 +1507,15 @@ test_crypto_curve25519_persist(void *arg) tor_free(fname); fname = tor_strdup(get_fname("bogus_keypair")); - tt_int_op(-1, OP_EQ, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); + tt_int_op(-1, OP_EQ, + curve25519_keypair_read_from_file(&keypair2, &tag, fname)); tor_free(tag); content[69] ^= 0xff; - tt_int_op(0, OP_EQ, write_bytes_to_file(fname, content, (size_t)st.st_size, 1)); - tt_int_op(-1, OP_EQ, curve25519_keypair_read_from_file(&keypair2, &tag, fname)); + tt_int_op(0, OP_EQ, + write_bytes_to_file(fname, content, (size_t)st.st_size, 1)); + tt_int_op(-1, OP_EQ, + curve25519_keypair_read_from_file(&keypair2, &tag, fname)); done: tor_free(fname); diff --git a/src/test/test_dir.c b/src/test/test_dir.c index cdf16aded4..e5328fed56 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -879,7 +879,8 @@ test_dir_versions(void *arg) /* Now try svn revisions. */ tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)", "Tor 0.2.1.0-dev (r99)")); - tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100) on Banana Jr", + tt_int_op(1,OP_EQ, tor_version_as_new_as( + "Tor 0.2.1.0-dev (r100) on Banana Jr", "Tor 0.2.1.0-dev (r99) on Hal 9000")); tt_int_op(1,OP_EQ, tor_version_as_new_as("Tor 0.2.1.0-dev (r100)", "Tor 0.2.1.0-dev on Colossus")); @@ -929,7 +930,8 @@ test_dir_fp_pairs(void *arg) tt_mem_op(pair->first,OP_EQ, "Hexadecimal isn't so", DIGEST_LEN); tt_mem_op(pair->second,OP_EQ, "good for hiding your", DIGEST_LEN); pair = smartlist_get(sl, 1); - tt_mem_op(pair->first,OP_EQ, "secret data.\0\0\0\0\0\xff\xff\xff", DIGEST_LEN); + tt_mem_op(pair->first,OP_EQ, "secret data.\0\0\0\0\0\xff\xff\xff", + DIGEST_LEN); tt_mem_op(pair->second,OP_EQ, "Use AES-256 instead.", DIGEST_LEN); done: @@ -2067,8 +2069,8 @@ test_a_networkstatus( { digests_t *dsig_digests = strmap_get(dsig1->digests, "ns"); tt_assert(dsig_digests); - tt_mem_op(dsig_digests->d[DIGEST_SHA1],OP_EQ, con3->digests.d[DIGEST_SHA1], - DIGEST_LEN); + tt_mem_op(dsig_digests->d[DIGEST_SHA1], OP_EQ, + con3->digests.d[DIGEST_SHA1], DIGEST_LEN); dsig_digests = strmap_get(dsig1->digests, "microdesc"); tt_assert(dsig_digests); tt_mem_op(dsig_digests->d[DIGEST_SHA256],OP_EQ, @@ -2095,8 +2097,8 @@ test_a_networkstatus( /* Try adding it to con2. */ detached_text2 = get_detached_sigs(con2,con_md2); - tt_int_op(1,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1, "test", - LOG_INFO, &msg)); + tt_int_op(1,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1, + "test", LOG_INFO, &msg)); tor_free(detached_text2); tt_int_op(1,OP_EQ, networkstatus_add_detached_signatures(con_md2, dsig1, "test", @@ -2121,12 +2123,12 @@ test_a_networkstatus( "microdesc"))); /* Try adding to con2 twice; verify that nothing changes. */ - tt_int_op(0,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1, "test", - LOG_INFO, &msg)); + tt_int_op(0,OP_EQ, networkstatus_add_detached_signatures(con2, dsig1, + "test", LOG_INFO, &msg)); /* Add to con. */ - tt_int_op(2,OP_EQ, networkstatus_add_detached_signatures(con, dsig2, "test", - LOG_INFO, &msg)); + tt_int_op(2,OP_EQ, networkstatus_add_detached_signatures(con, dsig2, + "test", LOG_INFO, &msg)); /* Check signatures */ voter = smartlist_get(con->voters, 1); sig = smartlist_get(voter->sigs, 0); @@ -2832,7 +2834,8 @@ test_dir_http_handling(void *args) tt_str_op(url,OP_EQ, "/tor/a/b/c.txt"); tor_free(url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url),OP_EQ, 0); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url), + OP_EQ, 0); tt_str_op(url,OP_EQ, "/tor/a/b/c.txt"); tor_free(url); @@ -2867,7 +2870,8 @@ test_dir_http_handling(void *args) tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url),OP_EQ, -1); tt_assert(!url); - tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url),OP_EQ, -1); + tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url), + OP_EQ, -1); tt_assert(!url); tt_int_op(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url),OP_EQ, -1); diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c index eaf2e2df71..5bf2985d2f 100644 --- a/src/test/test_entrynodes.c +++ b/src/test/test_entrynodes.c @@ -75,7 +75,8 @@ setup_fake_routerlist(void) /* Sanity checking of routerlist and nodelist. */ our_routerlist = router_get_routerlist(); - tt_int_op(smartlist_len(our_routerlist->routers), OP_EQ, NUMBER_OF_DESCRIPTORS); + tt_int_op(smartlist_len(our_routerlist->routers), OP_EQ, + NUMBER_OF_DESCRIPTORS); routerlist_assert_ok(our_routerlist); our_nodelist = nodelist_get_list(); @@ -408,7 +409,7 @@ test_entry_guards_parse_state_simple(void *arg) tt_assert(e->is_dir_cache); /* Verify dirness */ - tt_str_op(e->chosen_by_version, OP_EQ, tor_version); /* Verify tor version */ + tt_str_op(e->chosen_by_version, OP_EQ, tor_version); /* Verify version */ tt_assert(e->made_contact); /* All saved guards have been contacted */ @@ -507,7 +508,8 @@ test_entry_guards_parse_state_pathbias(void *arg) /* XXX tt_double_op doesn't support equality. Cast to int for now. */ tt_int_op((int)e->circ_attempts, OP_EQ, (int)circ_attempts); tt_int_op((int)e->circ_successes, OP_EQ, (int)circ_successes); - tt_int_op((int)e->successful_circuits_closed, OP_EQ, (int)successful_closed); + tt_int_op((int)e->successful_circuits_closed, OP_EQ, + (int)successful_closed); tt_int_op((int)e->timeouts, OP_EQ, (int)timeouts); tt_int_op((int)e->collapsed_circuits, OP_EQ, (int)collapsed); tt_int_op((int)e->unusable_circuits, OP_EQ, (int)unusable); diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c index c9d8527ea2..d99961dd4a 100644 --- a/src/test/test_extorport.c +++ b/src/test/test_extorport.c @@ -24,7 +24,8 @@ test_ext_or_id_map(void *arg) (void)arg; /* pre-initialization */ - tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); + tt_ptr_op(NULL, OP_EQ, + connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); c1 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET); c2 = or_connection_new(CONN_TYPE_EXT_OR, AF_INET); @@ -36,7 +37,8 @@ test_ext_or_id_map(void *arg) tt_ptr_op(c1, OP_EQ, connection_or_get_by_ext_or_id(c1->ext_or_conn_id)); tt_ptr_op(c2, OP_EQ, connection_or_get_by_ext_or_id(c2->ext_or_conn_id)); - tt_ptr_op(NULL, OP_EQ, connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); + tt_ptr_op(NULL, OP_EQ, + connection_or_get_by_ext_or_id("xxxxxxxxxxxxxxxxxxxx")); idp = tor_memdup(c2->ext_or_conn_id, EXT_OR_CONN_ID_LEN); @@ -423,7 +425,8 @@ do_ext_or_handshake(or_connection_t *conn) MOCK(crypto_rand, crypto_rand_return_tse_str); tt_int_op(0, OP_EQ, connection_ext_or_process_inbuf(conn)); UNMOCK(crypto_rand); - tt_int_op(TO_CONN(conn)->state, OP_EQ, EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH); + tt_int_op(TO_CONN(conn)->state, OP_EQ, + EXT_OR_CONN_STATE_AUTH_WAIT_CLIENT_HASH); CONTAINS("\xec\x80\xed\x6e\x54\x6d\x3b\x36\xfd\xfc\x22\xfe\x13\x15\x41\x6b" "\x02\x9f\x1a\xde\x76\x10\xd9\x10\x87\x8b\x62\xee\xb7\x40\x38\x21" "te road There is always another ", 64); diff --git a/src/test/test_socks.c b/src/test/test_socks.c index 98c5be0119..fbb8b25980 100644 --- a/src/test/test_socks.c +++ b/src/test/test_socks.c @@ -432,8 +432,8 @@ test_socks_5_malformed_commands(void *ptr) */ ADD_DATA(buf, "\x05\x01\x00"); ADD_DATA(buf, "\x05\x01\x00\x01\x02\x02\x02\x02\x11\x11"); - tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1),OP_EQ, - -1); + tt_int_op(fetch_from_buf_socks(buf, socks, get_options()->TestSocks, 1), + OP_EQ, -1); tt_int_op(5,OP_EQ,socks->socks_version); tt_int_op(10,OP_EQ,socks->replylen); diff --git a/src/test/test_status.c b/src/test/test_status.c index dd825f2753..aa71aa6a9b 100644 --- a/src/test/test_status.c +++ b/src/test/test_status.c @@ -435,8 +435,8 @@ NS(logv)(int severity, log_domain_mask_t domain, case 2: tt_int_op(severity, OP_EQ, LOG_NOTICE); tt_int_op(domain, OP_EQ, LD_HEARTBEAT); - tt_ptr_op( - strstr(funcname, "rep_hist_log_circuit_handshake_stats"), OP_NE, NULL); + tt_ptr_op(strstr(funcname, "rep_hist_log_circuit_handshake_stats"), + OP_NE, NULL); tt_ptr_op(suffix, OP_EQ, NULL); tt_str_op(format, OP_EQ, "Circuit handshake stats since last time: %d/%d TAP, %d/%d NTor."); @@ -737,7 +737,8 @@ NS(logv)(int severity, log_domain_mask_t domain, tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_rcvd */ tt_str_op(va_arg(ap, char *), OP_EQ, "0 kB"); /* acc_max */ /* format_local_iso_time uses local tz, just check mins and secs. */ - tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"), OP_NE, NULL); /* end_buf */ + tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"), + OP_NE, NULL); /* end_buf */ tt_str_op(va_arg(ap, char *), OP_EQ, "0:01 hours"); /* remaining */ break; default: diff --git a/src/test/test_util.c b/src/test/test_util.c index 5211701cf1..b952bb2596 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -544,7 +544,8 @@ test_util_time(void *arg) tt_int_op(t_res,OP_EQ, (time_t)1091580502UL); /* The timezone doesn't matter */ t_res = 0; - tt_int_op(0,OP_EQ, parse_rfc1123_time("Wed, 04 Aug 2004 00:48:22 ZUL", &t_res)); + tt_int_op(0,OP_EQ, + parse_rfc1123_time("Wed, 04 Aug 2004 00:48:22 ZUL", &t_res)); tt_int_op(t_res,OP_EQ, (time_t)1091580502UL); tt_int_op(-1,OP_EQ, parse_rfc1123_time("Wed, zz Aug 2004 99-99x99 GMT", &t_res)); @@ -680,10 +681,12 @@ test_util_parse_http_time(void *arg) parse_http_time("Wednesday, 04-Aug-94 00:48:22 GMT", &a_time)); tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,OP_EQ, parse_http_time("Wednesday, 4-Aug-94 0:48:22 GMT", &a_time)); + tt_int_op(0,OP_EQ, + parse_http_time("Wednesday, 4-Aug-94 0:48:22 GMT", &a_time)); tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,OP_EQ, parse_http_time("Miercoles, 4-Aug-94 0:48:22 GMT", &a_time)); + tt_int_op(0,OP_EQ, + parse_http_time("Miercoles, 4-Aug-94 0:48:22 GMT", &a_time)); tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); tt_int_op(0,OP_EQ, parse_http_time("Wed Aug 04 00:48:22 1994", &a_time)); @@ -695,10 +698,10 @@ test_util_parse_http_time(void *arg) tt_int_op(0,OP_EQ, parse_http_time("Mie Aug 4 0:48:22 1994", &a_time)); tt_int_op((time_t)775961302UL,OP_EQ, tor_timegm(&a_time)); T("1994-08-04 00:48:22"); - tt_int_op(0,OP_EQ, parse_http_time("Sun, 1 Jan 2012 00:00:00 GMT", &a_time)); + tt_int_op(0,OP_EQ,parse_http_time("Sun, 1 Jan 2012 00:00:00 GMT", &a_time)); tt_int_op((time_t)1325376000UL,OP_EQ, tor_timegm(&a_time)); T("2012-01-01 00:00:00"); - tt_int_op(0,OP_EQ, parse_http_time("Mon, 31 Dec 2012 00:00:00 GMT", &a_time)); + tt_int_op(0,OP_EQ,parse_http_time("Mon, 31 Dec 2012 00:00:00 GMT", &a_time)); tt_int_op((time_t)1356912000UL,OP_EQ, tor_timegm(&a_time)); T("2012-12-31 00:00:00"); tt_int_op(-1,OP_EQ, parse_http_time("2004-08-zz 99-99x99 GMT", &a_time)); @@ -1373,7 +1376,8 @@ test_util_strmisc(void *arg) /* Test tor_parse_* where we overflow/underflow the underlying type. */ /* This string should overflow 64-bit ints. */ #define TOOBIG "100000000000000000000000000" - tt_int_op(0L,OP_EQ, tor_parse_long(TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL)); + tt_int_op(0L, OP_EQ, + tor_parse_long(TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL)); tt_int_op(i,OP_EQ, 0); tt_int_op(0L,OP_EQ, tor_parse_long("-"TOOBIG, 10, LONG_MIN, LONG_MAX, &i, NULL)); @@ -1551,10 +1555,10 @@ test_util_strmisc(void *arg) /* Test strcmp_len */ tt_int_op(strcmp_len("foo", "bar", 3), OP_GT, 0); - tt_int_op(strcmp_len("foo", "bar", 2), OP_LT, 0); /* First len, then lexical */ + tt_int_op(strcmp_len("foo", "bar", 2), OP_LT, 0); tt_int_op(strcmp_len("foo2", "foo1", 4), OP_GT, 0); tt_int_op(strcmp_len("foo2", "foo1", 3), OP_LT, 0); /* Really stop at len */ - tt_int_op(strcmp_len("foo2", "foo", 3), OP_EQ, 0); /* Really stop at len */ + tt_int_op(strcmp_len("foo2", "foo", 3), OP_EQ, 0); /* Really stop at len */ tt_int_op(strcmp_len("blah", "", 4), OP_GT, 0); tt_int_op(strcmp_len("blah", "", 0), OP_EQ, 0); @@ -1570,7 +1574,8 @@ test_util_pow2(void *arg) tt_int_op(tor_log2(64),OP_EQ, 6); tt_int_op(tor_log2(65),OP_EQ, 6); tt_int_op(tor_log2(63),OP_EQ, 5); - tt_int_op(tor_log2(0),OP_EQ, 0);/* incorrect mathematically, but as specified */ + /* incorrect mathematically, but as specified: */ + tt_int_op(tor_log2(0),OP_EQ, 0); tt_int_op(tor_log2(1),OP_EQ, 0); tt_int_op(tor_log2(2),OP_EQ, 1); tt_int_op(tor_log2(3),OP_EQ, 1); @@ -1835,7 +1840,8 @@ test_util_gzip(void *arg) tt_assert(!tor_gzip_uncompress(&buf3, &len2, buf1, 1024-len1, ZLIB_METHOD, 1, LOG_WARN)); - tt_str_op(buf3,OP_EQ,"ABCDEFGHIJABCDEFGHIJ"); /*Make sure it compressed right.*/ + /* Make sure it compressed right. */ + tt_str_op(buf3, OP_EQ, "ABCDEFGHIJABCDEFGHIJ"); tt_int_op(21,OP_EQ, len2); done: @@ -2043,7 +2049,8 @@ test_util_sscanf(void *arg) tt_int_op(99u,OP_EQ, u3); /* Hex (ie. %x) */ - tt_int_op(3,OP_EQ, tor_sscanf("1234 02aBcdEf ff", "%x %x %x", &u1, &u2, &u3)); + tt_int_op(3,OP_EQ, + tor_sscanf("1234 02aBcdEf ff", "%x %x %x", &u1, &u2, &u3)); tt_int_op(0x1234,OP_EQ, u1); tt_int_op(0x2ABCDEF,OP_EQ, u2); tt_int_op(0xFF,OP_EQ, u3); @@ -3067,12 +3074,14 @@ test_util_find_str_at_start_of_line(void *ptr) tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "he")); tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hell")); tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello k")); - tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello kitty\n")); + tt_ptr_op(line2,OP_EQ, + find_str_at_start_of_line(long_string, "hello kitty\n")); tt_ptr_op(line2,OP_EQ, find_str_at_start_of_line(long_string, "hello kitty\nt")); tt_ptr_op(line3,OP_EQ, find_str_at_start_of_line(long_string, "third")); tt_ptr_op(line3,OP_EQ, find_str_at_start_of_line(long_string, "third line")); - tt_ptr_op(NULL,OP_EQ, find_str_at_start_of_line(long_string, "third line\n")); + tt_ptr_op(NULL, OP_EQ, + find_str_at_start_of_line(long_string, "third line\n")); tt_ptr_op(short_line2,OP_EQ, find_str_at_start_of_line(short_string, "second line\n")); done: @@ -3283,7 +3292,7 @@ test_util_ftruncate(void *ptr) tt_int_op(fd, OP_GE, 0); /* Make the file be there. */ - tt_int_op(strlen(message), OP_EQ, write_all(fd, message, strlen(message), 0)); + tt_int_op(strlen(message), OP_EQ, write_all(fd, message, strlen(message),0)); tt_int_op((int)tor_fd_getpos(fd), OP_EQ, strlen(message)); tt_int_op(0, OP_EQ, fstat(fd, &st)); tt_int_op((int)st.st_size, OP_EQ, strlen(message)); @@ -4145,8 +4154,10 @@ test_util_di_ops(void *arg) ii = (uint8_t)i; zz = (uint8_t)z; tt_int_op(tor_memeq(&zz, &ii, 1),OP_EQ, zz == ii); - tt_int_op(tor_memcmp(&zz, &ii, 1) > 0 ? GT : EQ,OP_EQ, zz > ii ? GT : EQ); - tt_int_op(tor_memcmp(&ii, &zz, 1) < 0 ? LT : EQ,OP_EQ, ii < zz ? LT : EQ); + tt_int_op(tor_memcmp(&zz, &ii, 1) > 0 ? GT : EQ,OP_EQ, + zz > ii ? GT : EQ); + tt_int_op(tor_memcmp(&ii, &zz, 1) < 0 ? LT : EQ,OP_EQ, + ii < zz ? LT : EQ); } } } @@ -4219,7 +4230,8 @@ test_util_eat_whitespace(void *ptr) /* Only ws */ strlcpy(str, " \t\r\n", sizeof(str)); tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + strlen(str),OP_EQ, + eat_whitespace_eos(str, str + strlen(str))); tt_ptr_op(str + strlen(str) - 1,OP_EQ, eat_whitespace_no_nl(str)); tt_ptr_op(str + strlen(str) - 1,OP_EQ, @@ -4238,7 +4250,8 @@ test_util_eat_whitespace(void *ptr) for (i = 0; i < sizeof(ws); ++i) str[i] = ws[i]; tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace(str)); - tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + sizeof(ws),OP_EQ, + eat_whitespace_eos(str, str + strlen(str))); tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_no_nl(str)); tt_ptr_op(str + sizeof(ws),OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); @@ -4260,14 +4273,16 @@ test_util_eat_whitespace(void *ptr) /* Eat entire comment */ strlcpy(str, "#Comment", sizeof(str)); tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + strlen(str),OP_EQ, + eat_whitespace_eos(str, str + strlen(str))); tt_ptr_op(str,OP_EQ, eat_whitespace_no_nl(str)); tt_ptr_op(str,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); /* Blank line, then comment */ strlcpy(str, " \t\n # Comment", sizeof(str)); tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace(str)); - tt_ptr_op(str + strlen(str),OP_EQ, eat_whitespace_eos(str, str + strlen(str))); + tt_ptr_op(str + strlen(str),OP_EQ, + eat_whitespace_eos(str, str + strlen(str))); tt_ptr_op(str + 2,OP_EQ, eat_whitespace_no_nl(str)); tt_ptr_op(str + 2,OP_EQ, eat_whitespace_eos_no_nl(str, str + strlen(str))); From ad448c6405b02e72bc5145b82705733c53861a19 Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Sun, 9 Nov 2014 15:48:56 -0500 Subject: [PATCH 149/184] Add longclaw as a directory authority (#13296) --- src/or/config.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/or/config.c b/src/or/config.c index 919dd276ec..126b1c5a90 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -813,6 +813,9 @@ add_default_trusted_dir_authorities(dirinfo_type_t type) "Faravahar orport=443 no-v2 " "v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 " "154.35.32.5:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC", + "longclaw orport=443 no-v2 " + "v3ident=23D15D965BC35114467363C165C4F724B64B4F66 " + "202.85.227.202:80 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145", NULL }; for (i=0; authorities[i]; i++) { From b6e7b8c88cb50a122992a963ef0882ca9b963609 Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Sun, 9 Nov 2014 15:49:11 -0500 Subject: [PATCH 150/184] Remove turtles as a directory authority (#13296) --- src/or/config.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 126b1c5a90..9e05087c2b 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -796,9 +796,6 @@ add_default_trusted_dir_authorities(dirinfo_type_t type) "194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755", "Tonga orport=443 bridge no-v2 82.94.251.203:80 " "4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D", - "turtles orport=9090 no-v2 " - "v3ident=27B6B5996C426270A5C95488AA5BCEB6BCC86956 " - "76.73.17.194:9030 F397 038A DC51 3361 35E7 B80B D99C A384 4360 292B", "gabelmoo orport=443 no-v2 " "v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 " "131.188.40.189:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281", From 0493db4adb88b830b4339d320b96a88fc27a01bb Mon Sep 17 00:00:00 2001 From: Sebastian Hahn Date: Wed, 12 Nov 2014 19:12:18 +0100 Subject: [PATCH 151/184] Add changes file for #13926 --- changes/bug13296 | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changes/bug13296 diff --git a/changes/bug13296 b/changes/bug13296 new file mode 100644 index 0000000000..d6fe038c30 --- /dev/null +++ b/changes/bug13296 @@ -0,0 +1,5 @@ + o Directory authority changes: + - Remove turtles as a directory authority. + - Add longclaw as a new (v3) directory authority. This implements + ticket 13296. This keeps the directory authority count at 9. + From ab08d8c4f7a4a6120756e964a086219a1dc3aaa2 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 14 Nov 2014 11:19:34 -0500 Subject: [PATCH 152/184] document that hiddenserviceport can have an ipv6 addr.for 12670 --- doc/tor.1.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/tor.1.txt b/doc/tor.1.txt index eb406e7cb7..a33185b8f2 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -2042,6 +2042,7 @@ The following options are used to configure a hidden service. recent HiddenServiceDir. By default, this option maps the virtual port to the same port on 127.0.0.1 over TCP. You may override the target port, address, or both by specifying a target of addr, port, or addr:port. + (You can specify an IPv6 target as [addr]:port.) You may also have multiple lines with the same VIRTPORT: when a user connects to that VIRTPORT, one of the TARGETs from those lines will be chosen at random. From 0db96d023b9a927d55c18c06f57b6cc0a9bd34de Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 16 Nov 2014 15:51:23 +0200 Subject: [PATCH 153/184] Adding REASON field to HS_DESC FAILED controller event. --- src/or/control.c | 25 +++++++++++++++++++------ src/or/control.h | 6 ++++-- src/or/directory.c | 13 +++++++------ src/test/test_hs.c | 10 ++++++---- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/or/control.c b/src/or/control.c index e3f913177b..d9dc1bac35 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -5096,20 +5096,30 @@ control_event_hs_descriptor_requested(const rend_data_t *rend_query, void control_event_hs_descriptor_receive_end(const char *action, const rend_data_t *rend_query, - const char *id_digest) + const char *id_digest, + const char *reason) { + char *reason_field = NULL; + if (!action || !rend_query || !id_digest) { log_warn(LD_BUG, "Called with action==%p, rend_query==%p, " "id_digest==%p", action, rend_query, id_digest); return; } + if (reason) { + tor_asprintf(&reason_field, " REASON=%s", reason); + } + send_control_event(EVENT_HS_DESC, ALL_FORMATS, - "650 HS_DESC %s %s %s %s\r\n", + "650 HS_DESC %s %s %s %s%s\r\n", action, rend_query->onion_address, rend_auth_type_to_string(rend_query->auth_type), - node_describe_longname_by_id(id_digest)); + node_describe_longname_by_id(id_digest), + reason_field ? reason_field : ""); + + tor_free(reason_field); } /** send HS_DESC RECEIVED event @@ -5125,7 +5135,8 @@ control_event_hs_descriptor_received(const rend_data_t *rend_query, rend_query, id_digest); return; } - control_event_hs_descriptor_receive_end("RECEIVED", rend_query, id_digest); + control_event_hs_descriptor_receive_end("RECEIVED", rend_query, + id_digest, NULL); } /** send HS_DESC FAILED event @@ -5134,14 +5145,16 @@ control_event_hs_descriptor_received(const rend_data_t *rend_query, */ void control_event_hs_descriptor_failed(const rend_data_t *rend_query, - const char *id_digest) + const char *id_digest, + const char *reason) { if (!rend_query || !id_digest) { log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p", rend_query, id_digest); return; } - control_event_hs_descriptor_receive_end("FAILED", rend_query, id_digest); + control_event_hs_descriptor_receive_end("FAILED", rend_query, + id_digest, reason); } /** Free any leftover allocated memory of the control.c subsystem. */ diff --git a/src/or/control.h b/src/or/control.h index 0c92d5503d..f62084b931 100644 --- a/src/or/control.h +++ b/src/or/control.h @@ -108,11 +108,13 @@ void control_event_hs_descriptor_requested(const rend_data_t *rend_query, const char *hs_dir); void control_event_hs_descriptor_receive_end(const char *action, const rend_data_t *rend_query, - const char *hs_dir); + const char *hs_dir, + const char *reason); void control_event_hs_descriptor_received(const rend_data_t *rend_query, const char *hs_dir); void control_event_hs_descriptor_failed(const rend_data_t *rend_query, - const char *hs_dir); + const char *hs_dir, + const char *reason); void control_free_all(void); diff --git a/src/or/directory.c b/src/or/directory.c index df9e7f8ad3..e1f5964e1e 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2073,9 +2073,10 @@ connection_dir_client_reached_eof(dir_connection_t *conn) } if (conn->base_.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) { - #define SEND_HS_DESC_FAILED_EVENT() ( \ + #define SEND_HS_DESC_FAILED_EVENT(reason) ( \ control_event_hs_descriptor_failed(conn->rend_data, \ - conn->identity_digest) ) + conn->identity_digest, \ + reason) ) tor_assert(conn->rend_data); log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d " "(%s))", @@ -2090,7 +2091,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) "Retrying at another directory."); /* We'll retry when connection_about_to_close_connection() * cleans this dir conn up. */ - SEND_HS_DESC_FAILED_EVENT(); + SEND_HS_DESC_FAILED_EVENT("BAD_DESC"); break; case RCS_OKAY: default: @@ -2109,14 +2110,14 @@ connection_dir_client_reached_eof(dir_connection_t *conn) * connection_about_to_close_connection() cleans this conn up. */ log_info(LD_REND,"Fetching v2 rendezvous descriptor failed: " "Retrying at another directory."); - SEND_HS_DESC_FAILED_EVENT(); + SEND_HS_DESC_FAILED_EVENT("NOT_FOUND"); break; case 400: log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: " "http status 400 (%s). Dirserver didn't like our " "v2 rendezvous query? Retrying at another directory.", escaped(reason)); - SEND_HS_DESC_FAILED_EVENT(); + SEND_HS_DESC_FAILED_EVENT("QUERY_REJECTED"); break; default: log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: " @@ -2125,7 +2126,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) "Retrying at another directory.", status_code, escaped(reason), conn->base_.address, conn->base_.port); - SEND_HS_DESC_FAILED_EVENT(); + SEND_HS_DESC_FAILED_EVENT("UNEXPECTED"); break; } } diff --git a/src/test/test_hs.c b/src/test/test_hs.c index 2db88a4c0c..a5cd841a55 100644 --- a/src/test/test_hs.c +++ b/src/test/test_hs.c @@ -99,18 +99,20 @@ test_hs_desc_event(void *arg) /* test failed event */ rend_query.auth_type = 2; - control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID); + control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID, + "QUERY_REJECTED"); expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\ - STR_HSDIR_NONE_EXIST_LONGNAME"\r\n"; + STR_HSDIR_NONE_EXIST_LONGNAME" REASON=QUERY_REJECTED\r\n"; tt_assert(received_msg); tt_str_op(received_msg,OP_EQ, expected_msg); tor_free(received_msg); /* test invalid auth type */ rend_query.auth_type = 999; - control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID); + control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID, + "QUERY_REJECTED"); expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\ - STR_HSDIR_EXIST_LONGNAME"\r\n"; + STR_HSDIR_EXIST_LONGNAME" REASON=QUERY_REJECTED\r\n"; tt_assert(received_msg); tt_str_op(received_msg,OP_EQ, expected_msg); tor_free(received_msg); From 620e251dccf2e040ffbd9669016a22f6a774aef1 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 16 Nov 2014 16:06:00 +0200 Subject: [PATCH 154/184] Rewriting comment for control_event_hs_descriptor_failed(). --- src/or/control.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/or/control.c b/src/or/control.c index d9dc1bac35..54464cc23b 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -5139,9 +5139,10 @@ control_event_hs_descriptor_received(const rend_data_t *rend_query, id_digest, NULL); } -/** send HS_DESC FAILED event - * - * called when request for hidden service descriptor returned failure. +/** Send HS_DESC event to inform controller that query rend_query + * failed to retrieve hidden service descriptor identified by + * id_digest. If reason is not NULL, add it to REASON= + * field. */ void control_event_hs_descriptor_failed(const rend_data_t *rend_query, From a68b90fc7af401220f11f4f9e39f08a8548a6957 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 16 Nov 2014 16:12:08 +0200 Subject: [PATCH 155/184] Changes file for 13212. --- changes/feature13212 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changes/feature13212 diff --git a/changes/feature13212 b/changes/feature13212 new file mode 100644 index 0000000000..6f1bce7d8a --- /dev/null +++ b/changes/feature13212 @@ -0,0 +1,4 @@ + o Minor features (hidden services): + - Inform Tor controller about nature of failure to retrieve + hidden service descriptor by sending reason string with HS_DESC + FAILED controller event. Implements feature 13212. From b3bd7a736c7a54406c087bfaa2bae3dec03ec7bd Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 17 Nov 2014 11:52:10 -0500 Subject: [PATCH 156/184] Remove Support022HiddenServices This has been already disabled in the directory consensus for a while; it didn't seem to break anything. Finally closes #7803. --- changes/bug7803 | 5 +++++ src/or/config.c | 2 +- src/or/or.h | 3 --- src/or/rendclient.c | 20 ++------------------ 4 files changed, 8 insertions(+), 22 deletions(-) create mode 100644 changes/bug7803 diff --git a/changes/bug7803 b/changes/bug7803 new file mode 100644 index 0000000000..7a2bba70db --- /dev/null +++ b/changes/bug7803 @@ -0,0 +1,5 @@ + o Removed features: + - Tor clients no longer support connecting to hidden services running on + Tor 0.2.2.x and earlier; the Support022HiddenServices option has been + removed. (There shouldn't be any hidden services running these + versions on the network.) diff --git a/src/or/config.c b/src/or/config.c index 4b8c6834e9..a0351d5f8d 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -377,7 +377,7 @@ static config_var_t option_vars_[] = { OBSOLETE("StrictEntryNodes"), OBSOLETE("StrictExitNodes"), V(StrictNodes, BOOL, "0"), - V(Support022HiddenServices, AUTOBOOL, "auto"), + OBSOLETE("Support022HiddenServices"), V(TestSocks, BOOL, "0"), V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"), V(Tor2webMode, BOOL, "0"), diff --git a/src/or/or.h b/src/or/or.h index 5ebe7bfac3..8a9c1cf76e 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4229,9 +4229,6 @@ typedef struct { /** How long (seconds) do we keep a guard before picking a new one? */ int GuardLifetime; - /** Should we send the timestamps that pre-023 hidden services want? */ - int Support022HiddenServices; - } or_options_t; /** Persistent state for an onion router, as saved to disk. */ diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 5e5a09e41f..f351ae7161 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -130,16 +130,6 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ) return result; } -/** Return true iff we should send timestamps in our INTRODUCE1 cells */ -static int -rend_client_should_send_timestamp(void) -{ - if (get_options()->Support022HiddenServices >= 0) - return get_options()->Support022HiddenServices; - - return networkstatus_get_param(NULL, "Support022HiddenServices", 1, 0, 1); -} - /** Called when we're trying to connect an ap conn; sends an INTRODUCE1 cell * down introcirc if possible. */ @@ -251,14 +241,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc, REND_DESC_COOKIE_LEN); v3_shift += 2+REND_DESC_COOKIE_LEN; } - if (rend_client_should_send_timestamp()) { - uint32_t now = (uint32_t)time(NULL); - now += 300; - now -= now % 600; - set_uint32(tmp+v3_shift+1, htonl(now)); - } else { - set_uint32(tmp+v3_shift+1, 0); - } + /* Once this held a timestamp. */ + set_uint32(tmp+v3_shift+1, 0); v3_shift += 4; } /* if version 2 only write version number */ else if (entry->parsed->protocols & (1<<2)) { From fb3000e10c34bd72d1ed88f32f525c161768e400 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 17 Nov 2014 21:16:33 -0500 Subject: [PATCH 157/184] whoops; removed the documentation for Support022HiddenServices too --- doc/tor.1.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/doc/tor.1.txt b/doc/tor.1.txt index a33185b8f2..e876829cf6 100644 --- a/doc/tor.1.txt +++ b/doc/tor.1.txt @@ -1426,16 +1426,6 @@ The following options are useful only for clients (that is, if Tor will use a default value chosen by the directory authorities. (Default: -1.) -[[Support022HiddenServices]] **Support022HiddenServices** **0**|**1**|**auto**:: - Tor hidden services running versions before 0.2.3.x required clients to - send timestamps, which can potentially be used to distinguish clients - whose view of the current time is skewed. If this option is set to 0, we - do not send this timestamp, and hidden services on obsolete Tor versions - will not work. If this option is set to 1, we send the timestamp. If - this option is "auto", we take a recommendation from the latest consensus - document. (Default: auto) - - SERVER OPTIONS -------------- From dca902ceba4d2440520d357ccc2e00b8aa59eb8b Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Wed, 19 Nov 2014 17:22:25 -0500 Subject: [PATCH 158/184] Update longclaw dirauth IP to be a more stable location --- src/or/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/or/config.c b/src/or/config.c index 9e05087c2b..6a0d3da046 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -812,7 +812,7 @@ add_default_trusted_dir_authorities(dirinfo_type_t type) "154.35.32.5:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC", "longclaw orport=443 no-v2 " "v3ident=23D15D965BC35114467363C165C4F724B64B4F66 " - "202.85.227.202:80 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145", + "199.254.238.52:80 74A9 1064 6BCE EFBC D2E8 74FC 1DC9 9743 0F96 8145", NULL }; for (i=0; authorities[i]; i++) { From f15cd22bb7c8f4f7009417e50a827c5bcc656807 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 20 Nov 2014 11:51:36 -0500 Subject: [PATCH 159/184] Don't build introduction circuits until we know we can build circuits Patch from akwizgran. Ticket 13447. --- changes/bug13447 | 5 +++++ src/or/config.c | 2 ++ src/or/rendservice.c | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 changes/bug13447 diff --git a/changes/bug13447 b/changes/bug13447 new file mode 100644 index 0000000000..90027e8f3a --- /dev/null +++ b/changes/bug13447 @@ -0,0 +1,5 @@ + o Minor feature: + - When re-enabling the network, don't try to build introduction circuits + until we have successfully built a circuit. This makes hidden services + come up faster when the network is re-enabled. Patch from + "akwizgran". Closes ticket 13447. diff --git a/src/or/config.c b/src/or/config.c index dc2fc13b9a..5b62c565b9 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1071,6 +1071,8 @@ options_act_reversible(const or_options_t *old_options, char **msg) "non-control network connections. Shutting down all existing " "connections."); connection_mark_all_noncontrol_connections(); + /* We can't complete circuits until the network is re-enabled. */ + can_complete_circuit = 0; } } diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 3fed540e84..353c671550 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -16,6 +16,7 @@ #include "circuituse.h" #include "config.h" #include "directory.h" +#include "main.h" #include "networkstatus.h" #include "nodelist.h" #include "rendclient.h" @@ -3074,6 +3075,9 @@ rend_services_introduce(void) * an intro point to. */ smartlist_t *exclude_nodes = smartlist_new(); + if (!can_complete_circuit) + return; + now = time(NULL); for (i=0; i < smartlist_len(rend_service_list); ++i) { From 336c856e52d211aad6b40d29986264f3277a1327 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 20 Nov 2014 12:03:46 -0500 Subject: [PATCH 160/184] Make can_complete_circuits a static variable. --- changes/no_global_ccc | 3 +++ src/or/circuitbuild.c | 7 ++++--- src/or/config.c | 4 ++-- src/or/control.c | 2 +- src/or/main.c | 46 +++++++++++++++++++++++++++++++++---------- src/or/main.h | 4 +++- src/or/nodelist.c | 2 +- src/or/rendservice.c | 2 +- 8 files changed, 51 insertions(+), 19 deletions(-) create mode 100644 changes/no_global_ccc diff --git a/changes/no_global_ccc b/changes/no_global_ccc new file mode 100644 index 0000000000..614055a845 --- /dev/null +++ b/changes/no_global_ccc @@ -0,0 +1,3 @@ + o Code Simplification and Refactoring: + - Stop using can_complete_circuits as a global variable; access it with + a function instead. diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 42c4870e87..34934dc519 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -943,9 +943,9 @@ circuit_send_next_onion_skin(origin_circuit_t *circ) circuit_rep_hist_note_result(circ); circuit_has_opened(circ); /* do other actions as necessary */ - if (!can_complete_circuit && !circ->build_state->onehop_tunnel) { + if (!have_completed_a_circuit() && !circ->build_state->onehop_tunnel) { const or_options_t *options = get_options(); - can_complete_circuit=1; + note_that_we_completed_a_circuit(); /* FFFF Log a count of known routers here */ log_notice(LD_GENERAL, "Tor has successfully opened a circuit. " @@ -1033,7 +1033,8 @@ circuit_note_clock_jumped(int seconds_elapsed) seconds_elapsed >=0 ? "forward" : "backward"); control_event_general_status(LOG_WARN, "CLOCK_JUMPED TIME=%d", seconds_elapsed); - can_complete_circuit=0; /* so it'll log when it works again */ + /* so we log when it works again */ + note_that_we_maybe_cant_complete_circuits(); control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s", "CLOCK_JUMPED"); circuit_mark_all_unused_circs(); diff --git a/src/or/config.c b/src/or/config.c index 5b62c565b9..e08c09d54d 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1072,7 +1072,7 @@ options_act_reversible(const or_options_t *old_options, char **msg) "connections."); connection_mark_all_noncontrol_connections(); /* We can't complete circuits until the network is re-enabled. */ - can_complete_circuit = 0; + note_that_we_maybe_cant_complete_circuits(); } } @@ -1670,7 +1670,7 @@ options_act(const or_options_t *old_options) if (server_mode(options) && !server_mode(old_options)) { ip_address_changed(0); - if (can_complete_circuit || !any_predicted_circuits(time(NULL))) + if (have_completed_a_circuit() || !any_predicted_circuits(time(NULL))) inform_testing_reachability(); } cpuworkers_rotate(); diff --git a/src/or/control.c b/src/or/control.c index 54464cc23b..72c62277f6 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -2015,7 +2015,7 @@ getinfo_helper_events(control_connection_t *control_conn, /* Note that status/ is not a catch-all for events; there's only supposed * to be a status GETINFO if there's a corresponding STATUS event. */ if (!strcmp(question, "status/circuit-established")) { - *answer = tor_strdup(can_complete_circuit ? "1" : "0"); + *answer = tor_strdup(have_completed_a_circuit() ? "1" : "0"); } else if (!strcmp(question, "status/enough-dir-info")) { *answer = tor_strdup(router_have_minimum_dir_info() ? "1" : "0"); } else if (!strcmp(question, "status/good-server-descriptor") || diff --git a/src/or/main.c b/src/or/main.c index 5a4e0a3e2d..4571f682ff 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -150,7 +150,7 @@ static int called_loop_once = 0; * any longer (a big time jump happened, when we notice our directory is * heinously out-of-date, etc. */ -int can_complete_circuit=0; +static int can_complete_circuits = 0; /** How often do we check for router descriptors that we should download * when we have too little directory info? */ @@ -171,11 +171,11 @@ int quiet_level = 0; /********* END VARIABLES ************/ /**************************************************************************** -* -* This section contains accessors and other methods on the connection_array -* variables (which are global within this file and unavailable outside it). -* -****************************************************************************/ + * + * This section contains accessors and other methods on the connection_array + * variables (which are global within this file and unavailable outside it). + * + ****************************************************************************/ #if 0 && defined(USE_BUFFEREVENTS) static void @@ -223,6 +223,32 @@ set_buffer_lengths_to_zero(tor_socket_t s) } #endif + +/** Return 1 if we have successfully built a circuit, and nothing has changed + * to make us think that maybe we can't. + */ +int +have_completed_a_circuit(void) +{ + return can_complete_circuits; +} + +/** Note that we have successfully built a circuit, so that reachability + * testing and introduction points and so on may be attempted. */ +void +note_that_we_completed_a_circuit(void) +{ + can_complete_circuits = 1; +} + +/** Note that something has happened (like a clock jump, or DisableNetwork) to + * make us think that maybe we can't complete circuits. */ +void +note_that_we_maybe_cant_complete_circuits(void) +{ + can_complete_circuits = 0; +} + /** Add conn to the array of connections that we can poll on. The * connection's socket must be set; the connection starts out * non-reading and non-writing. @@ -999,7 +1025,7 @@ directory_info_has_arrived(time_t now, int from_cache) } if (server_mode(options) && !net_is_disabled() && !from_cache && - (can_complete_circuit || !any_predicted_circuits(now))) + (have_completed_a_circuit() || !any_predicted_circuits(now))) consider_testing_reachability(1, 1); } @@ -1436,7 +1462,7 @@ run_scheduled_events(time_t now) /* also, check religiously for reachability, if it's within the first * 20 minutes of our uptime. */ if (is_server && - (can_complete_circuit || !any_predicted_circuits(now)) && + (have_completed_a_circuit() || !any_predicted_circuits(now)) && !we_are_hibernating()) { if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) { consider_testing_reachability(1, dirport_reachability_count==0); @@ -1549,7 +1575,7 @@ run_scheduled_events(time_t now) circuit_close_all_marked(); /* 7. And upload service descriptors if necessary. */ - if (can_complete_circuit && !net_is_disabled()) { + if (have_completed_a_circuit() && !net_is_disabled()) { rend_consider_services_upload(now); rend_consider_descriptor_republication(); } @@ -1680,7 +1706,7 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg) if (server_mode(options) && !net_is_disabled() && seconds_elapsed > 0 && - can_complete_circuit && + have_completed_a_circuit() && stats_n_seconds_working / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT != (stats_n_seconds_working+seconds_elapsed) / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) { diff --git a/src/or/main.h b/src/or/main.h index e918517b82..7d98983100 100644 --- a/src/or/main.h +++ b/src/or/main.h @@ -12,7 +12,9 @@ #ifndef TOR_MAIN_H #define TOR_MAIN_H -extern int can_complete_circuit; +int have_completed_a_circuit(void); +void note_that_we_completed_a_circuit(void); +void note_that_we_maybe_cant_complete_circuits(void); int connection_add_impl(connection_t *conn, int is_connecting); #define connection_add(conn) connection_add_impl((conn), 0) diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 53abc820f5..e0e01ec190 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -1562,7 +1562,7 @@ update_router_have_minimum_dir_info(void) * is back up and usable, and b) disable some activities that Tor * should only do while circuits are working, like reachability tests * and fetching bridge descriptors only over circuits. */ - can_complete_circuit = 0; + note_that_we_maybe_cant_complete_circuits(); control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO"); } diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 353c671550..ead9f3fe66 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3075,7 +3075,7 @@ rend_services_introduce(void) * an intro point to. */ smartlist_t *exclude_nodes = smartlist_new(); - if (!can_complete_circuit) + if (!have_completed_a_circuit()) return; now = time(NULL); From 6218f489509d4bd4a4c96be200565bb6f0906108 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 24 Nov 2014 01:34:17 -0500 Subject: [PATCH 161/184] Use consistent formatting for list of directory authorities Based on a patch from grpamp on tor-dev. --- src/or/config.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index e08c09d54d..46c090e65e 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -824,19 +824,22 @@ add_default_trusted_dir_authorities(dirinfo_type_t type) "moria1 orport=9101 " "v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 " "128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31", - "tor26 orport=443 v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 " + "tor26 orport=443 " + "v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 " "86.59.21.38:80 847B 1F85 0344 D787 6491 A548 92F9 0493 4E4E B85D", - "dizum orport=443 v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 " + "dizum orport=443 " + "v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 " "194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755", - "Tonga orport=443 bridge 82.94.251.203:80 " - "4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D", + "Tonga orport=443 bridge " + "82.94.251.203:80 4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D", "gabelmoo orport=443 " "v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 " "131.188.40.189:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281", "dannenberg orport=443 " "v3ident=585769C78764D58426B8B52B6651A5A71137189A " "193.23.244.244:80 7BE6 83E6 5D48 1413 21C5 ED92 F075 C553 64AC 7123", - "urras orport=80 v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C " + "urras orport=80 " + "v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C " "208.83.223.34:443 0AD3 FA88 4D18 F89E EA2D 89C0 1937 9E0E 7FD9 4417", "maatuska orport=80 " "v3ident=49015F787433103580E3B66A1707A00E60F2D15B " From 8611c6bccd9fe4c688e83b28fb4e2b2b0fe7a6b3 Mon Sep 17 00:00:00 2001 From: Karsten Loesing Date: Mon, 24 Nov 2014 14:21:31 +0100 Subject: [PATCH 162/184] Update geoip to the November 15 2014 database. --- changes/geoip-november2014 | 3 + src/config/geoip | 20036 ++++++++++++++++++++++++----------- 2 files changed, 13644 insertions(+), 6395 deletions(-) create mode 100644 changes/geoip-november2014 diff --git a/changes/geoip-november2014 b/changes/geoip-november2014 new file mode 100644 index 0000000000..52cbeb3e41 --- /dev/null +++ b/changes/geoip-november2014 @@ -0,0 +1,3 @@ + o Minor features: + - Update geoip to the November 15 2014 Maxmind GeoLite2 Country database. + diff --git a/src/config/geoip b/src/config/geoip index 28cb59ecb7..6fc1a4a753 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -1,4 +1,4 @@ -# Last updated based on August 7 2014 Maxmind GeoLite2 Country +# Last updated based on November 15 2014 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -16,7 +16,7 @@ 16859136,16875519,JP 16875520,16908287,TH 16908288,16909055,CN -16909056,16909311,AU +16909056,16909311,US 16909312,16941055,CN 16941056,16973823,TH 16973824,17039359,CN @@ -71,7 +71,7 @@ 29949952,30015487,KR 30015488,30408703,CN 30408704,33554431,KR -33554432,33554432,DE +33554432,33554432,RU 33554433,34603007,FR 34604544,34605055,DE 34612224,34612735,IL @@ -131,9 +131,7 @@ 36700160,36962303,AE 36962304,37224447,IL 37486592,37748735,RU -37748736,38258687,SE -38258688,38258943,DK -38258944,38273023,SE +37748736,38273023,SE 38273024,38797311,KZ 38797312,39059455,PT 39059456,39321599,GR @@ -166,9 +164,9 @@ 57083941,57083941,BE 57083942,68305407,US 68305408,68305919,MX -68305920,69094399,US -69094400,69094655,AU -69094656,71020543,US +68305920,68973055,US +68973056,68973311,CA +68973312,71020543,US 71020544,71020799,CA 71020800,71571339,US 71571340,71571340,DE @@ -207,7 +205,9 @@ 83961856,83963903,CY 83963904,83965951,RU 83965952,83967999,CZ -83968000,83976191,DE +83968000,83972863,DE +83972864,83973119,GB +83973120,83976191,DE 83976192,83978239,CH 83978240,83980287,IQ 83980288,83982335,CH @@ -223,9 +223,7 @@ 84049920,84082687,RO 84082688,84148223,RU 84148224,84410367,DE -84410368,84418559,RU -84418560,84420607,GB -84420608,84434943,RU +84410368,84434943,RU 84434944,84443135,IT 84443136,84451327,LB 84451328,84457471,RU @@ -237,101 +235,8 @@ 84545536,84549631,GB 84549632,84551679,GE 84551680,84557823,DE -84557824,84557824,NL -84557825,84557825,US -84557826,84558063,NL -84558064,84558071,US -84558072,84558879,NL -84558880,84558887,US -84558888,84560635,NL -84560636,84560639,US -84560640,84561063,NL -84561064,84561071,US -84561072,84561215,NL -84561216,84561247,US -84561248,84561351,NL -84561352,84561359,MY -84561360,84561639,NL -84561640,84561647,ES -84561648,84561655,AF -84561656,84561727,NL -84561728,84561791,US -84561792,84562383,NL -84562384,84562391,US -84562392,84562511,NL -84562512,84562527,US -84562528,84563647,NL -84563648,84563655,US -84563656,84563691,NL -84563692,84563695,GB -84563696,84563703,NL -84563704,84563711,US -84563712,84564411,NL -84564412,84564415,US -84564416,84564498,NL -84564499,84564499,GB -84564500,84564863,NL -84564864,84564871,TR -84564872,84565247,NL -84565248,84565311,US -84565312,84565655,NL -84565656,84565663,US -84565664,84566303,NL -84566304,84566319,US -84566320,84566383,NL -84566384,84566415,US -84566416,84566420,NL -84566421,84566421,US -84566422,84566495,NL -84566496,84566527,US -84566528,84566567,NL -84566568,84566583,US -84566584,84566591,NL -84566592,84566687,US -84566688,84566719,NL -84566720,84566743,US -84566744,84567039,NL -84567040,84567055,US -84567056,84567071,NL -84567072,84567103,US -84567104,84567119,NL -84567120,84567135,US -84567136,84567199,NL -84567200,84567231,US -84567232,84567375,NL -84567376,84567391,US -84567392,84567535,NL -84567536,84567551,US -84567552,84567599,NL -84567600,84567615,US -84567616,84567647,NL -84567648,84567679,US -84567680,84567903,NL -84567904,84567919,US -84567920,84567999,NL -84568000,84568015,US -84568016,84568223,NL -84568224,84568239,US -84568240,84568255,GB -84568256,84568287,NL -84568288,84568303,US -84568304,84568351,NL -84568352,84568399,US -84568400,84568591,NL -84568592,84568607,GB -84568608,84568847,NL -84568848,84568863,US -84568864,84568927,NL -84568928,84568943,GB -84568944,84568991,NL -84568992,84569023,GB -84569024,84569119,NL -84569120,84569135,US -84569136,84569183,NL -84569184,84569199,US -84569200,84570127,NL -84570128,84570143,US -84570144,84574207,NL +84557824,84566015,NL +84566016,84574207,GB 84574208,84576255,FR 84576256,84582399,GB 84582400,84590591,DE @@ -430,11 +335,22 @@ 86245376,86376447,OM 86376448,86409215,AE 86409216,86441983,HU -86441984,86442495,FR +86441984,86442255,FR +86442256,86442271,GB +86442272,86442359,FR +86442360,86442367,BE +86442368,86442399,ES +86442400,86442415,FR +86442416,86442431,GB +86442432,86442495,FR 86442496,86442499,ES 86442500,86442507,FR 86442508,86442511,ES -86442512,86442687,FR +86442512,86442583,FR +86442584,86442591,ES +86442592,86442599,IT +86442600,86442603,ES +86442604,86442687,FR 86442688,86442691,ES 86442692,86442699,FR 86442700,86442700,ES @@ -448,158 +364,535 @@ 86442752,86443007,GB 86443008,86443047,FR 86443048,86443051,ES -86443052,86443451,FR +86443052,86443055,GB +86443056,86443103,FR +86443104,86443135,GB +86443136,86443183,FR +86443184,86443199,PL +86443200,86443295,FR +86443296,86443311,ES +86443312,86443363,FR +86443364,86443367,IT +86443368,86443423,FR +86443424,86443427,IT +86443428,86443431,IE +86443432,86443451,FR 86443452,86443455,ES -86443456,86443535,FR +86443456,86443487,NL +86443488,86443503,ES +86443504,86443507,IT +86443508,86443535,FR 86443536,86443539,ES -86443540,86444119,FR +86443540,86443567,FR +86443568,86443575,IE +86443576,86443823,FR +86443824,86443839,PT +86443840,86443887,FR +86443888,86443903,DE +86443904,86443995,FR +86443996,86443999,PT +86444000,86444079,FR +86444080,86444095,GB +86444096,86444119,FR 86444120,86444123,ES -86444124,86444287,FR +86444124,86444127,FR +86444128,86444143,BE +86444144,86444287,FR 86444288,86444291,NL -86444292,86444315,FR +86444292,86444303,FR +86444304,86444307,DE +86444308,86444311,PL +86444312,86444315,FR 86444316,86444323,ES -86444324,86444387,FR +86444324,86444351,FR +86444352,86444367,NL +86444368,86444387,FR 86444388,86444391,NL -86444392,86444519,FR +86444392,86444395,FR +86444396,86444399,GB +86444400,86444447,FR +86444448,86444479,ES +86444480,86444519,FR 86444520,86444523,ES -86444524,86444563,FR +86444524,86444527,FR +86444528,86444543,ES +86444544,86444555,FR +86444556,86444559,PL +86444560,86444563,FR 86444564,86444567,NL 86444568,86444575,FR 86444576,86444579,ES -86444580,86444687,FR +86444580,86444587,FR +86444588,86444599,IT +86444600,86444607,FR +86444608,86444623,IT +86444624,86444639,FR +86444640,86444655,GB +86444656,86444687,FR 86444688,86444691,ES -86444692,86444835,FR +86444692,86444703,FR +86444704,86444719,ES +86444720,86444799,FR +86444800,86444815,PL +86444816,86444835,FR 86444836,86444839,NL 86444840,86444843,ES -86444844,86444879,FR +86444844,86444875,FR +86444876,86444879,CH 86444880,86444883,NL 86444884,86444895,FR 86444896,86444903,NL -86444904,86445059,FR +86444904,86444959,FR +86444960,86444967,GB +86444968,86445059,FR 86445060,86445063,NL -86445064,86445111,FR +86445064,86445071,FR +86445072,86445087,PL +86445088,86445111,FR 86445112,86445115,NL -86445116,86445251,FR +86445116,86445119,FR +86445120,86445151,ES +86445152,86445215,FR +86445216,86445231,CH +86445232,86445235,IT +86445236,86445251,FR 86445252,86445255,NL -86445256,86445559,FR +86445256,86445291,FR +86445292,86445295,DE +86445296,86445343,FR +86445344,86445351,FI +86445352,86445423,FR +86445424,86445431,GB +86445432,86445519,FR +86445520,86445527,ES +86445528,86445559,FR 86445560,86445563,NL -86445564,86446407,FR +86445564,86445711,FR +86445712,86445727,PL +86445728,86445743,FR +86445744,86445759,DE +86445760,86445891,FR +86445892,86445895,ES +86445896,86445939,FR +86445940,86445943,NL +86445944,86445983,FR +86445984,86445999,IT +86446000,86446027,FR +86446028,86446031,IT +86446032,86446039,FR +86446040,86446043,IE +86446044,86446063,FR +86446064,86446079,IT +86446080,86446143,FR +86446144,86446175,NL +86446176,86446335,FR +86446336,86446367,IE +86446368,86446399,GB +86446400,86446407,FR 86446408,86446408,DE 86446409,86446411,FR 86446412,86446412,DE 86446413,86446427,FR 86446428,86446431,DE -86446432,86446619,FR +86446432,86446463,FR +86446464,86446495,ES +86446496,86446527,CH +86446528,86446551,FR +86446552,86446555,NL +86446556,86446611,FR +86446612,86446615,ES +86446616,86446619,FR 86446620,86446620,DE -86446621,86446679,FR +86446621,86446655,FR +86446656,86446671,GB +86446672,86446675,FR +86446676,86446679,BE 86446680,86446683,ES -86446684,86446719,FR +86446684,86446711,FR +86446712,86446719,DE 86446720,86446727,NL -86446728,86446983,FR +86446728,86446735,FR +86446736,86446743,ES +86446744,86446779,FR +86446780,86446783,PL +86446784,86446887,FR +86446888,86446895,IT +86446896,86446983,FR 86446984,86446991,IT -86446992,86447095,FR +86446992,86447011,FR +86447012,86447015,ES +86447016,86447023,FR +86447024,86447027,IE +86447028,86447031,FR +86447032,86447039,ES +86447040,86447047,PT +86447048,86447071,FR +86447072,86447087,DE +86447088,86447095,FR 86447096,86447103,ES -86447104,86447255,FR +86447104,86447147,FR +86447148,86447151,ES +86447152,86447231,FR +86447232,86447239,PL +86447240,86447255,FR 86447256,86447263,PL -86447264,86447279,FR +86447264,86447267,FR +86447268,86447271,IE +86447272,86447279,FR 86447280,86447280,DE 86447281,86447287,FR 86447288,86447288,DE -86447289,86448803,FR +86447289,86447339,FR +86447340,86447343,IT +86447344,86447355,FR +86447356,86447359,CH +86447360,86447847,FR +86447848,86447855,ES +86447856,86448287,FR +86448288,86448319,GB +86448320,86448351,ES +86448352,86448487,FR +86448488,86448495,GB +86448496,86448511,FR +86448512,86448527,IT +86448528,86448671,FR +86448672,86448687,DE +86448688,86448803,FR 86448804,86448807,FI 86448808,86448851,FR 86448852,86448855,IT 86448856,86448859,PT -86448860,86449363,FR +86448860,86449167,FR +86449168,86449183,ES +86449184,86449291,FR +86449292,86449295,PL +86449296,86449311,FR +86449312,86449343,ES +86449344,86449363,FR 86449364,86449367,DE -86449368,86449499,FR +86449368,86449375,FR +86449376,86449379,PL +86449380,86449383,FR +86449384,86449387,DE +86449388,86449471,FR +86449472,86449475,GB +86449476,86449499,FR 86449500,86449503,ES -86449504,86449883,FR +86449504,86449563,FR +86449564,86449567,PL +86449568,86449599,FR +86449600,86449631,ES +86449632,86449867,FR +86449868,86449871,DE +86449872,86449883,FR 86449884,86449884,DE -86449885,86450235,FR +86449885,86450019,FR +86450020,86450023,IT +86450024,86450047,FR +86450048,86450079,IT +86450080,86450111,FR +86450112,86450115,IT +86450116,86450119,FR +86450120,86450127,IT +86450128,86450143,FR +86450144,86450159,ES +86450160,86450167,FR +86450168,86450171,DE +86450172,86450235,FR 86450236,86450239,GB -86450240,86451167,FR +86450240,86450339,FR +86450340,86450343,NL +86450344,86450351,DE +86450352,86450371,FR +86450372,86450375,BE +86450376,86450439,FR +86450440,86450447,ES +86450448,86450527,FR +86450528,86450559,PT +86450560,86450591,BE +86450592,86450607,FR +86450608,86450615,CZ +86450616,86450671,FR +86450672,86450687,GB +86450688,86450847,FR +86450848,86450863,PT +86450864,86450867,FR +86450868,86450871,ES +86450872,86450943,FR +86450944,86450975,IT +86450976,86451167,FR 86451168,86451175,NL -86451176,86452067,FR +86451176,86451183,PL +86451184,86451199,ES +86451200,86451259,FR +86451260,86451263,IT +86451264,86451359,FR +86451360,86451363,ES +86451364,86451375,FR +86451376,86451391,LT +86451392,86451407,IT +86451408,86451411,IE +86451412,86451463,FR +86451464,86451467,CH +86451468,86451663,FR +86451664,86451667,DE +86451668,86451675,FR +86451676,86451687,PL +86451688,86451695,DE +86451696,86451887,FR +86451888,86451895,ES +86451896,86451903,FR +86451904,86451967,NL +86451968,86452055,FR +86452056,86452059,NL +86452060,86452067,FR 86452068,86452071,ES -86452072,86452299,FR +86452072,86452215,FR +86452216,86452223,IT +86452224,86452263,FR +86452264,86452267,ES +86452268,86452279,FR +86452280,86452283,ES +86452284,86452287,DE +86452288,86452291,IT +86452292,86452299,FR 86452300,86452303,IT -86452304,86452671,FR +86452304,86452399,FR +86452400,86452415,GB +86452416,86452671,FR 86452672,86452735,GB -86452736,86453199,FR +86452736,86452943,FR +86452944,86452959,GB +86452960,86453031,FR +86453032,86453039,ES +86453040,86453135,FR +86453136,86453151,PT +86453152,86453199,FR 86453200,86453203,ES -86453204,86453311,FR +86453204,86453215,FR +86453216,86453231,BE +86453232,86453247,FR +86453248,86453251,IT +86453252,86453311,FR 86453312,86453315,ES -86453316,86453836,FR +86453316,86453379,FR +86453380,86453383,ES +86453384,86453391,FR +86453392,86453399,GB +86453400,86453503,FR +86453504,86453631,GB +86453632,86453791,FR +86453792,86453807,FI +86453808,86453823,FR +86453824,86453836,IT 86453837,86453838,PT -86453839,86454187,FR +86453839,86453839,IT +86453840,86453847,FR +86453848,86453851,ES +86453852,86454015,FR +86454016,86454047,PL +86454048,86454119,FR +86454120,86454123,DE +86454124,86454187,FR 86454188,86454191,IT -86454192,86454279,FR +86454192,86454271,FR +86454272,86454279,GB 86454280,86454287,ES 86454288,86454295,IT -86454296,86454335,FR +86454296,86454299,FR +86454300,86454303,DE +86454304,86454335,FR 86454336,86454343,DE -86454344,86454615,FR +86454344,86454351,FR +86454352,86454367,CH +86454368,86454559,FR +86454560,86454591,CZ +86454592,86454607,PT +86454608,86454611,NL +86454612,86454615,PL 86454616,86454619,ES -86454620,86454823,FR +86454620,86454655,FR +86454656,86454671,IT +86454672,86454703,FR +86454704,86454707,PL +86454708,86454715,FR +86454716,86454719,CZ +86454720,86454823,FR 86454824,86454831,ES -86454832,86455623,FR +86454832,86454863,FR +86454864,86454867,DE +86454868,86454927,FR +86454928,86454943,GB +86454944,86454959,ES +86454960,86455103,FR +86455104,86455135,DE +86455136,86455167,FR +86455168,86455199,GB +86455200,86455231,ES +86455232,86455263,GB +86455264,86455439,FR +86455440,86455455,CH +86455456,86455519,FR +86455520,86455551,BE +86455552,86455591,FR +86455592,86455595,NL +86455596,86455623,FR 86455624,86455624,DE -86455625,86456195,FR -86456196,86456211,DE -86456212,86456351,FR +86455625,86455839,FR +86455840,86455871,DE +86455872,86455967,FR +86455968,86455999,PL +86456000,86456015,FI +86456016,86456087,FR +86456088,86456091,CZ +86456092,86456127,FR +86456128,86456143,GB +86456144,86456159,FR +86456160,86456191,NL +86456192,86456195,FR +86456196,86456215,DE +86456216,86456279,FR +86456280,86456283,DE +86456284,86456335,FR +86456336,86456351,IE 86456352,86456367,CH 86456368,86456371,FR 86456372,86456375,ES -86456376,86457059,FR +86456376,86456575,FR +86456576,86456831,DE +86456832,86457055,FR +86457056,86457059,NL 86457060,86457060,DE 86457061,86457087,FR 86457088,86457091,DE 86457092,86457111,FR 86457112,86457112,DE -86457113,86457187,FR +86457113,86457175,FR +86457176,86457179,GB +86457180,86457187,FR 86457188,86457191,ES -86457192,86457403,FR +86457192,86457231,FR +86457232,86457235,PT +86457236,86457239,PL +86457240,86457243,DE +86457244,86457311,FR +86457312,86457327,CH +86457328,86457391,FR +86457392,86457395,BE +86457396,86457403,FR 86457404,86457407,ES 86457408,86457455,FR 86457456,86457456,DE -86457457,86457799,FR +86457457,86457615,FR +86457616,86457623,IE +86457624,86457631,FR +86457632,86457647,ES +86457648,86457711,FR +86457712,86457727,ES +86457728,86457799,FR 86457800,86457803,ES -86457804,86466839,FR +86457804,86457807,FR +86457808,86457811,ES +86457812,86458159,FR +86458160,86458175,DE +86458176,86466603,FR +86466604,86466607,ES +86466608,86466623,FR +86466624,86466639,ES +86466640,86466839,FR 86466840,86466847,NL -86466848,86467320,FR +86466848,86466879,FR +86466880,86466943,GB +86466944,86466959,DE +86466960,86467039,FR +86467040,86467055,IT +86467056,86467059,GB +86467060,86467219,FR +86467220,86467223,DE +86467224,86467291,FR +86467292,86467295,LT +86467296,86467320,FR 86467321,86467321,FI -86467322,86467999,FR +86467322,86467455,FR +86467456,86467487,GB +86467488,86467551,FR +86467552,86467583,PT +86467584,86467903,FR +86467904,86467935,GB +86467936,86467999,FR 86468000,86468003,PL -86468004,86468055,FR +86468004,86468043,FR +86468044,86468047,DE +86468048,86468055,FR 86468056,86468056,DE 86468057,86468447,FR 86468448,86468479,CZ 86468480,86468587,FR 86468588,86468591,ES -86468592,86469183,FR +86468592,86468759,FR +86468760,86468763,IT +86468764,86469183,FR 86469184,86469247,GB -86469248,86469691,FR +86469248,86469375,FR +86469376,86469631,BE +86469632,86469691,FR 86469692,86469695,DE 86469696,86469779,FR 86469780,86469783,IT -86469784,86470731,FR +86469784,86469863,FR +86469864,86469867,GB +86469868,86469919,FR +86469920,86469935,PT +86469936,86470207,FR +86470208,86470239,FI +86470240,86470271,GB +86470272,86470279,FR +86470280,86470287,PL +86470288,86470351,FR +86470352,86470359,IT +86470360,86470731,FR 86470732,86470735,BE -86470736,86471179,FR +86470736,86470959,FR +86470960,86470967,IT +86470968,86471095,FR +86471096,86471099,ES +86471100,86471179,FR 86471180,86471180,DE -86471181,86473087,FR +86471181,86471807,FR +86471808,86471839,CH +86471840,86471871,GB +86471872,86471935,ES +86471936,86471995,FR +86471996,86471999,DE +86472000,86472095,FR +86472096,86472127,GB +86472128,86472291,FR +86472292,86472295,GB +86472296,86472415,FR +86472416,86472431,ES +86472432,86472479,FR +86472480,86472495,PL +86472496,86473087,FR 86473088,86473151,PT -86473152,86473359,FR +86473152,86473215,FR +86473216,86473247,DE +86473248,86473359,FR 86473360,86473363,IT 86473364,86473423,FR 86473424,86473427,NL -86473428,86474307,FR -86474308,86474311,DE +86473428,86473983,FR +86473984,86474047,IT +86474048,86474143,FR +86474144,86474151,GB +86474152,86474303,FR +86474304,86474311,DE 86474312,86474475,FR 86474476,86474479,DE 86474480,86474527,FR 86474528,86474531,DE -86474532,86474751,FR +86474532,86474743,FR +86474744,86474747,LT +86474748,86474751,FR 86474752,86482943,HR 86482944,86484991,RU 86484992,86487039,NL @@ -615,10 +908,9 @@ 86507520,86573055,ES 86573056,86638591,RO 86638592,86671359,RU -86671360,86671615,JE -86671616,86671871,GB -86671872,86672895,JE -86672896,86673407,GB +86671360,86672895,JE +86672896,86673151,GB +86673152,86673407,JE 86673408,86675455,DE 86675456,86677503,IT 86677504,86687743,FR @@ -717,23 +1009,15 @@ 87638016,87640063,UA 87640064,87642111,RS 87642112,87646207,GB -87646208,87646463,FR -87646464,87646719,RE -87646720,87646975,YT -87646976,87647231,FR -87647232,87647743,RE -87647744,87648511,FR -87648512,87649535,RE -87649536,87649791,FR -87649792,87650815,RE -87650816,87651583,FR -87651584,87651839,RE -87651840,87653119,FR -87653120,87653375,RE -87653376,87653631,FR -87653632,87653887,RE -87653888,87654143,FR -87654144,87654399,RE +87646208,87647999,FR +87648000,87648255,RE +87648256,87651839,FR +87651840,87652095,RE +87652096,87652351,FR +87652352,87652863,RE +87652864,87653375,FR +87653376,87653887,RE +87653888,87654399,FR 87654400,87670783,PL 87670784,87672831,DE 87672832,87674879,CH @@ -797,9 +1081,7 @@ 88940544,88948735,GB 88948736,88965119,IT 88965120,88997887,AM -88997888,89028607,DE -89028608,89031167,US -89031168,89063423,DE +88997888,89063423,DE 89063424,89079807,GB 89079808,89096191,NL 89096192,89128959,RU @@ -843,12 +1125,15 @@ 90544128,90546175,RU 90546176,90548223,DE 90548224,90550271,GB -90550272,90570751,RU +90550272,90554367,EE +90554368,90570751,RU 90570752,90578943,IT 90578944,90583039,IR 90583040,90587135,CZ 90587136,90589183,PL -90589184,90591231,FR +90589184,90589439,FR +90589440,90589695,RE +90589696,90591231,FR 90591232,90595327,GB 90595328,90603519,PS 90603520,90605567,ES @@ -891,7 +1176,8 @@ 90764800,90765311,IL 90765312,90767359,PL 90767360,90832895,UA -90832896,90963967,RO +90832896,90898431,IR +90898432,90963967,AE 90963968,91226111,SA 91226112,92274687,IR 92274688,92536831,RU @@ -929,15 +1215,50 @@ 92721152,92723199,PL 92723200,92725247,RU 92725248,92733439,SY -92733440,92734515,FR +92733440,92733503,FR +92733504,92733535,PL +92733536,92733743,FR +92733744,92733751,IT +92733752,92733775,FR +92733776,92733783,DE +92733784,92733791,FR +92733792,92733807,PT +92733808,92733927,FR +92733928,92733931,BE +92733932,92734255,FR +92734256,92734271,DE +92734272,92734307,FR +92734308,92734311,ES +92734312,92734515,FR 92734516,92734519,IT -92734520,92734735,FR +92734520,92734639,FR +92734640,92734655,ES +92734656,92734671,FR +92734672,92734687,IT +92734688,92734735,FR 92734736,92734739,DE -92734740,92735615,FR +92734740,92734879,FR +92734880,92734895,IT +92734896,92734943,FR +92734944,92734975,BE +92734976,92735263,FR +92735264,92735295,CZ +92735296,92735343,FR +92735344,92735347,GB +92735348,92735439,FR +92735440,92735455,ES +92735456,92735471,FR +92735472,92735479,IT +92735480,92735535,FR +92735536,92735543,PL +92735544,92735583,FR +92735584,92735615,FI 92735616,92735616,DE 92735617,92735619,FR 92735620,92735623,ES -92735624,92735823,FR +92735624,92735679,FR +92735680,92735711,NL +92735712,92735823,FR 92735824,92735827,ES 92735828,92735875,FR 92735876,92735876,DE @@ -945,73 +1266,632 @@ 92736000,92736255,GB 92736256,92736479,FR 92736480,92736480,DE -92736481,92738663,FR +92736481,92736571,FR +92736572,92736575,NL +92736576,92736863,FR +92736864,92736895,PL +92736896,92737247,FR +92737248,92737279,NL +92737280,92737343,FR +92737344,92737375,ES +92737376,92737407,FR +92737408,92737439,CH +92737440,92737471,FR +92737472,92737503,ES +92737504,92737631,FR +92737632,92737647,NL +92737648,92738479,FR +92738480,92738487,IT +92738488,92738511,FR +92738512,92738515,ES +92738516,92738559,FR +92738560,92738591,DE +92738592,92738611,FR +92738612,92738615,FI +92738616,92738663,FR 92738664,92738679,ES -92738680,92738719,FR -92738720,92738727,GB -92738728,92740447,FR +92738680,92739355,FR +92739356,92739359,ES +92739360,92739503,FR +92739504,92739507,IT +92739508,92739839,FR +92739840,92739903,PT +92739904,92739967,FR +92739968,92740031,PL +92740032,92740095,FR +92740096,92740127,PL +92740128,92740287,FR +92740288,92740351,IE +92740352,92740447,FR 92740448,92740455,IT -92740456,92741203,FR +92740456,92740639,FR +92740640,92740671,CZ +92740672,92740767,FR +92740768,92740815,PL +92740816,92740831,FR +92740832,92740847,ES +92740848,92741203,FR 92741204,92741207,IT -92741208,92741387,FR +92741208,92741343,FR +92741344,92741351,IT +92741352,92741387,FR 92741388,92741395,IT -92741396,92742347,FR +92741396,92741431,FR +92741432,92741439,IE +92741440,92741471,FR +92741472,92741503,CZ +92741504,92741791,FR +92741792,92741823,IT +92741824,92742207,FR +92742208,92742247,GB +92742248,92742347,FR 92742348,92742351,IT -92742352,92742415,FR +92742352,92742367,FR +92742368,92742399,GB +92742400,92742415,BE 92742416,92742419,IT -92742420,92742487,FR +92742420,92742431,FR +92742432,92742463,PT +92742464,92742487,FR 92742488,92742491,IT -92742492,92742691,FR +92742492,92742527,FR +92742528,92742543,IT +92742544,92742687,FR +92742688,92742691,IE 92742692,92742695,IT -92742696,92742815,FR +92742696,92742703,ES +92742704,92742815,FR 92742816,92742819,ES -92742820,92743243,FR +92742820,92743215,FR +92743216,92743231,BE +92743232,92743243,FR 92743244,92743247,IT -92743248,92743303,FR -92743304,92743307,IT +92743248,92743263,FR +92743264,92743279,GB +92743280,92743295,ES +92743296,92743307,IT 92743308,92743311,FR 92743312,92743315,IT 92743316,92743355,FR 92743356,92743359,IT -92743360,92743611,FR +92743360,92743503,FR +92743504,92743519,IT +92743520,92743535,FR +92743536,92743551,ES +92743552,92743611,FR 92743612,92743615,IT -92743616,92743955,FR +92743616,92743631,FR +92743632,92743639,IT +92743640,92743643,ES +92743644,92743663,FR +92743664,92743671,IT +92743672,92743955,FR 92743956,92743959,IT -92743960,92744243,FR +92743960,92744111,FR +92744112,92744119,PL +92744120,92744123,FR +92744124,92744127,GB +92744128,92744159,IT +92744160,92744175,FR +92744176,92744191,DE +92744192,92744223,FR +92744224,92744227,DE +92744228,92744243,FR 92744244,92744247,NL 92744248,92744263,FR 92744264,92744267,NL 92744268,92744283,FR 92744284,92744291,NL -92744292,92744555,FR +92744292,92744295,ES +92744296,92744351,FR +92744352,92744367,BE +92744368,92744479,FR +92744480,92744511,GB +92744512,92744543,FR +92744544,92744547,BE +92744548,92744551,FR +92744552,92744555,ES 92744556,92744559,IT -92744560,92747711,FR +92744560,92744719,FR +92744720,92744735,BE +92744736,92744743,GB +92744744,92744767,FR +92744768,92744799,NL +92744800,92744895,FR +92744896,92744927,IT +92744928,92744935,CZ +92744936,92744943,CH +92744944,92744959,FR +92744960,92744975,PL +92744976,92745071,FR +92745072,92745087,ES +92745088,92745375,FR +92745376,92745391,IT +92745392,92745399,FR +92745400,92745407,ES +92745408,92745439,IE +92745440,92745471,NL +92745472,92745503,FR +92745504,92745535,DE +92745536,92745663,FR +92745664,92745695,IT +92745696,92745807,FR +92745808,92745823,NL +92745824,92745871,FR +92745872,92745887,IT +92745888,92746303,FR +92746304,92746335,GB +92746336,92746383,FR +92746384,92746399,CZ +92746400,92746415,FR +92746416,92746431,ES +92746432,92746559,FR +92746560,92746623,GB +92746624,92746639,BE +92746640,92747199,FR +92747200,92747231,GB +92747232,92747255,FR +92747256,92747263,PL +92747264,92747267,NL +92747268,92747327,FR +92747328,92747335,BE +92747336,92747343,FR +92747344,92747347,ES +92747348,92747539,FR +92747540,92747543,CH +92747544,92747547,FR +92747548,92747551,ES +92747552,92747567,FR +92747568,92747583,BE +92747584,92747687,FR +92747688,92747691,NL +92747692,92747699,FR +92747700,92747703,FI +92747704,92747711,FR 92747712,92747775,GB -92747776,92748773,FR +92747776,92748303,FR +92748304,92748319,CH +92748320,92748511,FR +92748512,92748543,IE +92748544,92748773,FR 92748774,92748774,PT -92748775,92749067,FR +92748775,92748847,FR +92748848,92748851,BE +92748852,92748863,FR +92748864,92748879,ES +92748880,92749067,FR 92749068,92749071,GB -92749072,92749747,FR +92749072,92749183,FR +92749184,92749215,IT +92749216,92749439,FR +92749440,92749471,DE +92749472,92749531,FR +92749532,92749535,ES +92749536,92749747,FR 92749748,92749751,ES -92749752,92751711,FR +92749752,92750255,FR +92750256,92750271,PL +92750272,92750603,FR +92750604,92750607,LT +92750608,92750655,FR +92750656,92750719,GB +92750720,92750751,FR +92750752,92750783,ES +92750784,92750815,GB +92750816,92750839,FR +92750840,92750843,PL +92750844,92750879,FR +92750880,92750887,CZ +92750888,92750975,FR +92750976,92751039,PT +92751040,92751071,FR +92751072,92751103,GB +92751104,92751679,FR +92751680,92751711,IT 92751712,92751712,DE -92751713,92753547,FR +92751713,92752127,FR +92752128,92752143,IT +92752144,92752359,FR +92752360,92752363,NL +92752364,92752431,FR +92752432,92752447,GB +92752448,92752543,FR +92752544,92752575,DE +92752576,92752591,NL +92752592,92752607,FR +92752608,92752611,IT +92752612,92752687,FR +92752688,92752703,ES +92752704,92752735,FR +92752736,92752751,ES +92752752,92752767,IT +92752768,92752831,FR +92752832,92752847,IT +92752848,92752863,FR +92752864,92752895,IT +92752896,92753079,FR +92753080,92753087,ES +92753088,92753095,IT +92753096,92753183,FR +92753184,92753215,GB +92753216,92753279,FR +92753280,92753311,CH +92753312,92753343,BE +92753344,92753547,FR 92753548,92753551,IT -92753552,92754579,FR +92753552,92753567,FR +92753568,92753599,BE +92753600,92753823,FR +92753824,92753855,DE +92753856,92754095,FR +92754096,92754111,GB +92754112,92754447,FR +92754448,92754463,GB +92754464,92754479,FR +92754480,92754503,ES +92754504,92754527,FR +92754528,92754543,PT +92754544,92754579,FR 92754580,92754583,ES -92754584,92757311,FR +92754584,92754623,FR +92754624,92754639,PL +92754640,92754655,FR +92754656,92754671,IT +92754672,92755199,FR +92755200,92755231,NL +92755232,92755279,FR +92755280,92755287,DE +92755288,92755335,FR +92755336,92755343,ES +92755344,92755375,FR +92755376,92755423,GB +92755424,92755455,FR +92755456,92755487,CH +92755488,92755583,FR +92755584,92755615,CZ +92755616,92755871,FR +92755872,92755887,GB +92755888,92755903,ES +92755904,92756095,FR +92756096,92756127,DE +92756128,92756175,FR +92756176,92756191,PL +92756192,92756479,FR +92756480,92756495,GB +92756496,92757199,FR +92757200,92757215,GB +92757216,92757311,FR 92757312,92757375,ES -92757376,92762127,FR +92757376,92758127,FR +92758128,92758143,GB +92758144,92758223,FR +92758224,92758239,CH +92758240,92758271,FR +92758272,92758287,ES +92758288,92758399,FR +92758400,92758415,PL +92758416,92758655,FR +92758656,92758687,DE +92758688,92758799,FR +92758800,92758803,DE +92758804,92758807,ES +92758808,92758811,FR +92758812,92758815,DE +92758816,92758863,FR +92758864,92758879,PL +92758880,92759031,FR +92759032,92759039,GB +92759040,92759119,FR +92759120,92759135,NL +92759136,92759167,FR +92759168,92759183,GB +92759184,92760495,FR +92760496,92760511,ES +92760512,92760559,FR +92760560,92760575,ES +92760576,92760715,FR +92760716,92760719,ES +92760720,92761215,FR +92761216,92761343,DE +92761344,92761759,FR +92761760,92761763,IT +92761764,92761939,FR +92761940,92761943,GB +92761944,92762127,FR 92762128,92762135,ES -92762136,92782687,FR +92762136,92762319,FR +92762320,92762335,DE +92762336,92762383,FR +92762384,92762391,ES +92762392,92762655,FR +92762656,92762687,IT +92762688,92762839,FR +92762840,92762847,ES +92762848,92762879,FR +92762880,92762911,CH +92762912,92763311,FR +92763312,92763327,DE +92763328,92763331,FR +92763332,92763339,ES +92763340,92763391,FR +92763392,92763519,IE +92763520,92763647,FR +92763648,92763679,FI +92763680,92763711,ES +92763712,92763775,NL +92763776,92763839,FR +92763840,92763903,NL +92763904,92764287,FR +92764288,92764303,IE +92764304,92764431,FR +92764432,92764447,PL +92764448,92764463,FR +92764464,92764479,GB +92764480,92764511,FR +92764512,92764543,DE +92764544,92764595,FR +92764596,92764599,ES +92764600,92764799,FR +92764800,92764807,DE +92764808,92764863,FR +92764864,92764911,GB +92764912,92765295,FR +92765296,92765311,IT +92765312,92765351,FR +92765352,92765359,BE +92765360,92765391,FR +92765392,92765395,IT +92765396,92766015,FR +92766016,92766047,NL +92766048,92766079,FR +92766080,92766143,PT +92766144,92782687,FR 92782688,92782719,ES -92782720,92783543,FR +92782720,92782731,FR +92782732,92782735,ES +92782736,92782811,FR +92782812,92782815,CH +92782816,92782847,FR +92782848,92782879,NL +92782880,92782943,FR +92782944,92782975,IT +92782976,92783291,FR +92783292,92783295,DE +92783296,92783543,FR 92783544,92783547,ES -92783548,92786827,FR +92783548,92783715,FR +92783716,92783719,NL +92783720,92783723,IT +92783724,92783727,FR +92783728,92783731,ES +92783732,92783735,IT +92783736,92783911,FR +92783912,92783919,PT +92783920,92783999,FR +92784000,92784031,IT +92784032,92784159,FR +92784160,92784191,CH +92784192,92784223,FR +92784224,92784239,PL +92784240,92784255,FR +92784256,92784263,NL +92784264,92784291,FR +92784292,92784295,PL +92784296,92784299,FR +92784300,92784303,DE +92784304,92784467,FR +92784468,92784471,NL +92784472,92784479,FR +92784480,92784511,ES +92784512,92784639,GB +92784640,92784671,FR +92784672,92784703,GB +92784704,92784807,FR +92784808,92784815,LT +92784816,92785363,FR +92785364,92785367,PT +92785368,92785407,FR +92785408,92785439,CH +92785440,92785599,FR +92785600,92785607,GB +92785608,92785615,FR +92785616,92785631,IT +92785632,92785663,FR +92785664,92785679,BE +92785680,92785687,ES +92785688,92785695,DE +92785696,92785791,FR +92785792,92785823,IT +92785824,92785871,FR +92785872,92785887,IT +92785888,92786183,FR +92786184,92786187,ES +92786188,92786191,PT +92786192,92786199,FR +92786200,92786207,BE +92786208,92786239,FR +92786240,92786255,FI +92786256,92786311,FR +92786312,92786319,CZ +92786320,92786631,FR +92786632,92786639,BE +92786640,92786743,FR +92786744,92786751,DE +92786752,92786827,FR 92786828,92786831,IT -92786832,92795123,FR +92786832,92786855,FR +92786856,92786859,PL +92786860,92786879,FR +92786880,92786911,DE +92786912,92786927,GB +92786928,92786943,ES +92786944,92786975,FR +92786976,92786979,GB +92786980,92786991,FR +92786992,92786999,IT +92787000,92787111,FR +92787112,92787119,IT +92787120,92787391,FR +92787392,92787407,BE +92787408,92787423,FR +92787424,92787503,ES +92787504,92787639,FR +92787640,92787647,DE +92787648,92787967,FR +92787968,92788031,ES +92788032,92788095,FR +92788096,92788127,PL +92788128,92788171,FR +92788172,92788175,ES +92788176,92788255,FR +92788256,92788259,PT +92788260,92788263,FR +92788264,92788271,GB +92788272,92788383,FR +92788384,92788415,CZ +92788416,92788479,FR +92788480,92788511,IE +92788512,92788607,FR +92788608,92788639,NL +92788640,92788687,FR +92788688,92788703,ES +92788704,92788735,BE +92788736,92788967,FR +92788968,92788975,DE +92788976,92789055,FR +92789056,92789071,ES +92789072,92789079,FR +92789080,92789083,IT +92789084,92789223,FR +92789224,92789231,NL +92789232,92789335,FR +92789336,92789339,CH +92789340,92789343,CZ +92789344,92789383,FR +92789384,92789387,NL +92789388,92789391,FR +92789392,92789395,IT +92789396,92789399,DE +92789400,92789423,FR +92789424,92789427,ES +92789428,92789475,FR +92789476,92789479,IT +92789480,92789499,FR +92789500,92789503,IT +92789504,92789743,FR +92789744,92789759,PL +92789760,92789919,FR +92789920,92789951,PL +92789952,92790239,FR +92790240,92790271,IE +92790272,92790283,FR +92790284,92790287,PL +92790288,92790367,FR +92790368,92790371,PT +92790372,92790463,FR +92790464,92790495,GB +92790496,92790511,FR +92790512,92790527,GB +92790528,92790575,FR +92790576,92790591,PT +92790592,92790703,FR +92790704,92790719,IT +92790720,92790799,FR +92790800,92790803,BE +92790804,92790815,FR +92790816,92790847,LT +92790848,92790863,FI +92790864,92790959,FR +92790960,92790975,DE +92790976,92791039,FR +92791040,92791167,ES +92791168,92791183,BE +92791184,92791215,FR +92791216,92791223,IT +92791224,92791231,ES +92791232,92791263,FR +92791264,92791279,FI +92791280,92791283,FR +92791284,92791295,DE +92791296,92791327,ES +92791328,92791359,FR +92791360,92791391,ES +92791392,92791423,FR +92791424,92791455,GB +92791456,92791487,BE +92791488,92792319,FR +92792320,92792383,ES +92792384,92792415,FR +92792416,92792431,ES +92792432,92792511,FR +92792512,92792575,PT +92792576,92792703,FR +92792704,92792767,PL +92792768,92792799,FR +92792800,92792831,PT +92792832,92792959,GB +92792960,92793023,FR +92793024,92793055,GB +92793056,92793087,ES +92793088,92793215,FR +92793216,92793247,IT +92793248,92793263,FR +92793264,92793279,ES +92793280,92793887,FR +92793888,92793919,IT +92793920,92794143,FR +92794144,92794159,DE +92794160,92794175,FR +92794176,92794207,NL +92794208,92794367,FR +92794368,92794399,GB +92794400,92794503,FR +92794504,92794511,ES +92794512,92794879,FR +92794880,92794895,ES +92794896,92794943,FR +92794944,92794975,BE +92794976,92795103,FR +92795104,92795111,ES +92795112,92795123,FR 92795124,92795127,IT -92795128,92798975,FR +92795128,92795171,FR +92795172,92795175,BE +92795176,92795179,PL +92795180,92795619,FR +92795620,92795623,PL +92795624,92796463,FR +92796464,92796479,CZ +92796480,92796511,FR +92796512,92796543,DE +92796544,92796583,FR +92796584,92796587,PL +92796588,92796671,FR +92796672,92796687,GB +92796688,92796695,FR +92796696,92796703,BE +92796704,92796711,PL +92796712,92796727,FR +92796728,92796735,IT +92796736,92797567,FR +92797568,92797759,PT +92797760,92797903,FR +92797904,92797911,NL +92797912,92797983,FR +92797984,92797987,GB +92797988,92798015,FR +92798016,92798047,ES +92798048,92798175,FR +92798176,92798191,IT +92798192,92798223,FR +92798224,92798231,CZ +92798232,92798255,FR +92798256,92798271,PL +92798272,92798431,FR +92798432,92798439,PL +92798440,92798591,FR +92798592,92798623,IE +92798624,92798975,FR 92798976,93323263,RU 93323264,93335551,CH 93335552,93339647,IL @@ -1056,9 +1936,7 @@ 93693952,93695999,IE 93696000,93700095,FR 93700096,93702143,PL -93702144,93705983,RU -93705984,93706239,UA -93706240,93708287,RU +93702144,93708287,RU 93708288,93712383,DE 93712384,93714431,HU 93714432,93716479,NL @@ -1071,7 +1949,9 @@ 93782016,93833983,GB 93833984,93834239,NL 93834240,93835263,GB -93835264,93835519,NL +93835264,93835407,NL +93835408,93835415,GB +93835416,93835519,NL 93835520,93836287,GB 93836288,93836799,NL 93836800,93842351,GB @@ -1088,11 +1968,15 @@ 93906944,93908991,BA 93908992,93911039,IT 93911040,93913087,AE -93913088,93914319,NL +93913088,93913727,NL +93913728,93913735,US +93913736,93914319,NL 93914320,93914323,AZ 93914324,93914357,NL 93914358,93914358,GB -93914359,93914710,NL +93914359,93914671,NL +93914672,93914679,US +93914680,93914710,NL 93914711,93914711,GB 93914712,93914951,NL 93914952,93914959,US @@ -1109,11 +1993,17 @@ 93916528,93916543,US 93916544,93916591,NL 93916592,93916599,US -93916600,93916971,NL +93916600,93916791,NL +93916792,93916799,US +93916800,93916971,NL 93916972,93916975,US -93916976,93918103,NL +93916976,93917871,NL +93917872,93917879,US +93917880,93918103,NL 93918104,93918111,US -93918112,93918215,NL +93918112,93918199,NL +93918200,93918207,US +93918208,93918215,NL 93918216,93918223,US 93918224,93918555,NL 93918556,93918559,US @@ -1122,38 +2012,34 @@ 93918600,93918655,NL 93918656,93918687,US 93918688,93919263,NL -93919264,93919279,US -93919280,93919391,NL +93919264,93919287,US +93919288,93919391,NL 93919392,93919395,US -93919396,93919951,NL +93919396,93919727,NL +93919728,93919735,US +93919736,93919951,NL 93919952,93919959,US 93919960,93920059,NL 93920060,93920063,US 93920064,93920163,NL 93920164,93920167,US -93920168,93920223,NL -93920224,93920231,US -93920232,93920575,NL +93920168,93920575,NL 93920576,93920639,US 93920640,93920855,NL 93920856,93920863,US -93920864,93920967,NL -93920968,93920975,US -93920976,93921055,NL +93920864,93921055,NL 93921056,93921059,US -93921060,93921063,NL -93921064,93921071,GB -93921072,93923551,NL -93923552,93923559,US -93923560,93923567,NL +93921060,93921119,NL +93921120,93921127,US +93921128,93923095,NL +93923096,93923103,US +93923104,93923567,NL 93923568,93923575,US 93923576,93923855,NL 93923856,93923863,US 93923864,93924407,NL 93924408,93924415,JP -93924416,93924591,NL -93924592,93924599,US -93924600,93925807,NL +93924416,93925807,NL 93925808,93925815,KE 93925816,93927143,NL 93927144,93927151,JP @@ -1177,7 +2063,9 @@ 93974528,93976575,CH 93976576,93978623,GB 93978624,94011391,ES -94011392,94175231,RO +94011392,94044159,RO +94044160,94109695,SY +94109696,94175231,RO 94175232,94178303,SE 94178304,94178559,NO 94178560,94179071,SE @@ -1192,7 +2080,9 @@ 94184960,94185471,IT 94185472,94186495,LU 94186496,94187263,DE -94187264,94188287,AT +94187264,94187519,AT +94187520,94187775,SE +94187776,94188287,AT 94188288,94189311,SE 94189312,94189567,LI 94189568,94191615,SE @@ -1264,22 +2154,35 @@ 95388928,95389183,AU 95389184,95389695,DE 95389696,95390207,GB -95390208,95393151,DE +95390208,95393023,DE +95393024,95393151,GB 95393152,95393279,RS -95393280,95393407,DE +95393280,95393407,GB 95393408,95393535,AE 95393536,95393663,DE 95393664,95393791,QA 95393792,95394047,GB 95394048,95395327,AU -95395328,95395839,GB +95395328,95395455,GB +95395456,95395583,DE +95395584,95395839,GB 95395840,95398399,DE 95398400,95398655,GB -95398656,95400447,DE +95398656,95399679,DE +95399680,95399807,US +95399808,95399935,DE +95399936,95400063,CA +95400064,95400191,DE +95400192,95400319,CA +95400320,95400447,DE 95400448,95400703,GB -95400704,95401471,DE +95400704,95400831,US +95400832,95400959,DE +95400960,95401087,US +95401088,95401471,DE 95401472,95401727,GB -95401728,95401903,DE +95401728,95401855,US +95401856,95401903,DE 95401904,95401911,AT 95401912,95401983,DE 95401984,95402111,GB @@ -1290,15 +2193,22 @@ 95402696,95402703,HR 95402704,95402719,DE 95402720,95402751,US -95402752,95403183,DE +95402752,95403007,DE +95403008,95403135,US +95403136,95403183,DE 95403184,95403191,BE -95403192,95403519,DE +95403192,95403263,DE +95403264,95403391,US +95403392,95403519,DE 95403520,95403775,GB 95403776,95404799,DE 95404800,95405055,GB -95405056,95405567,DE +95405056,95405311,DE +95405312,95405439,US +95405440,95405567,DE 95405568,95405823,GB -95405824,95406335,DE +95405824,95405951,US +95405952,95406335,DE 95406336,95407359,GB 95407360,95407871,US 95407872,95408639,DE @@ -1308,8 +2218,8 @@ 95409920,95410175,DE 95410176,95410431,AU 95410432,95410447,CH -95410448,95410687,DE -95410688,95410943,GB +95410448,95410559,DE +95410560,95410943,GB 95410944,95411199,DE 95411200,95411215,NL 95411216,95420415,DE @@ -1348,17 +2258,14 @@ 96153600,96155647,PL 96155648,96157695,CH 96157696,96165887,RU -96165888,96166143,GP -96166144,96167167,FR -96167168,96167423,GP -96167424,96167679,FR -96167680,96167935,GP -96167936,96168191,MQ -96168192,96169471,FR -96169472,96169727,MQ -96169728,96170751,FR -96170752,96171263,GF -96171264,96173055,FR +96165888,96166399,FR +96166400,96166655,GP +96166656,96168703,FR +96168704,96168959,MQ +96168960,96171775,FR +96171776,96172031,GF +96172032,96172799,FR +96172800,96173055,GP 96173056,96173311,MQ 96173312,96174079,FR 96174080,96206847,HU @@ -1367,8 +2274,61 @@ 96321536,96337919,RU 96337920,96403455,IR 96403456,96468991,AZ -96468992,96731135,RO -96731136,96796671,DE +96468992,96731135,AE +96731136,96739479,FR +96739480,96739483,DE +96739484,96739583,FR +96739584,96739587,PT +96739588,96740223,FR +96740224,96740351,IT +96740352,96742407,FR +96742408,96742415,NL +96742416,96742427,FR +96742428,96742431,NL +96742432,96742679,FR +96742680,96742687,DE +96742688,96744607,FR +96744608,96744611,IT +96744612,96744831,FR +96744832,96744839,GB +96744840,96747291,FR +96747292,96747295,PT +96747296,96756427,FR +96756428,96756431,ES +96756432,96756447,DE +96756448,96756743,FR +96756744,96756751,NL +96756752,96757639,FR +96757640,96757643,CH +96757644,96757883,FR +96757884,96757887,ES +96757888,96759767,FR +96759768,96759775,IT +96759776,96760403,FR +96760404,96760407,IT +96760408,96761855,FR +96761856,96761871,BE +96761872,96762943,FR +96762944,96763007,ES +96763008,96763551,FR +96763552,96763555,GB +96763556,96764375,FR +96764376,96764383,IT +96764384,96764559,FR +96764560,96764575,NL +96764576,96767031,FR +96767032,96767035,GB +96767036,96767823,FR +96767824,96767839,BE +96767840,96768151,FR +96768152,96768155,FI +96768156,96770651,FR +96770652,96770655,PL +96770656,96773119,FR +96773120,96773375,ES +96773376,96778867,FR +96778868,96778871,BE +96778872,96796671,FR 96796672,96862207,AZ 96862208,96894975,GB 96894976,96897023,CZ @@ -1417,7 +2377,9 @@ 98734080,98736127,CH 98736128,98738175,RU 98738176,98740223,NO -98740224,98741503,DE +98740224,98740479,DE +98740480,98740735,US +98740736,98741503,DE 98741504,98741759,US 98741760,98742271,DE 98742272,98744319,GB @@ -1427,11 +2389,13 @@ 98893824,98959359,TR 98959360,99024895,DE 99024896,99025167,GB -99025168,99025407,IT +99025168,99025279,DE +99025280,99025407,US 99025408,99025663,NL 99025664,99025919,DE 99025920,99025935,FI -99025936,99026175,SE +99025936,99026047,DE +99026048,99026175,US 99026176,99026943,DE 99026944,99027199,GB 99027200,99027215,HR @@ -1439,23 +2403,29 @@ 99027456,99027711,PL 99027712,99027967,DE 99027968,99027983,ES -99027984,99028223,DE +99027984,99028095,DE +99028096,99028223,US 99028224,99028239,GB -99028240,99028735,DE +99028240,99028351,DE +99028352,99028479,US +99028480,99028735,DE 99028736,99028751,SE -99028752,99028991,EG -99028992,99029247,GB -99029248,99029503,DE +99028752,99028863,DE +99028864,99028991,US +99028992,99029503,GB 99029504,99029519,IE -99029520,99029759,TR -99029760,99031295,DE +99029520,99031295,DE 99031296,99031551,GB -99031552,99031807,DE +99031552,99031679,DE +99031680,99031807,US 99031808,99031823,GB -99031824,99032063,FR +99031824,99031935,DE +99031936,99032063,US 99032064,99043839,DE 99043840,99043847,AT -99043848,99044351,DE +99043848,99044095,DE +99044096,99044223,US +99044224,99044351,DE 99044352,99044359,BE 99044360,99044607,DE 99044608,99044615,HR @@ -1500,12 +2470,12 @@ 100560896,100560959,GB 100560960,100561023,RO 100561024,100561151,GB -100561152,100564991,RO +100561152,100561599,RO +100561600,100561663,US +100561664,100564991,RO 100564992,100569087,SE 100569088,100569343,FR -100569344,100569599,SE -100569600,100569855,FR -100569856,100573183,SE +100569344,100573183,SE 100573184,100575231,GB 100575232,100577279,DK 100577280,100579327,RU @@ -1520,7 +2490,8 @@ 100636672,100638719,NL 100638720,100646911,UA 100646912,100663295,RU -100663296,134874866,US +100663296,100663296,CN +100663297,134874866,US 134874867,134874867,DO 134874868,135192575,US 135192576,135200767,MX @@ -1532,13 +2503,13 @@ 135607040,135607295,CA 135607296,135776255,US 135776256,135776511,GU -135776512,135790591,US -135790592,135790847,CA -135790848,135791103,US +135776512,135791103,US 135791104,135791615,CA -135791616,135792639,US -135792640,135794687,CA -135794688,136237055,US +135791616,135792383,US +135792384,135794687,CA +135794688,135926527,US +135926528,135926783,VI +135926784,136237055,US 136237056,136239103,CA 136239104,136404991,US 136404992,136407039,CA @@ -1546,18 +2517,14 @@ 136413184,136415231,CA 136415232,136415665,US 136415666,136415666,FR -136415667,136689919,US -136689920,136690175,CA -136690176,139954241,US +136415667,139954241,US 139954242,139954242,ES 139954243,152305663,US 152305664,152338431,GB 152338432,167772159,US 184549376,201897983,US 201897984,201898239,PR -201898240,202182143,US -202182144,202182399,GB -202182400,202385407,US +201898240,202385407,US 202385408,202385919,PR 202385920,202706431,US 202706432,202706943,PR @@ -1565,9 +2532,11 @@ 202935552,202935807,PR 202935808,203272959,US 203272960,203273215,GB -203273216,203659007,US -203659008,203659263,VI -203659264,204047871,US +203273216,203658975,US +203658976,203658991,VI +203658992,204047359,US +204047360,204047615,VI +204047616,204047871,US 204047872,204047999,PR 204048000,204048031,US 204048032,204048047,PR @@ -1577,9 +2546,7 @@ 211126784,211126911,PR 211126912,211263999,US 211264000,211264255,SA -211264256,211597311,US -211597312,211597567,VI -211597568,211597719,US +211264256,211597719,US 211597720,211597727,VI 211597728,212787199,US 212787200,212788223,PR @@ -1595,25 +2562,39 @@ 212793088,212793343,PR 212793344,212794575,US 212794576,212794583,VI -212794584,214698239,US +212794584,213799167,US +213799168,213799423,CA +213799424,214617343,US +214617344,214617599,CA +214617600,214698239,US 214698240,214698255,VI 214698256,214698303,US 214698304,214698311,VI 214698312,214699519,US 214699520,214699647,PR 214699648,214699775,VI -214699776,214778367,US -214778368,214778623,PR -214778624,217709055,US -217709056,217709311,PR -217709312,219512063,US +214699776,214779135,US +214779136,214779391,PR +214779392,219249919,US +219249920,219250175,GB +219250176,219512063,US 219512064,219512319,GB 219512320,234881023,US 234881024,234883071,CN 234883072,234884095,JP 234884096,234885119,CN 234885120,234889215,VN -234889216,234913791,KR +234889216,234893311,JP +234893312,234895359,KR +234895360,234895615,TW +234895616,234895871,MY +234895872,234896127,TH +234896128,234896383,MN +234896384,234896639,IN +234896640,234896895,AE +234896896,234897151,PH +234897152,234897407,TW +234897408,234913791,KR 234913792,234946559,HK 234946560,234947583,CN 234947584,234950655,JP @@ -1652,7 +2633,9 @@ 243400704,243531775,CN 243531776,243662847,JP 243662848,243793919,CN -243793920,243859455,HK +243793920,243858687,HK +243858688,243858943,GB +243858944,243859455,HK 243859456,243916799,AU 243916800,243924991,JP 243924992,243990527,KR @@ -1704,7 +2687,9 @@ 265023488,265027583,GB 265027584,265060351,US 265060352,265093119,FR -265093120,266062079,US +265093120,265533695,US +265533696,265533951,JP +265533952,266062079,US 266062080,266062335,IN 266062336,266070271,US 266070272,266070527,AU @@ -1834,7 +2819,9 @@ 344260608,344260863,GB 344260864,344262655,US 344262656,344262911,GB -344262912,344588543,US +344262912,344270847,US +344270848,344270911,GB +344270912,344588543,US 344588544,344589055,GB 344589056,344592895,US 344592896,344592945,GB @@ -1880,7 +2867,8 @@ 386842624,386846719,NL 386846720,386862079,US 386862080,386862335,JP -386862336,386875391,US +386862336,386862591,KR +386862592,386875391,US 386875392,386879487,NL 386879488,386887679,US 386887680,386891775,NL @@ -2075,6 +3063,8 @@ 392765440,392765695,GB 392765696,394264575,US 394264576,394264831,CA +394270720,394271231,NL +394296320,394296831,NL 398458880,398635007,US 398635008,398643199,NL 398643200,398647295,US @@ -2109,7 +3099,9 @@ 399458304,399466495,NL 399466496,399601663,US 399601664,399618047,NL -399618048,399630335,US +399618048,399619839,US +399619840,399620095,AU +399620096,399630335,US 399630336,399638527,NL 399638528,399818751,US 399818752,399831039,NL @@ -2160,7 +3152,19 @@ 401130496,401130751,DE 401130752,401137151,US 401137152,401137663,GB -401137664,401145855,US +401137664,401142783,US +401142784,401143039,PE +401143040,401143295,BZ +401143296,401143551,NG +401143552,401143807,IM +401143808,401144063,SA +401144064,401144319,VE +401144320,401144575,BS +401144576,401144831,MA +401144832,401145087,OM +401145088,401145343,CO +401145344,401145599,SC +401145600,401145855,YE 401145856,401211391,CA 401211392,401293311,US 401293312,401297407,CA @@ -2175,7 +3179,15 @@ 401547264,401555455,CA 401555456,402096639,US 402096640,402096895,FR -402096896,402105087,US +402096896,402097151,US +402097152,402097407,AR +402097408,402097663,KE +402097664,402097919,SY +402097920,402098175,MX +402098176,402098431,BN +402098432,402098687,BH +402098688,402098943,AW +402098944,402105087,US 402105088,402105343,GB 402105344,402107391,US 402107392,402107647,IT @@ -2203,7 +3215,9 @@ 402374656,402399231,US 402399232,402403327,CA 402403328,402415615,US -402415616,402417663,CA +402415616,402416639,CA +402416640,402416895,US +402416896,402417663,CA 402417664,402550015,US 402550016,402550271,CA 402550272,402550783,GB @@ -2234,9 +3248,9 @@ 406061056,406110207,US 406110208,406142975,CA 406142976,406147071,US -406147072,406151167,CA +406147072,406159359,CA 406159360,406175743,US -406183936,406208511,CA +406175744,406208511,CA 406216704,406241279,US 406241280,406257663,PR 406257664,406274047,US @@ -2247,10 +3261,8 @@ 406323200,406388735,US 406388736,406454271,CA 406454272,406683647,US -406683648,406683775,CA -406683776,406683903,US -406683904,406684159,CA -406684160,406838783,US +406683648,406684031,CA +406684032,406838783,US 406838784,406839295,CA 406839296,406847487,US 406847488,407408639,CA @@ -2278,6 +3290,7 @@ 410189824,410648575,US 410648576,410714111,CA 410714112,411156479,US +411156480,411160575,CA 411164672,411168767,CA 411168768,411303935,US 411303936,411369471,NL @@ -2288,7 +3301,9 @@ 411639808,411664383,CA 411664384,411680767,US 411680768,411688959,CA -411688960,411697151,PR +411688960,411691519,PR +411691520,411692031,US +411692032,411697151,PR 411697152,411746303,CA 411746304,411762687,PR 411762688,411770879,CA @@ -2318,7 +3333,9 @@ 412958720,413007871,CA 413007872,413908991,US 413908992,413925375,PR -413925376,415760383,US +413925376,414502655,US +414502656,414502783,CA +414502784,415760383,US 415760384,416022527,CA 416022528,416059391,US 416059392,416088063,CA @@ -2334,7 +3351,9 @@ 416743424,416776191,CA 416776192,417202175,US 417202176,417267711,CA -417267712,417366015,US +417267712,417335807,US +417335808,417335935,VI +417335936,417366015,US 417366016,417398783,CA 417398784,417431551,US 417431552,417529855,CA @@ -2346,9 +3365,7 @@ 417796096,417800191,US 417800192,417808383,BS 417808384,417816575,CA -417820672,417832191,US -417832192,417832447,VI -417832448,417857535,US +417820672,417857535,US 417857536,417923071,AR 417923072,418062335,US 418062336,418070527,CA @@ -2541,7 +3558,8 @@ 460983296,460984319,HK 460984320,460988415,PG 460988416,460994559,JP -460994560,460995583,MY +460994560,460995327,MY +460995328,460995583,SG 460996608,461008895,JP 461008896,461012991,AU 461012992,461045759,KR @@ -2554,9 +3572,9 @@ 461056000,461058047,AU 461058048,461062143,HK 461062144,461078527,IN -461078528,461078783,FJ -461078784,461079039,AU -461079040,461094911,FJ +461078528,461088767,FJ +461088768,461089023,AU +461089024,461094911,FJ 461094912,461096959,HK 461096960,461099007,TW 461099008,461100031,JP @@ -2662,22 +3680,26 @@ 520491648,520491775,IS 520491776,520492031,IE 520492032,520493055,GB -520493056,520494079,IT +520493056,520493311,BE +520493312,520494079,IT 520494080,520494335,FR -520494336,520494591,IT +520494336,520494591,CZ 520494592,520494847,CH 520494848,520495103,DK -520495104,520495871,IT +520495104,520495359,SE +520495360,520495615,BE +520495616,520495871,SE 520495872,520496383,DE -520496384,520496895,IT +520496384,520496639,TR +520496640,520496767,CZ +520496768,520496895,TR 520496896,520497151,ES 520497152,520497407,FR 520497408,520497919,IT 520497920,520498175,FR 520498176,520498431,CH 520498432,520498687,SE -520498688,520498943,IT -520498944,520499199,FR +520498688,520499199,FR 520499200,520500223,IT 520500224,520500479,LU 520500480,520500735,DE @@ -2733,18 +3755,22 @@ 520949760,520951807,RU 520951808,520953855,IE 520953856,520962047,RU -520962048,520978431,IE +520962048,520963407,IE +520963408,520963408,US +520963409,520978431,IE 520978432,520980479,RU 520980480,520982527,IT 520982528,520984575,RU -520984576,520986623,GB +520984576,520986623,NG 520986624,520988671,PS 520988672,520990719,DE 520990720,520992767,RU 520994816,521011199,BG 521011200,521020415,RO 521020416,521021439,MD -521021440,521057279,RO +521021440,521039871,RO +521039872,521043967,IR +521043968,521057279,RO 521057280,521058303,MD 521058304,521076735,RO 521076736,521078783,ES @@ -2849,13 +3875,7 @@ 521953280,521961471,RU 521961472,521969663,CZ 521969664,521977855,UA -521977856,521986303,RU -521986304,521986559,UA -521986560,521989631,RU -521989632,521989887,UA -521989888,521991679,RU -521991680,521991935,UA -521991936,521994239,RU +521977856,521994239,RU 521994240,522002431,KG 522002432,522010623,IR 522010624,522018815,AE @@ -2863,7 +3883,9 @@ 522027008,522059775,RU 522059776,522125311,CZ 522125312,522133503,MD -522133504,522135551,NL +522133504,522134783,NL +522134784,522134911,US +522134912,522135551,NL 522135552,522137599,IT 522137600,522141695,CH 522141696,522143743,RU @@ -3061,11 +4083,14 @@ 529596416,529661951,TR 529661952,529727487,GE 529727488,529793023,HR -529793024,529793337,CZ -529793338,529793338,RU -529793339,529793535,CZ -529793536,529794303,RU -529794304,529818623,CZ +529793024,529793279,CZ +529793280,529794303,RU +529794304,529795071,CZ +529795072,529796095,RU +529796096,529797119,UA +529797120,529805311,CZ +529805312,529817599,RU +529817600,529818623,CZ 529818624,529826303,RU 529826304,529826815,CZ 529826816,529827839,RU @@ -3160,8 +4185,8 @@ 531372544,531372799,DE 531372800,531380223,CH 531380224,531390463,DE -531390464,531394559,CH -531394560,531398655,DE +531390464,531392511,CH +531392512,531398655,DE 531398656,531400703,RU 531400704,531402751,UA 531402752,531404799,LU @@ -3193,15 +4218,15 @@ 531429408,531429415,IT 531429416,531429599,GB 531429600,531429607,IT -531429608,531430319,GB +531429608,531429855,GB +531429856,531429863,IT +531429864,531430319,GB 531430320,531430327,IT 531430328,531430823,GB 531430824,531430831,IT 531430832,531430847,GB 531430848,531430855,IT -531430856,531430927,GB -531430928,531430935,IT -531430936,531431423,GB +531430856,531431423,GB 531431424,531496959,RO 531496960,531628031,PL 531628032,531660799,TR @@ -3243,7 +4268,9 @@ 532246528,532250623,BA 532250624,532283391,GB 532283392,532291583,TR -532291584,532293631,IE +532291584,532292351,IE +532292352,532292607,GB +532292608,532293631,IE 532293632,532295679,IT 532295680,532297727,KG 532297728,532303871,RU @@ -3283,8 +4310,7 @@ 532381696,532414463,NL 532414464,532676607,IT 532676608,532692991,GE -532692992,532700927,CZ -532700928,532701183,SK +532692992,532701183,CZ 532701184,532703231,GB 532703232,532705279,RU 532705280,532709375,NL @@ -3324,9 +4350,7 @@ 532805632,532807679,SE 532807680,533200895,IT 533200896,533233663,TR -533233664,533236991,IE -533236992,533237247,GB -533237248,533250047,IE +533233664,533250047,IE 533250048,533254143,RU 533254144,533256191,NL 533256192,533262335,RU @@ -3336,7 +4360,9 @@ 533331968,533397503,UA 533397504,533463039,KW 533463040,533479423,RU -533479424,533481471,DE +533479424,533479519,DE +533479520,533479551,FI +533479552,533481471,DE 533481472,533483519,NO 533483520,533485567,FR 533485568,533487615,LU @@ -3385,9 +4411,7 @@ 533895168,533897215,TR 533897216,533899263,DE 533899264,533901311,RU -533901312,533904383,IL -533904384,533904639,FR -533904640,533905407,IL +533901312,533905407,IL 533905408,533913599,RU 533913600,533915647,ES 533915648,533919743,GB @@ -3402,7 +4426,7 @@ 533987328,534118399,DE 534118400,534151167,KW 534151168,534183935,DE -534183936,534249471,RO +534183936,534249471,AE 534249472,534253567,GB 534253568,534257663,FR 534257664,534259711,SE @@ -3430,7 +4454,6 @@ 534372352,534374399,KW 534374400,534376447,FR 534376448,534378495,IE -534378496,534380543,FR 534380544,534511615,AE 534511616,534512639,BZ 534512640,534512895,NL @@ -3439,10 +4462,12 @@ 534513216,534513279,VG 534513280,534513407,NL 534513408,534513663,SE -534513664,534515455,US -534515456,534515711,DE +534513664,534514687,US +534514688,534515711,DE 534515712,534515967,GB -534515968,534517759,US +534515968,534516735,US +534516736,534516991,GB +534516992,534517759,US 534517760,534518783,NL 534518784,534519039,DE 534519040,534519167,NL @@ -3461,9 +4486,7 @@ 534519552,534519807,NL 534519808,534521855,US 534521856,534522367,DE -534522368,534522879,NL -534522880,534523135,DE -534523136,534523391,NL +534522368,534523391,NL 534523392,534523903,DE 534523904,534530047,US 534530048,534544383,DE @@ -3471,7 +4494,9 @@ 534546432,534548479,DE 534548480,534550527,PL 534550528,534560767,RU -534560768,534609919,GB +534560768,534573823,GB +534573824,534574079,NL +534574080,534609919,GB 534609920,534642687,ES 534642688,534645759,CZ 534645760,534646271,PL @@ -3533,12 +4558,18 @@ 540737758,540737758,BR 540737759,540803071,BZ 540803072,540811263,US -540811264,540814335,SG +540811264,540814085,SG +540814086,540814086,TH +540814087,540814327,SG +540814328,540814328,IN +540814329,540814335,SG 540814336,540814591,US 540814592,540819455,SG 540819456,540820959,US 540820960,540820975,CA -540820976,540826383,US +540820976,540825347,US +540825348,540825348,CA +540825349,540826383,US 540826384,540826399,CA 540826400,543690751,US 543690752,543691007,AR @@ -3640,15 +4671,15 @@ 543881728,543883263,GB 543883264,544436771,US 544436772,544436775,CA -544436776,586972927,US +544436776,545858303,US +545858304,545858559,PR +545858560,586972927,US 586972928,586973183,CA 586973184,586977023,US 586977024,586977279,AU 586977280,587006719,US 587006720,587006975,GB -587006976,587039487,US -587039488,587039743,NO -587039744,603979775,US +587006976,603979775,US 603979776,603980799,CN 603980800,603981823,NP 603981824,604110847,CN @@ -3749,7 +4780,9 @@ 621445120,621805567,ES 621805568,621813759,NL 621813760,621821951,SA -621821952,621823999,DE +621821952,621823567,DE +621823568,621823583,US +621823584,621823999,DE 621824000,621826047,FR 621826048,621828095,RU 621830144,621838335,FI @@ -3771,12 +4804,9 @@ 621939712,621940479,RU 621940480,621942527,GB 621942528,621969407,RU -621971456,621971711,IM -621971712,621971967,GB -621971968,621972223,IM -621972224,621972479,GB -621972480,621972991,IM -621972992,621973503,GB +621971456,621972991,IM +621972992,621973247,GB +621973248,621973503,IM 621973504,621975551,IE 621975552,621977599,RU 621977600,621981695,FR @@ -3830,18 +4860,13 @@ 622510080,622512127,PL 622512128,622514175,DE 622514176,622518271,NO -622518272,622519295,NL +622518272,622518527,GB +622518528,622519295,NL 622519296,622520319,FR 622520320,622522367,RU 622522368,622524415,FR 622524416,622526463,ES -622526464,622553087,DE -622553088,622555135,US -622555136,622559743,DE -622559744,622561791,AT -622561792,622582271,DE -622582272,622583295,AT -622583296,622591999,DE +622526464,622591999,DE 622592000,622624767,OM 622624768,622626815,NO 622626816,622630911,DK @@ -3896,7 +4921,7 @@ 623077856,623077857,WS 623077858,623077861,NZ 623077862,623083519,CH -623083520,623116287,RO +623083520,623116287,ES 623116288,623378431,KW 623378432,623509503,OM 623509504,623640575,RO @@ -3922,9 +4947,9 @@ 623794176,623796223,ES 623796224,623798271,GB 623798272,623800319,GE -623800320,623801087,SE -623801088,623801599,US -623801600,623801855,SE +623800320,623800831,SE +623800832,623801087,NL +623801088,623801855,US 623801856,623802367,NL 623802368,623802879,SE 623802880,623804148,NL @@ -3967,9 +4992,17 @@ 624566272,624568319,RU 624568320,624570367,BE 624570368,624574463,DE -624574464,624574715,NL +624574464,624574535,NL +624574536,624574543,US +624574544,624574559,NL +624574560,624574567,US +624574568,624574715,NL 624574716,624574719,US -624574720,624575063,NL +624574720,624574855,NL +624574856,624574863,US +624574864,624575039,NL +624575040,624575047,US +624575048,624575063,NL 624575064,624575071,US 624575072,624575135,NL 624575136,624575143,US @@ -3977,35 +5010,35 @@ 624575400,624575403,US 624575404,624575679,NL 624575680,624575743,US -624575744,624575871,NL -624575872,624575879,US -624575880,624576031,NL -624576032,624576039,US -624576040,624576127,NL +624575744,624575759,NL +624575760,624575767,BE +624575768,624575895,NL +624575896,624575903,US +624575904,624576111,NL +624576112,624576119,US +624576120,624576127,NL 624576128,624576131,US -624576132,624576471,NL +624576132,624576287,NL +624576288,624576295,US +624576296,624576471,NL 624576472,624576479,US -624576480,624576887,NL +624576480,624576487,NL +624576488,624576495,CA +624576496,624576887,NL 624576888,624576895,GB -624576896,624577135,NL -624577136,624577139,GB -624577140,624577151,NL +624576896,624577151,NL 624577152,624577215,GB 624577216,624577307,NL 624577308,624577311,US 624577312,624577483,NL 624577484,624577487,US -624577488,624577863,NL -624577864,624577871,DK -624577872,624578415,NL -624578416,624578423,US -624578424,624578719,NL -624578720,624578723,GB -624578724,624578887,NL +624577488,624578887,NL 624578888,624578895,US 624578896,624578951,NL 624578952,624578955,US -624578956,624579075,NL +624578956,624579039,NL +624579040,624579047,US +624579048,624579075,NL 624579076,624579079,US 624579080,624579423,NL 624579424,624579455,US @@ -4017,17 +5050,31 @@ 624579624,624579627,US 624579628,624580132,NL 624580133,624580133,GB -624580134,624580151,NL +624580134,624580135,NL +624580136,624580143,US +624580144,624580151,NL 624580152,624580159,ES -624580160,624581071,NL +624580160,624580231,NL +624580232,624580239,US +624580240,624580263,NL +624580264,624580271,US +624580272,624580495,NL +624580496,624580503,US +624580504,624580559,NL +624580560,624580567,US +624580568,624581071,NL 624581072,624581087,US 624581088,624581135,NL 624581136,624581139,US 624581140,624581199,NL 624581200,624581207,GB -624581208,624581599,NL +624581208,624581535,NL +624581536,624581543,US +624581544,624581599,NL 624581600,624581631,US -624581632,624582123,NL +624581632,624581927,NL +624581928,624581935,US +624581936,624582123,NL 624582124,624582127,US 624582128,624582139,NL 624582140,624582147,US @@ -4035,7 +5082,15 @@ 624582288,624582295,US 624582296,624582399,NL 624582400,624582403,US -624582404,624584111,NL +624582404,624582615,NL +624582616,624582623,US +624582624,624582631,NL +624582632,624582639,US +624582640,624582759,NL +624582760,624582767,GB +624582768,624583239,NL +624583240,624583247,GB +624583248,624584111,NL 624584112,624584119,US 624584120,624584159,NL 624584160,624584175,US @@ -4043,13 +5098,19 @@ 624584384,624584391,US 624584392,624584415,NL 624584416,624584423,US -624584424,624586279,NL +624584424,624586183,NL +624586184,624586191,US +624586192,624586279,NL 624586280,624586287,US -624586288,624587583,NL +624586288,624587111,NL +624587112,624587119,US +624587120,624587583,NL 624587584,624587599,US 624587600,624587871,NL 624587872,624587903,US -624587904,624588383,NL +624587904,624587935,NL +624587936,624587943,US +624587944,624588383,NL 624588384,624588391,US 624588392,624588399,GB 624588400,624588927,NL @@ -4058,173 +5119,792 @@ 624589160,624589167,IT 624589168,624589199,NL 624589200,624589215,KE -624589216,624589223,NL -624589224,624589231,US -624589232,624589719,NL +624589216,624589375,NL +624589376,624589383,US +624589384,624589719,NL 624589720,624589727,US -624589728,624589967,NL +624589728,624589783,NL +624589784,624589791,US +624589792,624589967,NL 624589968,624589975,US 624589976,624590847,NL 624590848,624640527,FR 624640528,624640543,GB -624640544,624640759,FR +624640544,624640551,FR +624640552,624640559,IE +624640560,624640575,BE +624640576,624640735,FR +624640736,624640739,GB +624640740,624640759,FR 624640760,624640767,NL -624640768,624640951,FR +624640768,624640775,ES +624640776,624640847,FR +624640848,624640851,ES +624640852,624640903,FR +624640904,624640907,CZ +624640908,624640927,FR +624640928,624640931,ES +624640932,624640935,FR +624640936,624640939,FI +624640940,624640943,FR +624640944,624640951,ES 624640952,624640959,PT -624640960,624643019,FR +624640960,624640967,NL +624640968,624640991,FR +624640992,624640999,CH +624641000,624641023,FR +624641024,624641055,GB +624641056,624641063,FR +624641064,624641067,GB +624641068,624641119,FR +624641120,624641127,PL +624641128,624641195,FR +624641196,624641199,PL +624641200,624641207,DE +624641208,624641223,FR +624641224,624641231,PT +624641232,624641311,FR +624641312,624641319,BE +624641320,624641323,ES +624641324,624641367,FR +624641368,624641371,DE +624641372,624642055,FR +624642056,624642063,PL +624642064,624642079,BE +624642080,624642127,FR +624642128,624642159,GB +624642160,624642231,FR +624642232,624642235,ES +624642236,624642255,FR +624642256,624642271,IT +624642272,624642379,FR +624642380,624642383,FI +624642384,624642495,FR +624642496,624642511,ES +624642512,624642591,FR +624642592,624642623,DE +624642624,624642679,FR +624642680,624642683,IT +624642684,624642719,FR +624642720,624642723,IT +624642724,624642743,FR +624642744,624642751,GB +624642752,624642767,FR +624642768,624642783,GB +624642784,624642879,FR +624642880,624642883,IT +624642884,624643019,FR 624643020,624643023,IT -624643024,624645147,FR +624643024,624643039,FR +624643040,624643055,GB +624643056,624643071,FR +624643072,624643087,GB +624643088,624643095,FR +624643096,624643103,IT +624643104,624643187,FR +624643188,624643191,GB +624643192,624643343,FR +624643344,624643351,DE +624643352,624643359,FR +624643360,624643367,DE +624643368,624643503,FR +624643504,624643519,DE +624643520,624643631,FR +624643632,624643647,PL +624643648,624643775,FR +624643776,624643783,IT +624643784,624644063,FR +624644064,624644095,CH +624644096,624644275,FR +624644276,624644279,GB +624644280,624644615,FR +624644616,624644619,DE +624644620,624644631,FR +624644632,624644635,DE +624644636,624644639,PL +624644640,624644675,FR +624644676,624644679,DE +624644680,624644723,FR +624644724,624644727,NL +624644728,624644815,FR +624644816,624644819,DE +624644820,624645127,FR +624645128,624645131,DE +624645132,624645147,FR 624645148,624645151,IT -624645152,624646343,FR +624645152,624645279,FR +624645280,624645295,CH +624645296,624645619,FR +624645620,624645623,NL +624645624,624645759,FR +624645760,624645823,DE +624645824,624646095,FR +624646096,624646099,GB +624646100,624646143,FR +624646144,624646159,ES +624646160,624646235,FR +624646236,624646239,CZ +624646240,624646255,FR +624646256,624646263,DE +624646264,624646343,FR 624646344,624646347,NL -624646348,624646583,FR +624646348,624646351,FR +624646352,624646367,DE +624646368,624646495,FR +624646496,624646527,ES +624646528,624646535,CH +624646536,624646583,FR 624646584,624646591,NL -624646592,624647171,FR +624646592,624646639,FR +624646640,624646643,IE +624646644,624646975,FR +624646976,624646983,PL +624646984,624647055,FR +624647056,624647063,DE +624647064,624647171,FR 624647172,624647183,ES -624647184,624648139,FR +624647184,624647247,FR +624647248,624647263,GB +624647264,624647295,FR +624647296,624647327,ES +624647328,624647359,FR +624647360,624647375,PL +624647376,624647391,FR +624647392,624647399,PL +624647400,624647455,FR +624647456,624647471,ES +624647472,624647487,FR +624647488,624647503,PT +624647504,624647615,FR +624647616,624647623,PL +624647624,624647631,ES +624647632,624648079,FR +624648080,624648095,ES +624648096,624648111,FR +624648112,624648115,IT +624648116,624648127,FR +624648128,624648135,DE +624648136,624648139,FR 624648140,624648143,ES -624648144,624657711,FR -624657712,624657715,ES -624657716,624657883,FR +624648144,624653311,FR +624653312,624653823,GB +624653824,624656415,FR +624656416,624656447,IT +624656448,624656479,PL +624656480,624656511,NL +624656512,624656543,FR +624656544,624656575,PL +624656576,624656607,FR +624656608,624656639,IT +624656640,624656739,FR +624656740,624656743,CZ +624656744,624656767,FR +624656768,624656799,NL +624656800,624656975,FR +624656976,624656979,PT +624656980,624657147,FR +624657148,624657155,ES +624657156,624657183,FR +624657184,624657199,IE +624657200,624657279,FR +624657280,624657295,IT +624657296,624657299,DE +624657300,624657307,FR +624657308,624657311,PT +624657312,624657343,FR +624657344,624657359,ES +624657360,624657475,FR +624657476,624657479,DE +624657480,624657487,FR +624657488,624657491,PT +624657492,624657663,FR +624657664,624657667,ES +624657668,624657671,FI +624657672,624657675,PL +624657676,624657707,FR +624657708,624657715,ES +624657716,624657779,FR +624657780,624657783,GB +624657784,624657799,FR +624657800,624657803,IE +624657804,624657815,FR +624657816,624657819,ES +624657820,624657823,GB +624657824,624657883,FR 624657884,624657887,ES -624657888,624658323,FR -624658324,624658327,IE -624658328,624658479,FR +624657888,624657967,FR +624657968,624657975,GB +624657976,624658015,FR +624658016,624658031,IT +624658032,624658087,FR +624658088,624658095,NL +624658096,624658175,FR +624658176,624658179,BE +624658180,624658183,ES +624658184,624658319,FR +624658320,624658335,IE +624658336,624658431,FR +624658432,624658447,IT +624658448,624658479,FR 624658480,624658483,DE -624658484,624659031,FR +624658484,624658671,FR +624658672,624658675,IT +624658676,624658799,FR +624658800,624658803,PT +624658804,624658843,FR +624658844,624658847,ES +624658848,624659031,FR 624659032,624659039,IT -624659040,624660827,FR +624659040,624659055,ES +624659056,624659071,FR +624659072,624659135,ES +624659136,624659199,FR +624659200,624659215,DE +624659216,624659279,FR +624659280,624659295,NL +624659296,624659307,FR +624659308,624659311,DE +624659312,624659315,GB +624659316,624659391,FR +624659392,624659407,IT +624659408,624659455,FR +624659456,624659487,PL +624659488,624659647,FR +624659648,624659663,PL +624659664,624659799,FR +624659800,624659803,ES +624659804,624659871,FR +624659872,624659903,ES +624659904,624659935,FR +624659936,624659951,BE +624659952,624659967,FR +624659968,624659975,GB +624659976,624660503,FR +624660504,624660511,IT +624660512,624660563,FR +624660564,624660567,NL +624660568,624660607,FR +624660608,624660639,GB +624660640,624660827,FR 624660828,624660831,ES -624660832,624661247,FR +624660832,624660883,FR +624660884,624660887,DE +624660888,624660911,FR +624660912,624660915,PL +624660916,624660919,IT +624660920,624661247,FR 624661248,624661251,ES -624661252,624661787,FR +624661252,624661279,FR +624661280,624661283,CZ +624661284,624661787,FR 624661788,624661788,RO -624661789,624661955,FR +624661789,624661791,FR +624661792,624661823,DE +624661824,624661955,FR 624661956,624661959,PL -624661960,624663951,FR +624661960,624661967,ES +624661968,624661975,FI +624661976,624662455,FR +624662456,624662459,ES +624662460,624662543,FR +624662544,624662559,ES +624662560,624662623,FR +624662624,624662627,DE +624662628,624662751,FR +624662752,624662755,CZ +624662756,624662759,FR +624662760,624662763,CH +624662764,624662911,FR +624662912,624663039,GB +624663040,624663327,FR +624663328,624663359,DE +624663360,624663391,PT +624663392,624663667,FR +624663668,624663671,ES +624663672,624663695,FR +624663696,624663711,IT +624663712,624663851,FR +624663852,624663855,GB +624663856,624663863,FR +624663864,624663867,DE +624663868,624663871,ES +624663872,624663951,FR 624663952,624663955,ES -624663956,624664527,FR +624663956,624663971,FR +624663972,624663975,IT +624663976,624664255,FR +624664256,624664287,GB +624664288,624664319,ES +624664320,624664351,FR +624664352,624664367,ES +624664368,624664479,FR +624664480,624664483,IT +624664484,624664527,FR 624664528,624664531,ES -624664532,624664615,FR -624664616,624664619,IT -624664620,624664676,FR +624664532,624664611,FR +624664612,624664619,IT +624664620,624664635,FR +624664636,624664639,PL +624664640,624664655,FR +624664656,624664663,LT +624664664,624664667,FI +624664668,624664671,NL +624664672,624664676,FR 624664677,624664677,IE -624664678,624665587,FR +624664678,624664863,FR +624664864,624664895,ES +624664896,624664959,NL +624664960,624665247,FR +624665248,624665263,PL +624665264,624665391,FR +624665392,624665407,PT +624665408,624665551,FR +624665552,624665555,LT +624665556,624665567,FR +624665568,624665583,GB +624665584,624665587,FR 624665588,624665591,DE -624665592,624665803,FR +624665592,624665607,FR +624665608,624665611,ES +624665612,624665727,FR +624665728,624665759,GB +624665760,624665775,FR +624665776,624665779,GB +624665780,624665783,NL +624665784,624665787,FR +624665788,624665791,ES +624665792,624665803,FR 624665804,624665807,NL -624665808,624665951,FR +624665808,624665811,CH +624665812,624665859,FR +624665860,624665863,PT +624665864,624665951,FR 624665952,624665955,NL -624665956,624667471,FR +624665956,624665999,FR +624666000,624666015,BE +624666016,624666031,FR +624666032,624666047,PL +624666048,624666371,FR +624666372,624666375,BE +624666376,624666391,FR +624666392,624666399,DE +624666400,624666431,FR +624666432,624666495,IT +624666496,624666727,FR +624666728,624666731,PL +624666732,624666735,BE +624666736,624666739,IT +624666740,624666879,FR +624666880,624666883,IT +624666884,624666887,GB +624666888,624666907,FR +624666908,624666911,GB +624666912,624666927,FR +624666928,624666943,BE +624666944,624666959,IE +624666960,624666995,FR +624666996,624666999,NL +624667000,624667087,FR +624667088,624667103,ES +624667104,624667167,FR +624667168,624667199,GB +624667200,624667327,FR +624667328,624667391,NL +624667392,624667439,FR +624667440,624667455,GB +624667456,624667471,FR 624667472,624667475,IT -624667476,624668063,FR +624667476,624667599,FR +624667600,624667603,IT +624667604,624667827,FR +624667828,624667831,ES +624667832,624668063,FR 624668064,624668079,BE -624668080,624668639,FR +624668080,624668511,FR +624668512,624668543,DE +624668544,624668607,FR +624668608,624668639,PT 624668640,624668643,NL -624668644,624669795,FR +624668644,624668715,FR +624668716,624668735,ES +624668736,624668751,FR +624668752,624668767,GB +624668768,624668815,FR +624668816,624668831,ES +624668832,624668863,FR +624668864,624668879,ES +624668880,624669011,FR +624669012,624669015,DE +624669016,624669247,FR +624669248,624669255,DE +624669256,624669311,FR +624669312,624669327,ES +624669328,624669359,FR +624669360,624669367,IT +624669368,624669439,FR +624669440,624669455,NL +624669456,624669499,FR +624669500,624669503,DE +624669504,624669583,FR +624669584,624669591,IT +624669592,624669727,FR +624669728,624669743,GB +624669744,624669795,FR 624669796,624669799,ES -624669800,624671455,FR +624669800,624669871,FR +624669872,624669879,NL +624669880,624669887,ES +624669888,624669963,FR +624669964,624669967,LT +624669968,624669983,FR +624669984,624669987,IT +624669988,624670147,FR +624670148,624670151,CZ +624670152,624670195,FR +624670196,624670199,LT +624670200,624670391,FR +624670392,624670395,NL +624670396,624670399,GB +624670400,624670403,FR +624670404,624670407,ES +624670408,624670443,FR +624670444,624670447,ES +624670448,624670799,FR +624670800,624670803,GB +624670804,624670895,FR +624670896,624670903,DE +624670904,624670915,FR +624670916,624670919,ES +624670920,624671263,FR +624671264,624671279,ES +624671280,624671407,FR +624671408,624671423,GB +624671424,624671439,FR +624671440,624671455,IT 624671456,624671471,ES -624671472,624672547,FR +624671472,624671855,FR +624671856,624671871,GB +624671872,624671935,FR +624671936,624671943,NL +624671944,624672067,FR +624672068,624672071,DE +624672072,624672095,FR +624672096,624672127,CZ +624672128,624672131,FR +624672132,624672135,BE +624672136,624672175,FR +624672176,624672179,IT +624672180,624672511,FR +624672512,624672515,LT +624672516,624672519,IT +624672520,624672523,FR +624672524,624672527,GB +624672528,624672547,FR 624672548,624672551,ES -624672552,624672559,FR +624672552,624672555,FI +624672556,624672559,FR 624672560,624672563,IT -624672564,624673287,FR +624672564,624672607,FR +624672608,624672615,NL +624672616,624672671,FR +624672672,624672703,PL +624672704,624673279,FR +624673280,624673283,CH +624673284,624673287,FR 624673288,624673295,DE -624673296,624673451,FR +624673296,624673303,FR +624673304,624673307,GB +624673308,624673311,FR +624673312,624673343,CH +624673344,624673435,FR +624673436,624673439,DE +624673440,624673451,FR 624673452,624673455,ES 624673456,624673535,FR 624673536,624673791,ES -624673792,624673803,FR +624673792,624673795,PL +624673796,624673799,DE +624673800,624673803,FR 624673804,624673807,NL -624673808,624673903,FR +624673808,624673823,PL +624673824,624673871,FR +624673872,624673879,PL +624673880,624673883,FR +624673884,624673887,PL +624673888,624673891,FI +624673892,624673895,DE +624673896,624673903,FR 624673904,624673919,ES -624673920,624675691,FR +624673920,624673955,FR +624673956,624673959,IT +624673960,624674079,FR +624674080,624674111,PT +624674112,624674339,FR +624674340,624674343,NL +624674344,624674459,FR +624674460,624674463,PL +624674464,624674495,FR +624674496,624674503,GB +624674504,624674527,FR +624674528,624674559,DE +624674560,624674735,FR +624674736,624674739,ES +624674740,624674783,FR +624674784,624674815,GB +624674816,624675055,FR +624675056,624675059,DE +624675060,624675691,FR 624675692,624675695,ES -624675696,624675775,FR +624675696,624675719,FR +624675720,624675727,NL +624675728,624675775,FR 624675776,624675779,ES -624675780,624676003,FR +624675780,624675803,FR +624675804,624675807,ES +624675808,624675839,GB +624675840,624676003,FR 624676004,624676007,DE -624676008,624676087,FR +624676008,624676019,FR +624676020,624676023,DE +624676024,624676087,FR 624676088,624676091,DE -624676092,624676715,FR +624676092,624676183,FR +624676184,624676191,GB +624676192,624676495,FR +624676496,624676511,BE +624676512,624676715,FR 624676716,624676719,ES -624676720,624677463,FR +624676720,624676799,FR +624676800,624676863,IT +624676864,624676939,FR +624676940,624676943,ES +624676944,624677055,FR +624677056,624677087,IT +624677088,624677119,PL +624677120,624677247,FR +624677248,624677263,GB +624677264,624677279,FI +624677280,624677407,FR +624677408,624677439,ES +624677440,624677463,FR 624677464,624677467,ES 624677468,624677683,FR 624677684,624677687,NL -624677688,624677767,FR +624677688,624677727,FR +624677728,624677731,IT +624677732,624677767,FR 624677768,624677775,NL -624677776,624678391,FR +624677776,624677983,FR +624677984,624678015,GB +624678016,624678187,FR +624678188,624678191,DE +624678192,624678363,FR +624678364,624678367,ES +624678368,624678391,FR 624678392,624678399,NL -624678400,624678487,FR +624678400,624678415,FR +624678416,624678431,GB +624678432,624678463,FR +624678464,624678479,PL +624678480,624678487,FR 624678488,624678495,NL -624678496,624679175,FR +624678496,624678527,FR +624678528,624678543,CH +624678544,624678591,FR +624678592,624678655,PT +624678656,624679175,FR 624679176,624679183,NL 624679184,624679199,FR 624679200,624679203,ES -624679204,624679679,FR +624679204,624679311,FR +624679312,624679327,DE +624679328,624679391,FR +624679392,624679407,GB +624679408,624679679,FR 624679680,624679687,NL -624679688,624679843,FR +624679688,624679695,PL +624679696,624679775,FR +624679776,624679791,GB +624679792,624679795,IT +624679796,624679843,FR 624679844,624679847,ES -624679848,624680931,FR +624679848,624680191,FR +624680192,624680255,IT +624680256,624680511,FR +624680512,624680527,IT +624680528,624680735,FR +624680736,624680743,IT +624680744,624680747,NL +624680748,624680895,FR +624680896,624680927,ES +624680928,624680931,FR 624680932,624680935,NL -624680936,624681351,FR +624680936,624681095,FR +624681096,624681103,NL +624681104,624681279,FR +624681280,624681295,GB +624681296,624681327,FR +624681328,624681331,CH +624681332,624681335,PL +624681336,624681351,FR 624681352,624681359,NL -624681360,624681807,FR +624681360,624681439,FR +624681440,624681447,CH +624681448,624681451,DE +624681452,624681807,FR 624681808,624681823,BE -624681824,624683775,FR +624681824,624681967,FR +624681968,624681983,ES +624681984,624681999,IT +624682000,624682111,FR +624682112,624682127,IT +624682128,624682795,FR +624682796,624682799,NL +624682800,624683067,FR +624683068,624683071,GB +624683072,624683199,FR +624683200,624683215,ES +624683216,624683231,DE +624683232,624683295,FR +624683296,624683311,ES +624683312,624683519,FR +624683520,624683583,GB +624683584,624683679,FR +624683680,624683687,GB +624683688,624683775,FR 624683776,624683779,DE 624683780,624683783,FR 624683784,624683787,DE -624683788,624683975,FR +624683788,624683791,PL +624683792,624683815,FR +624683816,624683823,PL +624683824,624683887,FR +624683888,624683903,GB +624683904,624683935,FR +624683936,624683943,DE +624683944,624683975,FR 624683976,624683983,GB -624683984,624684183,FR +624683984,624683991,FR +624683992,624683999,IT +624684000,624684103,FR +624684104,624684111,FI +624684112,624684175,FR +624684176,624684183,GB 624684184,624684191,IT 624684192,624684199,FR 624684200,624684203,IT 624684204,624684207,FR 624684208,624684211,ES -624684212,624684799,FR +624684212,624684287,FR +624684288,624684303,IT +624684304,624684511,FR +624684512,624684543,NL +624684544,624684671,FR +624684672,624684679,DE +624684680,624684735,FR +624684736,624684767,GB +624684768,624684775,ES +624684776,624684799,FR 624684800,624684803,DE -624684804,624685711,FR +624684804,624684831,FR +624684832,624684847,DE +624684848,624685055,FR +624685056,624685059,GB +624685060,624685063,FI +624685064,624685215,FR +624685216,624685219,GB +624685220,624685263,FR +624685264,624685279,BE +624685280,624685311,DE +624685312,624685503,FR +624685504,624685535,BE +624685536,624685539,PT +624685540,624685559,FR +624685560,624685567,PT +624685568,624685711,FR 624685712,624685715,ES -624685716,624685799,FR +624685716,624685775,FR +624685776,624685791,DE +624685792,624685799,FR 624685800,624685803,ES 624685804,624685919,FR 624685920,624685923,ES 624685924,624685943,FR 624685944,624685947,IT -624685948,624686627,FR +624685948,624685951,GB +624685952,624685983,FR +624685984,624685987,IT +624685988,624686207,FR +624686208,624686239,GB +624686240,624686271,FR +624686272,624686303,GB +624686304,624686335,IE +624686336,624686627,FR 624686628,624686631,ES 624686632,624686667,FR 624686668,624686671,ES -624686672,624686711,FR +624686672,624686687,GB +624686688,624686711,FR 624686712,624686715,ES -624686716,624687343,FR +624686716,624686719,FR +624686720,624686735,NL +624686736,624686911,FR +624686912,624686975,GB +624686976,624687055,FR +624687056,624687071,IE +624687072,624687343,FR 624687344,624687346,CZ 624687347,624687347,ES -624687348,624687827,FR +624687348,624687615,FR +624687616,624687619,BE +624687620,624687623,FR +624687624,624687627,GB +624687628,624687827,FR 624687828,624687831,ES -624687832,624688007,FR +624687832,624687967,FR +624687968,624687983,IT +624687984,624688007,FR 624688008,624688015,ES -624688016,624688307,FR +624688016,624688127,FR +624688128,624688143,PT +624688144,624688287,FR +624688288,624688303,PL +624688304,624688307,FR 624688308,624688311,ES -624688312,624688487,FR +624688312,624688319,FR +624688320,624688327,FI +624688328,624688335,PL +624688336,624688487,FR 624688488,624688491,ES 624688492,624688639,FR 624688640,624688643,ES -624688644,624688691,FR +624688644,624688671,FR +624688672,624688687,PL +624688688,624688691,FR 624688692,624688695,ES -624688696,624688779,FR +624688696,624688723,FR +624688724,624688727,CH +624688728,624688779,FR 624688780,624688783,ES 624688784,624688791,FR 624688792,624688795,ES 624688796,624688831,FR 624688832,624688835,ES -624688836,624689076,FR +624688836,624688839,FR +624688840,624688847,ES +624688848,624688863,FR +624688864,624688895,ES +624688896,624688999,FR +624689000,624689007,ES +624689008,624689055,FR +624689056,624689063,ES +624689064,624689075,FR +624689076,624689076,ES 624689077,624689078,BE -624689079,624689151,FR +624689079,624689079,ES +624689080,624689119,FR +624689120,624689123,GB +624689124,624689151,FR 624689152,624691199,DE 624691200,624693247,FR 624693248,624695295,RU @@ -4244,7 +5924,7 @@ 624738304,624740351,NL 624740352,624742399,DE 624742400,624746495,RU -624746496,624754687,RO +624746496,624754687,BG 624754688,624787455,AZ 624787456,624791551,DE 624791552,624795647,ES @@ -4271,7 +5951,8 @@ 625506304,625508351,PL 625508352,625512447,AZ 625512448,625514495,DE -625514496,625515263,GB +625514496,625514751,GG +625514752,625515263,GB 625515264,625516031,GG 625516032,625516543,GB 625516544,625518591,BE @@ -4284,9 +5965,7 @@ 625524480,625524735,SE 625524736,625541119,FR 625541120,625606655,UA -625606656,625621667,NL -625621668,625621671,DE -625621672,625672191,NL +625606656,625672191,NL 625672192,625674239,RU 625674240,625676287,TR 625676288,625680383,MD @@ -4332,7 +6011,9 @@ 625868800,625999871,RU 625999872,627048447,DE 627048448,627113983,DK -627113984,627145727,RO +627113984,627138559,RO +627138560,627142655,FR +627142656,627145727,RO 627145728,627146751,ES 627146752,627179519,NL 627179520,627212287,IR @@ -4344,6 +6025,7 @@ 627230720,627232767,IR 627232768,627236863,PL 627236864,627238911,IQ +627240804,627240804,US 627240960,627245055,RU 627245056,627277823,KZ 627277824,627294207,SA @@ -4371,8 +6053,7 @@ 628246528,628248575,MT 628248576,628250623,FI 628250624,628252671,NL -628252672,628259071,DE -628259072,628260863,SC +628252672,628260863,DE 628260864,628277247,AZ 628277248,628293631,IR 628293632,628359167,UA @@ -4429,8 +6110,7 @@ 629196800,629198847,AZ 629198848,629202943,DK 629202944,629207039,RO -629207040,629211135,IR -629211136,629276671,RO +629207040,629276671,IR 629276672,629293055,PL 629293056,629309439,TR 629309440,629313535,DE @@ -4483,7 +6163,9 @@ 629985280,629987327,TR 629987328,629989375,SE 629989376,629991423,FR -629991424,629993471,NL +629991424,629991935,US +629991936,629992447,NL +629992448,629993471,US 629993472,629997567,JO 629997568,630063103,SA 630063104,630128639,IL @@ -4551,7 +6233,8 @@ 630980608,630981631,MD 630981632,630982655,RO 630982656,630984703,MD -630984704,630998271,RO +630984704,630988799,IR +630988800,630998271,RO 630998272,630998783,MD 630998784,631001087,RO 631001088,631005183,MD @@ -4592,7 +6275,25 @@ 632946688,632963071,AT 632963072,632979455,AM 632979456,633012223,IT -633012224,633063679,FR +633012224,633059583,FR +633059584,633059615,ES +633059616,633059647,DE +633059648,633059839,FR +633059840,633059871,IT +633059872,633059983,FR +633059984,633059987,GB +633059988,633060031,FR +633060032,633060159,IT +633060160,633060223,FR +633060224,633060287,GB +633060288,633060511,FR +633060512,633060543,DE +633060544,633060607,BE +633060608,633061119,FR +633061120,633061247,IT +633061248,633061311,NL +633061312,633061375,DE +633061376,633063679,FR 633063680,633063935,PL 633063936,633064191,FR 633064192,633064447,GB @@ -4713,15 +6414,11 @@ 635195392,635197439,RU 635197440,635199591,GB 635199592,635199599,IT -635199600,635199647,GB -635199648,635199655,IT -635199656,635199775,GB +635199600,635199775,GB 635199776,635199783,IT 635199784,635200167,GB 635200168,635200175,IT -635200176,635200199,GB -635200200,635200207,IT -635200208,635200263,GB +635200176,635200263,GB 635200264,635200271,IT 635200272,635200335,GB 635200336,635200343,IT @@ -4737,15 +6434,11 @@ 635200960,635200967,IT 635200968,635200991,GB 635200992,635200999,IT -635201000,635201023,GB -635201024,635201031,IT -635201032,635201087,GB +635201000,635201087,GB 635201088,635201095,IT 635201096,635201159,GB 635201160,635201167,IT -635201168,635201255,GB -635201256,635201263,IT -635201264,635201455,GB +635201168,635201455,GB 635201456,635201463,IT 635201464,635203583,GB 635203584,635207679,JO @@ -4843,8 +6536,7 @@ 636966656,636966911,IT 636966912,636967167,DE 636967168,636967935,FR -636967936,636968191,IT -636968192,636968447,ES +636967936,636968447,DE 636968448,636968703,BE 636968704,636968959,DE 636968960,636974079,TR @@ -4898,15 +6590,11 @@ 637337088,637337599,RU 637337600,637403135,NO 637403136,637534207,IR -637534208,641736959,US -641736960,641737215,CA -641737216,641737471,US -641737472,641737727,CA -641737728,641761535,US +637534208,641761535,US 641761536,641761791,CA 641761792,641763071,US -641763072,641763583,CA -641763584,641765375,US +641763072,641763327,CA +641763328,641765375,US 641765376,641765887,CA 641765888,641766399,US 641766400,641767423,CA @@ -4915,92 +6603,104 @@ 641768960,641769727,US 641769728,641769983,CA 641769984,641771519,US -641771520,641771775,CA -641771776,641773055,US +641771520,641772287,CA +641772288,641773055,US 641773056,641773311,CA -641773312,642093055,US -642093056,642094591,CA -642094592,642388479,US +641773312,641828351,US +641828352,641828607,MX +641828608,641829057,US +641829058,641829058,MX +641829059,642089215,US +642089216,642089471,CA +642089472,642093055,US +642093056,642093311,CA +642093312,642093567,US +642093568,642094079,CA +642094080,642094335,US +642094336,642094591,CA +642094592,642387967,US +642387968,642388223,CA +642388224,642388479,US 642388480,642388735,CA 642388736,642793471,US 642793472,642793983,CA -642793984,642925055,US -642925056,642925311,MX -642925312,642926335,US +642793984,642926335,US 642926336,642926591,MX 642926592,643219519,US 643219520,643219523,CA 643219524,643219526,US 643219527,643219527,CA -643219528,643240447,US -643240448,643240703,CA -643240704,643242495,US -643242496,643242751,CA -643242752,643295231,US +643219528,643295231,US 643295232,643295487,PR 643295488,643295743,US -643295744,643296127,PR -643296128,643296767,US +643295744,643296383,PR +643296384,643296767,US 643296768,643297023,PR 643297024,643302911,US 643302912,643303167,CA 643303168,643317759,US 643317760,643318015,CA -643318016,643346431,US -643346432,643346687,CA -643346688,643351551,US -643351552,643351807,GB -643351808,644055039,US -644055040,644055807,CA -644055808,644056063,US +643318016,643318271,US +643318272,643318527,CA +643318528,643318847,US +643318848,643318911,CA +643318912,643346431,US +643346432,643346943,CA +643346944,644055039,US +644055040,644055295,CA +644055296,644056063,US 644056064,644056319,CA 644056320,644056575,US 644056576,644056831,CA -644056832,644057087,US -644057088,644057599,CA -644057600,644058111,US -644058112,644058879,CA -644058880,644059391,US -644059392,644059647,CA -644059648,644060927,US -644060928,644061183,CA -644061184,644063231,US -644063232,644063743,CA -644063744,644064511,US +644056832,644057343,US +644057344,644057599,CA +644057600,644058367,US +644058368,644058879,CA +644058880,644060671,US +644060672,644060927,CA +644060928,644060989,US +644060990,644060990,CA +644060991,644061439,US +644061440,644061631,CA +644061632,644061663,US +644061664,644061695,CA +644061696,644063231,US +644063232,644063487,CA +644063488,644064511,US 644064512,644064767,CA 644064768,644065055,US 644065056,644065279,CA -644065280,644067071,US -644067072,644067327,CA -644067328,644069631,US -644069632,644070143,CA -644070144,644084479,US -644084480,644084735,GU -644084736,644248831,US -644248832,644249087,CA -644249088,644323391,US +644065280,644067327,US +644067328,644067583,CA +644067584,644069631,US +644069632,644069887,CA +644069888,644070143,US +644070144,644070399,CA +644070400,644082687,US +644082688,644082943,PR +644082944,644268543,US +644268544,644268569,CA +644268570,644268570,US +644268571,644268613,CA +644268614,644268614,US +644268615,644268799,CA +644268800,644323391,US 644323392,644323407,CA -644323408,644323583,US -644323584,644323839,CA -644323840,644389631,US -644389632,644390911,CA -644390912,644403199,US +644323408,644389887,US +644389888,644390399,CA +644390400,644403199,US 644403200,644403455,CA -644403456,644408063,US -644408064,644408319,CA -644408320,644414207,US +644403456,644414207,US 644414208,644414463,CA 644414464,644422911,US 644422912,644423423,JP 644423424,644569087,US 644569088,644569343,PR 644569344,644570111,US -644570112,644570175,PR -644570176,644570623,US -644570624,644571135,PR -644571136,644582143,US -644582144,644582399,CA -644582400,644628735,US +644570112,644570367,PR +644570368,644570879,US +644570880,644571135,PR +644571136,644628735,US 644628736,644628991,CA 644628992,644634367,US 644634368,644634623,CA @@ -5008,71 +6708,47 @@ 644718848,644719103,CA 644719104,644760575,US 644760576,644760831,CA -644760832,644761343,US -644761344,644761599,CA -644761600,644762879,US -644762880,644763135,CA -644763136,644765439,US +644760832,644761439,US +644761440,644761455,CA +644761456,644763903,US +644763904,644764159,CA +644764160,644765439,US 644765440,644765695,CA -644765696,644767878,US -644767879,644767879,CA -644767880,644767999,US -644768000,644768255,CA -644768256,644833535,US -644833536,644833791,CA -644833792,644834047,US -644834048,644834303,CA -644834304,644834815,US +644765696,644767743,US +644767744,644768767,CA +644768768,644834815,US 644834816,644835327,CA 644835328,644836351,US 644836352,644836607,CA 644836608,644838655,US -644838656,644840447,CA -644840448,644840703,US -644840704,644841215,CA -644841216,644897791,US -644897792,644898047,CA -644898048,644898815,US +644838656,644840959,CA +644840960,644898815,US 644898816,644899071,CA 644899072,644899839,US 644899840,644900095,CA 644900096,644901631,US 644901632,644901887,CA -644901888,644982271,US -644982272,644982527,CA -644982528,644986111,US -644986112,644986367,CA -644986368,644987135,US -644987136,644987391,CA -644987392,645185535,US +644901888,644981759,US +644981760,644982015,CA +644982016,645185535,US 645185536,645185791,CA -645185792,645188095,US -645188096,645188351,CA -645188352,645221631,US +645185792,645187071,US +645187072,645187583,CA +645187584,645221631,US 645221632,645222399,CA -645222400,645223423,US -645223424,645223679,CA -645223680,645225471,US +645222400,645225471,US 645225472,645225727,CA 645225728,645227519,US 645227520,645228287,CA -645228288,645229311,US -645229312,645229567,CA -645229568,645482495,US -645482496,645482751,CA -645482752,645525759,US -645525760,645526271,CA -645526272,645526783,US +645228288,645482511,US +645482512,645482519,CA +645482520,645526783,US 645526784,645527039,CA -645527040,645527551,US -645527552,645527807,CA -645527808,645528063,US -645528064,645529343,CA -645529344,645540351,US +645527040,645527807,US +645527808,645528319,CA +645528320,645540351,US 645540352,645540607,CA -645540608,645547007,US -645547008,645547263,CA -645547264,645576703,US +645540608,645576703,US 645576704,645576997,CA 645576998,645576998,US 645576999,645577215,CA @@ -5083,16 +6759,18 @@ 645645056,645646591,US 645646592,645646847,MX 645646848,645704447,US -645704448,645704703,MX -645704704,645705215,US +645704448,645704959,MX +645704960,645705215,US 645705216,645705471,MX 645705472,645737983,US 645737984,645738239,PR 645738240,645873663,US -645873664,645874175,CA -645874176,645875711,US -645875712,645876735,CA -645876736,645989450,US +645873664,645874431,CA +645874432,645875967,US +645875968,645876735,CA +645876736,645984255,US +645984256,645988351,CA +645988352,645989450,US 645989451,645989451,CA 645989452,654311423,US 654311424,654311679,CN @@ -5105,7 +6783,8 @@ 655360000,656408575,KR 656408576,658505727,PK 658505728,660602879,CN -660602880,661651455,HK +660602880,661520383,HK +661520384,661651455,JP 661651456,662700031,KR 662700032,666894335,CN 666894336,671088639,ID @@ -5136,7 +6815,9 @@ 692207616,692240383,ZA 692240384,692256767,GH 692256768,692260863,SD -692260864,692261887,UG +692260864,692260865,UG +692260866,692260866,SD +692260867,692261887,UG 692261888,692273151,SD 692273152,692289535,EG 692289536,692305919,NG @@ -5147,10 +6828,14 @@ 692518912,692551679,ZA 692551680,692584447,NG 692584448,692600831,AO -692600832,692609023,EG +692600832,692608255,EG +692608256,692608767,AO +692608768,692609023,EG 692609024,692617215,ZM 692617216,692625407,ZA -692625408,692641791,KE +692625408,692626687,KE +692626688,692626943,AO +692626944,692641791,KE 692641792,692649983,GA 692649984,692658175,NG 692658176,692666367,ZA @@ -5233,7 +6918,7 @@ 692946944,692948991,EG 692948992,692951039,ZM 692951040,692953087,ZA -692953088,692955135,RW +692953088,692954111,RW 692955136,692957183,NG 692957184,692959231,DZ 692959232,692961279,GN @@ -5382,7 +7067,9 @@ 693567488,693575679,MW 693575680,693583871,KE 693583872,693592063,NG -693592064,693600255,MU +693592064,693594367,MU +693594368,693594623,KE +693594624,693600255,MU 693600256,693608447,MA 693608448,693616639,BW 693616640,693633023,ZA @@ -5465,8 +7152,8 @@ 700340224,700341247,GH 700341248,700342271,MW 700342272,700350463,NA -700350464,700351231,MU -700351232,700352511,UG +700350464,700351487,MU +700351488,700352511,UG 700352512,700358655,MU 700358656,700366847,MZ 700366848,700375039,UG @@ -5515,9 +7202,7 @@ 700776448,700841983,RW 700841984,700846079,MU 700846080,700850175,NA -700850176,700851455,MU -700851456,700851711,ZA -700851712,700854271,MU +700850176,700854271,MU 700854272,700855295,NA 700855296,700866559,MU 700866560,700866815,NG @@ -5561,9 +7246,7 @@ 701308928,701317119,AO 701317120,701325311,CM 701325312,701333503,EG -701333504,701338111,NA -701338112,701338367,ZM -701338368,701341695,NA +701333504,701341695,NA 701341696,701349887,NG 701349888,701358079,MA 701358080,701366271,SL @@ -5599,9 +7282,7 @@ 701495296,701496319,NG 701496320,701497343,GH 701497344,701513727,ZA -701513728,701523711,LY -701523712,701523967,CA -701523968,701530111,LY +701513728,701530111,LY 701530112,701546495,SN 701546496,701562879,ZA 701562880,701579263,KE @@ -5625,7 +7306,9 @@ 701890560,701923327,SN 701923328,701956095,MA 701956096,701992959,KE -701992960,701997055,SZ +701992960,701994495,SZ +701994496,701994751,ZA +701994752,701997055,SZ 701997056,702001151,GH 702001152,702005247,ZM 702005248,702009343,KE @@ -5635,7 +7318,9 @@ 702017536,702018559,EG 702018560,702019583,NG 702019584,702020607,RW -702020608,702021631,CD +702020608,702021119,CD +702021120,702021375,ZA +702021376,702021631,CD 702021632,702029823,ZM 702029824,702038015,BJ 702038016,702046207,ZM @@ -5804,134 +7489,23 @@ 702542848,702543871,ZA 702543872,702544895,BJ 702544896,702545919,ZA -702545920,702721791,TN -702721792,702722047,GP -702722048,702729215,TN -702729216,702729471,GP -702729472,703070207,TN +702545920,703070207,TN 703070208,703594495,EG -703594496,703595775,SD -703595776,703596031,ZA -703596032,703600383,SD -703600384,703600639,ZA -703600640,703601151,SD -703601152,703601407,ZA -703601408,703603455,SD -703603456,703603711,ZA -703603712,703604991,SD -703604992,703605247,ZA -703605248,703609087,SD -703609088,703609343,ZA -703609344,703613695,SD -703613696,703613951,ZA -703613952,703618559,SD -703618560,703619071,ZA -703619072,703619839,SD -703619840,703620095,ZA -703620096,703621887,SD -703621888,703622143,ZA -703622144,703622655,SD -703622656,703622911,ZA -703622912,703625215,SD -703625216,703625471,ZA -703625472,703627263,SD -703627264,703627519,ZA -703627520,703631871,SD -703631872,703632127,ZA -703632128,703633151,SD -703633152,703633407,ZA -703633408,703638271,SD -703638272,703638527,ZA -703638528,703639551,SD -703639552,703639807,ZA -703639808,703642367,SD -703642368,703642623,ZA -703642624,703643903,SD -703643904,703644415,ZA -703644416,703645439,SD -703645440,703645695,ZA -703645696,703646719,SD -703646720,703647231,ZA -703647232,703648767,SD -703648768,703649023,ZA -703649024,703649279,SD -703649280,703650047,ZA -703650048,703650815,SD -703650816,703651071,ZA -703651072,703665663,SD -703665664,703665919,ZA -703665920,703678463,SD -703678464,703678719,ZA -703678720,703682559,SD -703682560,703682815,ZA -703682816,703685119,SD -703685120,703685631,ZA -703685632,703685887,SD -703685888,703686143,ZA -703686144,703688447,SD -703688448,703688703,ZA -703688704,703689215,SD -703689216,703689471,ZA -703689472,703689727,SD -703689728,703689983,ZA -703689984,703690239,SD -703690240,703690751,ZA -703690752,703696127,SD -703696128,703696383,ZA -703696384,703696895,SD -703696896,703697151,ZA -703697152,703699199,SD -703699200,703699455,ZA -703699456,703702527,SD -703702528,703703039,ZA -703703040,703705599,SD -703705600,703705855,ZA -703705856,703706111,SD -703706112,703706367,ZA -703706368,703709695,SD -703709696,703709951,ZA -703709952,703710719,SD -703710720,703710975,ZA -703710976,703711487,SD -703711488,703711743,ZA -703711744,703713791,SD -703713792,703714047,ZA -703714048,703714303,SD -703714304,703714559,ZA -703714560,703724031,SD -703724032,703724287,ZA -703724288,703724543,SD -703724544,703724799,ZA -703724800,703725567,SD -703725568,703725589,ZA -703725590,703725590,KE -703725591,703726591,ZA -703726592,703727615,KE -703727616,703728383,TZ -703728384,703728639,ZA +703594496,703725567,SD +703725568,703727615,KE +703727616,703728639,TZ 703728640,703733759,LY -703733760,703734527,CM -703734528,703734783,ZA -703734784,703735807,CM +703733760,703735807,CI 703735808,703737855,ZA 703737856,703746047,NG 703746048,703747071,ZA 703747072,703748095,CD -703748096,703748351,ZA -703748352,703749119,GN +703748096,703749119,GN 703749120,703750143,NG -703750144,703750655,ZA -703750656,703750911,MG -703750912,703751167,ZA -703751168,703751679,MG -703751680,703751935,ZA -703751936,703752447,MG -703752448,703752703,ZA -703752704,703753215,MG -703753216,703753471,ZA -703753472,703754239,MG +703750144,703754239,MG 703754240,703755263,GH -703755264,703755899,ZA +703755264,703755519,YT +703755520,703755899,ZA 703755900,703755900,YT 703755901,703757311,ZA 703757312,703758335,RE @@ -5939,125 +7513,8 @@ 703759360,703760383,ZA 703760384,703761407,GH 703761408,703791103,ZA -703791104,703791359,CD -703791360,703791871,ZA -703791872,703792895,CD -703792896,703793151,ZA -703793152,703794175,CD -703794176,703794687,ZA -703794688,703795199,CD -703795200,703795455,ZA -703795456,703798527,CD -703798528,703799039,ZA -703799040,703799807,CD -703799808,703800063,ZA -703800064,703800575,CD -703800576,703800831,ZA -703800832,703801855,CD -703801856,703802111,ZA -703802112,703804159,CD -703804160,703804415,ZA -703804416,703806719,CD -703806720,703806975,ZA -703806976,703809023,CD -703809024,703809279,ZA -703809280,703810559,CD -703810560,703810815,ZA -703810816,703811839,CD -703811840,703812351,ZA -703812352,703813119,CD -703813120,703813375,ZA -703813376,703817471,CD -703817472,703817727,ZA -703817728,703817983,CD -703817984,703818239,ZA -703818240,703822335,CD -703822336,703822591,ZA -703822592,703825407,CD -703825408,703825663,ZA -703825664,703827967,CD -703827968,703828223,ZA -703828224,703831295,CD -703831296,703831551,ZA -703831552,703832319,CD -703832320,703832575,ZA -703832576,703838207,CD -703838208,703838463,ZA -703838464,703838719,CD -703838720,703838975,ZA -703838976,703839743,CD -703839744,703839999,ZA -703840000,703841279,CD -703841280,703841535,ZA -703841536,703842559,CD -703842560,703842815,ZA -703842816,703845375,CD -703845376,703845631,ZA -703845632,703846911,CD -703846912,703847167,ZA -703847168,703847423,CD -703847424,703847679,ZA -703847680,703849215,CD -703849216,703849471,ZA -703849472,703856639,CD -703856640,703856895,ZA -703856896,703857919,CM -703857920,703858431,ZA -703858432,703858943,CM -703858944,703859199,ZA -703859200,703864063,CM -703864064,703864319,ZA -703864320,703864575,CM -703864576,703865855,ZA -703865856,703866623,CM -703866624,703867135,ZA -703867136,703867391,CM -703867392,703867647,ZA -703867648,703869439,CM -703869440,703869951,ZA -703869952,703870975,CM -703870976,703871487,ZA -703871488,703871743,CM -703871744,703871999,ZA -703872000,703876607,CM -703876608,703876863,ZA -703876864,703884287,CM -703884288,703884799,ZA -703884800,703885055,CM -703885056,703885311,ZA -703885312,703886079,CM -703886080,703886335,ZA -703886336,703888639,CM -703888640,703888895,ZA -703888896,703889151,CM -703889152,703889407,ZA -703889408,703889663,CM -703889664,703890175,ZA -703890176,703891455,CM -703891456,703892223,ZA -703892224,703897343,CM -703897344,703897599,ZA -703897600,703901183,CM -703901184,703901695,ZA -703901696,703902975,CM -703902976,703903231,ZA -703903232,703903487,CM -703903488,703903743,ZA -703903744,703905535,CM -703905536,703905791,ZA -703905792,703912447,CM -703912448,703912703,ZA -703912704,703912959,CM -703912960,703913215,ZA -703913216,703913727,CM -703913728,703913983,ZA -703913984,703914239,CM -703914240,703914495,ZA -703914496,703914751,CM -703914752,703915519,ZA -703915520,703919359,CM -703919360,703919615,ZA -703919616,703922175,CM +703791104,703856639,CD +703856640,703922175,CM 703922176,704118783,ZA 704118784,704380927,MA 704380928,704643071,LY @@ -6102,7 +7559,9 @@ 711166464,711166591,HK 711166592,711169311,JP 711169312,711169327,IN -711169328,711196671,JP +711169328,711173119,JP +711173120,711173375,SG +711173376,711196671,JP 711196672,711458815,CN 711458816,711983103,IN 711983104,712507391,VN @@ -6126,21 +7585,55 @@ 717881344,720437247,CN 720437248,720502783,AU 720502784,721420287,CN -721420288,737479679,JP +721420288,737206271,JP +737206272,737207295,ID +737207296,737221631,JP +737221632,737222655,IN +737222656,737230847,JP +737230848,737231871,IN +737231872,737244159,JP +737244160,737246207,IN +737246208,737247231,JP +737247232,737249279,IN +737249280,737290239,JP +737290240,737291263,AU +737291264,737479679,JP 737479680,737480703,IN -737480704,737490943,JP +737480704,737488895,JP +737488896,737489151,AU +737489152,737490943,JP 737490944,737491967,FJ -737491968,737511423,JP +737491968,737502207,JP +737502208,737503231,IN +737503232,737507327,JP +737507328,737508351,AU +737508352,737509872,JP +737509873,737509873,PK +737509874,737511423,JP 737511424,737512447,IN -737512448,737514495,JP +737512448,737513471,BD +737513472,737514495,JP 737514496,737515519,IN 737515520,737516543,JP 737516544,737517567,IN -737517568,737526783,JP +737517568,737517823,AU +737517824,737518079,NZ +737518080,737518335,AU +737518336,737526783,JP 737526784,737527295,US -737527296,737529855,JP +737527296,737527551,SG +737527552,737527807,ID +737527808,737529855,JP 737529856,737530879,IN -737530880,737941503,JP +737530880,737538047,JP +737538048,737539071,NZ +737539072,737644644,JP +737644645,737644645,IN +737644646,737838079,JP +737838080,737839103,IN +737839104,737857535,JP +737857536,737858559,IN +737858560,737941503,JP 737941504,737944575,IN 737944576,737950719,JP 737950720,737951743,IN @@ -6149,12 +7642,21 @@ 737959936,737965055,JP 737965056,737966079,IN 737966080,737967103,JP -737967104,737967359,AU -737967360,737991679,JP +737967104,737968127,AU +737968128,737971199,JP +737971200,737972223,IN +737972224,737972735,ID +737972736,737987583,JP +737987584,737988607,IN +737988608,737991679,JP 737991680,737992191,IN 737992192,737999320,JP 737999321,737999321,IN -737999322,738197503,JP +737999322,738160639,JP +738160640,738161663,KH +738161664,738173951,JP +738173952,738174975,IN +738174976,738197503,JP 738197504,746717183,US 746717184,746782719,DE 746782720,755105791,US @@ -6177,7 +7679,9 @@ 759188480,759189503,TH 759189504,759190527,PH 759190528,759193599,IN -759193600,759195647,ID +759193600,759193855,ID +759193856,759194111,SG +759194112,759195647,ID 759195648,759196671,IN 759196672,759197695,HK 759197696,759198207,CN @@ -6210,7 +7714,6 @@ 759235584,759236607,NZ 759236608,759237631,IN 759237632,759238655,AU -765460480,767557631,UY 771751936,771817471,RU 771817472,771948543,TR 771948544,772014079,RU @@ -6232,7 +7735,9 @@ 772538368,772603903,GR 772603904,772669439,CZ 772669440,772734975,CH -772734976,772800511,NO +772734976,772753663,NO +772753664,772753919,RU +772753920,772800511,NO 772800512,772802559,GB 772802560,772804607,RU 772804608,772806655,GL @@ -6303,16 +7808,11 @@ 772917248,772919295,RU 772919296,772923391,GB 772923392,772925439,AT -772925440,772926463,GB -772926464,772926719,ZW -772926720,772927231,GB -772927232,772927487,ZW +772925440,772927487,GB 772927488,772929535,UA 772929536,772931583,RU 772931584,772933631,UA -772933632,772933887,GB -772933888,772934143,IE -772934144,772935679,GB +772933632,772935679,GB 772935680,772937727,PS 772937728,772939775,IT 772939776,772941823,BE @@ -6368,8 +7868,8 @@ 773050368,773052415,IE 773052416,773054463,NL 773054464,773055231,AL -773055232,773055359,XK -773055360,773055871,AL +773055232,773055487,XK +773055488,773055871,AL 773055872,773055999,RS 773056000,773056255,XK 773056256,773056511,AL @@ -6494,8 +7994,7 @@ 773646336,773648383,TR 773648384,773650431,PL 773650432,773652479,GB -773652480,773652735,TR -773652736,773653503,SK +773652480,773653503,SK 773653504,773654527,TR 773654528,773656575,RU 773656576,773658623,PL @@ -6580,13 +8079,11 @@ 773828608,773830655,HU 773830656,773832703,NO 773832704,773834751,FR -773834752,773835007,GB -773835008,773835263,IM -773835264,773835519,GB +773834752,773835519,GB 773835520,773835775,IM 773835776,773836031,GB -773836032,773836287,IM -773836288,773836799,GB +773836032,773836543,IM +773836544,773836799,GB 773836800,773838847,FR 773838848,773840895,DE 773840896,773842943,GB @@ -6606,7 +8103,9 @@ 773906432,773922815,GB 773922816,773931007,UA 773931008,773934591,DE -773934592,773939199,FR +773934592,773935352,FR +773935353,773935353,US +773935354,773939199,FR 773939200,773947391,CZ 773947392,773955583,GB 773955584,773963775,FR @@ -6636,13 +8135,7 @@ 774078464,774086655,BA 774086656,774094847,BG 774094848,774103039,HU -774103040,774104831,RU -774104832,774105087,UA -774105088,774105343,RU -774105344,774105599,UA -774105600,774109695,RU -774109696,774109951,UA -774109952,774119423,RU +774103040,774119423,RU 774119424,774127615,CZ 774127616,774135807,LT 774135808,774143999,IR @@ -6752,7 +8245,8 @@ 774161569,774161578,LC 774161579,774161588,VE 774161589,774161598,TC -774161599,774161628,US +774161599,774161618,US +774161619,774161628,VA 774161629,774161638,PA 774161639,774161648,RU 774161649,774161658,HK @@ -6845,9 +8339,7 @@ 774162563,774162572,MQ 774162573,774162582,YT 774162583,774162592,NC -774162593,774162593,NG -774162594,774162601,CA -774162602,774162602,NG +774162593,774162602,CA 774162603,774162622,US 774162623,774162627,MX 774162628,774162637,GB @@ -6868,7 +8360,8 @@ 774162704,774162738,US 774162739,774162743,VA 774162744,774162778,US -774162779,774162787,CA +774162779,774162784,CA +774162785,774162787,UA 774162788,774162788,VA 774162789,774162798,CA 774162799,774162803,BN @@ -7052,21 +8545,23 @@ 778043392,778108927,UA 778108928,778174463,RO 778174464,778239999,UA -778240000,778244095,AL -778244096,778244351,RS +778240000,778242815,AL +778242816,778243071,XK +778243072,778243327,RS +778243328,778244095,AL +778244096,778244351,XK 778244352,778245119,AL -778245120,778245375,RS -778245376,778247679,AL -778247680,778247935,XK -778247936,778248191,RS -778248192,778249727,AL +778245120,778245375,XK +778245376,778249727,AL 778249728,778249983,RS 778249984,778304305,AL 778304306,778304306,SI 778304307,778305535,AL 778305536,778371071,IR 778371072,778436607,RU -778436608,778476031,RO +778436608,778469375,RO +778469376,778473471,IR +778473472,778476031,RO 778476032,778476287,MD 778476288,778493951,RO 778493952,778495999,NL @@ -7075,95 +8570,537 @@ 778500096,778502143,RO 778502144,778567679,GR 778567680,778633215,TR -778633216,778666259,FR +778633216,778640127,FR +778640128,778640383,GB +778640384,778666143,FR +778666144,778666151,DE +778666152,778666239,FR +778666240,778666243,PL +778666244,778666259,FR 778666260,778666263,ES -778666264,778666479,FR +778666264,778666299,FR +778666300,778666303,FI +778666304,778666383,FR +778666384,778666387,IE +778666388,778666479,FR 778666480,778666495,DE -778666496,778666879,FR +778666496,778666871,FR +778666872,778666879,DE 778666880,778666943,GB -778666944,778667391,FR +778666944,778666959,FR +778666960,778666967,IT +778666968,778666975,GB +778666976,778667007,FR +778667008,778667039,GB +778667040,778667071,IT +778667072,778667131,FR +778667132,778667135,BE +778667136,778667287,FR +778667288,778667291,NL +778667292,778667295,DE +778667296,778667327,FR +778667328,778667331,DE +778667332,778667391,FR 778667392,778667395,IT -778667396,778668863,FR +778667396,778667399,FR +778667400,778667407,FI +778667408,778667455,FR +778667456,778667471,GB +778667472,778667475,NL +778667476,778667911,FR +778667912,778667919,BE +778667920,778667927,GB +778667928,778667935,FR +778667936,778667943,DE +778667944,778667947,FR +778667948,778667951,IT +778667952,778668015,FR +778668016,778668019,CZ +778668020,778668063,FR +778668064,778668095,GB +778668096,778668543,FR +778668544,778668559,BE +778668560,778668575,FR +778668576,778668591,NL +778668592,778668623,FR +778668624,778668627,ES +778668628,778668715,FR +778668716,778668719,IT +778668720,778668863,FR 778668864,778668895,DE -778668896,778670975,FR +778668896,778668927,PT +778668928,778669503,FR +778669504,778669535,FI +778669536,778669567,FR +778669568,778669575,BE +778669576,778669623,FR +778669624,778669631,IT +778669632,778669759,FR +778669760,778669767,DE +778669768,778670043,FR +778670044,778670047,DE +778670048,778670151,FR +778670152,778670159,IT +778670160,778670163,NL +778670164,778670171,FR +778670172,778670175,DE +778670176,778670215,FR +778670216,778670223,DE +778670224,778670247,FR +778670248,778670255,PL +778670256,778670347,FR +778670348,778670351,PL +778670352,778670387,FR +778670388,778670391,ES +778670392,778670395,GB +778670396,778670399,FR +778670400,778670407,DE +778670408,778670415,FR +778670416,778670431,DE +778670432,778670543,FR +778670544,778670559,GB +778670560,778670567,NL +778670568,778670571,FR +778670572,778670575,DE +778670576,778670591,BE +778670592,778670975,FR 778670976,778670976,DE -778670977,778671201,FR -778671202,778671202,ES -778671203,778673187,FR +778670977,778671103,FR +778671104,778671119,CH +778671120,778671127,GB +778671128,778671199,FR +778671200,778671203,ES +778671204,778671247,FR +778671248,778671263,GB +778671264,778671279,PT +778671280,778671331,FR +778671332,778671335,IT +778671336,778671647,FR +778671648,778671679,ES +778671680,778671743,GB +778671744,778671887,FR +778671888,778671903,NL +778671904,778671907,FR +778671908,778671911,FI +778671912,778672111,FR +778672112,778672115,IT +778672116,778672543,FR +778672544,778672559,DE +778672560,778672803,FR +778672804,778672807,FI +778672808,778672815,FR +778672816,778672823,CH +778672824,778672887,FR +778672888,778672891,PL +778672892,778673079,FR +778673080,778673087,GB +778673088,778673119,FR +778673120,778673151,DE +778673152,778673187,FR 778673188,778673191,ES 778673192,778673207,FR 778673208,778673211,ES -778673212,778673383,FR +778673212,778673215,FR +778673216,778673247,IE +778673248,778673383,FR 778673384,778673387,IT -778673388,778673883,FR +778673388,778673791,FR +778673792,778673807,BE +778673808,778673883,FR 778673884,778673887,ES -778673888,778675763,FR +778673888,778674431,FR +778674432,778674439,IT +778674440,778674447,FR +778674448,778674451,BE +778674452,778674459,FR +778674460,778674463,DE +778674464,778674475,IT +778674476,778674479,CZ +778674480,778674487,DE +778674488,778674627,FR +778674628,778674631,PL +778674632,778674635,NL +778674636,778674783,FR +778674784,778674799,IT +778674800,778674847,FR +778674848,778674863,IT +778674864,778674911,FR +778674912,778674927,PL +778674928,778674943,ES +778674944,778674983,FR +778674984,778674991,ES +778674992,778675023,FR +778675024,778675039,BE +778675040,778675219,FR +778675220,778675223,DE +778675224,778675363,FR +778675364,778675367,DE +778675368,778675439,FR +778675440,778675443,NL +778675444,778675451,FR +778675452,778675455,IT +778675456,778675491,FR +778675492,778675495,ES +778675496,778675503,FR +778675504,778675511,IT +778675512,778675535,FR +778675536,778675543,ES +778675544,778675555,FR +778675556,778675559,PT +778675560,778675567,DE +778675568,778675627,FR +778675628,778675631,ES +778675632,778675759,FR +778675760,778675763,GB 778675764,778675767,PL 778675768,778675795,FR 778675796,778675799,ES -778675800,778675891,FR +778675800,778675851,FR +778675852,778675855,PT +778675856,778675863,IT +778675864,778675891,FR 778675892,778675895,ES -778675896,778677071,FR +778675896,778675903,GB +778675904,778675967,FR +778675968,778675999,DE +778676000,778676063,FR +778676064,778676095,CH +778676096,778676111,NL +778676112,778676123,FR +778676124,778676127,PL +778676128,778676215,FR +778676216,778676219,CZ +778676220,778676415,FR +778676416,778676423,IE +778676424,778676579,FR +778676580,778676587,DE +778676588,778676591,ES +778676592,778676611,FR +778676612,778676615,LT +778676616,778676655,FR +778676656,778676671,NL +778676672,778676687,FR +778676688,778676691,IT +778676692,778676695,GB +778676696,778676727,FR +778676728,778676735,NL +778676736,778676743,FR +778676744,778676751,DE +778676752,778676783,FR +778676784,778676799,BE +778676800,778676807,FR +778676808,778676815,ES +778676816,778676827,FR +778676828,778676831,ES +778676832,778676847,FR +778676848,778676851,PL +778676852,778676855,NL +778676856,778677039,FR +778677040,778677055,PL +778677056,778677063,FR +778677064,778677071,CH 778677072,778677075,NL -778677076,778677471,FR +778677076,778677343,FR +778677344,778677375,PL +778677376,778677439,FR +778677440,778677455,FI +778677456,778677471,FR 778677472,778677475,DE 778677476,778677503,FR -778677504,778677507,GB -778677508,778677519,FR -778677520,778677523,ES -778677524,778679212,FR +778677504,778677505,GB +778677506,778677506,ES +778677507,778677507,GB +778677508,778677759,ES +778677760,778677855,FR +778677856,778677859,ES +778677860,778677875,FR +778677876,778677879,IT +778677880,778677943,FR +778677944,778677947,PL +778677948,778678019,FR +778678020,778678023,NL +778678024,778678027,PL +778678028,778678031,FR +778678032,778678035,GB +778678036,778678119,FR +778678120,778678127,IT +778678128,778678175,FR +778678176,778678191,GB +778678192,778678807,FR +778678808,778678815,ES +778678816,778678839,FR +778678840,778678847,PL +778678848,778678871,FR +778678872,778678875,PL +778678876,778678991,FR +778678992,778679007,GB +778679008,778679023,FR +778679024,778679031,NL +778679032,778679087,FR +778679088,778679095,PL +778679096,778679167,FR +778679168,778679199,GB +778679200,778679212,FR 778679213,778679214,FI 778679215,778679491,FR 778679492,778679495,ES -778679496,778680227,FR +778679496,778679503,IT +778679504,778679519,FR +778679520,778679531,ES +778679532,778679679,FR +778679680,778679695,ES +778679696,778679711,NL +778679712,778679907,FR +778679908,778679911,PT +778679912,778679935,FR +778679936,778679999,GB +778680000,778680111,FR +778680112,778680127,NL +778680128,778680227,FR 778680228,778680231,IE -778680232,778680683,FR +778680232,778680447,FR +778680448,778680455,GB +778680456,778680471,FR +778680472,778680475,GB +778680476,778680559,FR +778680560,778680575,IT +778680576,778680683,FR 778680684,778680687,ES -778680688,778681487,FR +778680688,778681403,FR +778681404,778681407,ES +778681408,778681423,FR +778681424,778681431,FI +778681432,778681435,IT +778681436,778681459,FR +778681460,778681463,LT +778681464,778681487,FR 778681488,778681495,NL 778681496,778681503,FR 778681504,778681507,DE 778681508,778681519,FR 778681520,778681523,ES -778681524,778681823,FR +778681524,778681547,FR +778681548,778681551,ES +778681552,778681787,FR +778681788,778681791,ES +778681792,778681823,FR 778681824,778681827,IT -778681828,778691619,FR +778681828,778681843,FR +778681844,778681847,CH +778681848,778681919,FR +778681920,778681983,PT +778681984,778682295,FR +778682296,778682299,PL +778682300,778682351,FR +778682352,778682367,DE +778682368,778690559,FR +778690560,778690591,BE +778690592,778690635,FR +778690636,778690639,BE +778690640,778690711,FR +778690712,778690719,BE +778690720,778690935,FR +778690936,778690943,CH +778690944,778690959,BE +778690960,778691047,FR +778691048,778691055,ES +778691056,778691063,NL +778691064,778691375,FR +778691376,778691391,ES +778691392,778691471,FR +778691472,778691479,PL +778691480,778691619,FR 778691620,778691623,IT 778691624,778691711,FR 778691712,778691727,GB -778691728,778692499,FR +778691728,778691743,FR +778691744,778691751,DE +778691752,778691775,FR +778691776,778691791,IT +778691792,778691971,FR +778691972,778691975,CZ +778691976,778691983,FR +778691984,778691987,CH +778691988,778691999,FR +778692000,778692007,IT +778692008,778692055,FR +778692056,778692059,LT +778692060,778692107,FR +778692108,778692111,GB +778692112,778692119,IT +778692120,778692143,FR +778692144,778692159,ES +778692160,778692195,FR +778692196,778692199,GB +778692200,778692287,FR +778692288,778692319,LT +778692320,778692499,FR 778692500,778692503,ES -778692504,778692535,FR +778692504,778692519,FR +778692520,778692527,NL +778692528,778692535,FR 778692536,778692539,IT -778692540,778692743,FR +778692540,778692619,FR +778692620,778692623,ES +778692624,778692739,FR +778692740,778692743,IE 778692744,778692747,ES -778692748,778693095,FR +778692748,778692751,FR +778692752,778692767,DE +778692768,778692799,FR +778692800,778692807,LT +778692808,778692815,FR +778692816,778692823,PL +778692824,778692847,FR +778692848,778692863,DE +778692864,778692879,FR +778692880,778692883,NL +778692884,778692887,ES +778692888,778692927,FR +778692928,778692943,PL +778692944,778693075,FR +778693076,778693079,DE +778693080,778693095,FR 778693096,778693099,ES -778693100,778693427,FR +778693100,778693151,FR +778693152,778693155,IT +778693156,778693223,FR +778693224,778693227,PL +778693228,778693243,FR +778693244,778693247,CZ +778693248,778693403,FR +778693404,778693407,PL +778693408,778693427,FR 778693428,778693431,ES -778693432,778693759,FR +778693432,778693455,FR +778693456,778693459,BE +778693460,778693471,FR +778693472,778693503,NL +778693504,778693515,FR +778693516,778693519,GB +778693520,778693623,FR +778693624,778693627,NL +778693628,778693631,ES +778693632,778693679,FR +778693680,778693695,DE +778693696,778693759,FR 778693760,778693763,ES -778693764,778695471,FR +778693764,778693767,PL +778693768,778693791,FR +778693792,778693799,NL +778693800,778693887,FR +778693888,778693891,ES +778693892,778693971,FR +778693972,778693975,CH +778693976,778694171,FR +778694172,778694175,CH +778694176,778694295,FR +778694296,778694299,IT +778694300,778694519,FR +778694520,778694527,CH +778694528,778694563,FR +778694564,778694567,GB +778694568,778694575,NL +778694576,778694647,FR +778694648,778694655,DE +778694656,778694679,FR +778694680,778694687,GB +778694688,778694975,FR +778694976,778695007,CH +778695008,778695039,ES +778695040,778695103,FR +778695104,778695135,FI +778695136,778695167,DE +778695168,778695303,FR +778695304,778695307,DE +778695308,778695323,FR +778695324,778695327,PL +778695328,778695339,FR +778695340,778695343,ES +778695344,778695347,DE +778695348,778695375,FR +778695376,778695391,FI +778695392,778695471,FR 778695472,778695475,ES 778695476,778695487,FR 778695488,778695503,BE -778695504,778696495,FR +778695504,778695663,FR +778695664,778695679,PL +778695680,778695711,FR +778695712,778695743,GB +778695744,778695759,FR +778695760,778695767,NL +778695768,778695823,FR +778695824,778695839,FI +778695840,778695871,DE +778695872,778695927,FR +778695928,778695935,IT +778695936,778696199,FR +778696200,778696207,NL +778696208,778696211,PL +778696212,778696255,FR +778696256,778696263,IE +778696264,778696383,FR +778696384,778696415,PT +778696416,778696487,FR +778696488,778696495,IT 778696496,778696499,ES -778696500,778696991,FR +778696500,778696559,FR +778696560,778696567,PL +778696568,778696591,FR +778696592,778696607,DE +778696608,778696639,NL +778696640,778696643,ES +778696644,778696647,FR +778696648,778696655,PL +778696656,778696987,FR +778696988,778696991,NL 778696992,778696995,ES 778696996,778697067,FR 778697068,778697071,ES -778697072,778697175,FR +778697072,778697119,FR +778697120,778697151,IT +778697152,778697175,FR 778697176,778697179,ES -778697180,778697815,FR +778697180,778697183,FR +778697184,778697215,PT +778697216,778697247,FR +778697248,778697255,DE +778697256,778697347,FR +778697348,778697351,PL +778697352,778697567,FR +778697568,778697599,GB +778697600,778697663,FR +778697664,778697667,IE +778697668,778697671,FR +778697672,778697675,GB +778697676,778697679,FR +778697680,778697683,DE +778697684,778697727,FR +778697728,778697791,DE +778697792,778697807,FR +778697808,778697815,IT 778697816,778697819,ES -778697820,778697955,FR +778697820,778697847,FR +778697848,778697851,DE +778697852,778697955,FR 778697956,778697959,ES -778697960,778698447,FR +778697960,778698399,FR +778698400,778698431,BE +778698432,778698447,FR 778698448,778698451,ES -778698452,778698643,FR +778698452,778698455,FR +778698456,778698463,PL +778698464,778698467,IT +778698468,778698623,FR +778698624,778698627,FI +778698628,778698631,FR +778698632,778698635,GB +778698636,778698643,FR 778698644,778698647,ES -778698648,778698703,FR +778698648,778698667,FR +778698668,778698671,GB +778698672,778698703,FR 778698704,778698707,ES 778698708,778698751,FR 778698752,778764287,TR @@ -7298,8 +9235,12 @@ 782667776,782671871,NL 782671872,782672871,LT 782672872,782672879,IL -782672880,782675967,LT -782675968,782680063,NL +782672880,782672927,LT +782672928,782672959,US +782672960,782675967,LT +782675968,782676735,NL +782676736,782676991,DE +782676992,782680063,NL 782680064,782696447,RU 782696448,782712831,DE 782712832,782729215,RU @@ -7424,7 +9365,9 @@ 783775744,783777791,AL 783777792,783779839,RU 783779840,783781887,DK -783781888,783783935,NL +783781888,783782655,NL +783782656,783782911,RU +783782912,783783935,NL 783783936,783785983,DE 783785984,783788031,RU 783788032,783790079,NO @@ -7460,9 +9403,7 @@ 784269312,784302079,BY 784302080,784334847,RU 784334848,784465919,FR -784465920,784524287,SE -784524288,784524543,PL -784524544,784596991,SE +784465920,784596991,SE 784596992,784728063,TR 784728064,784793599,GR 784793600,784859135,CY @@ -7598,11 +9539,11 @@ 786919800,786919807,IT 786919808,786919879,GB 786919880,786919887,IT -786919888,786919967,GB -786919968,786919975,IT -786919976,786920191,GB +786919888,786920191,GB 786920192,786920199,IT -786920200,786920343,GB +786920200,786920303,GB +786920304,786920311,IT +786920312,786920343,GB 786920344,786920351,IT 786920352,786920631,GB 786920632,786920639,IT @@ -7713,28 +9654,16 @@ 787333120,787349503,DE 787349504,787365887,BG 787365888,787382271,PL -787382272,787387647,GP -787387648,787388671,MQ -787388672,787388927,GP -787388928,787390207,MQ +787382272,787383039,GP +787383040,787383295,MF +787383296,787389951,GP +787389952,787390207,MQ 787390208,787390463,GP -787390464,787391231,FR -787391232,787391487,MQ -787391488,787391743,FR -787391744,787392255,MQ -787392256,787392511,FR -787392512,787392767,GP -787392768,787393791,FR -787393792,787394303,GP -787394304,787394559,FR +787390464,787394559,FR 787394560,787394815,GF -787394816,787395071,FR -787395072,787395327,GF -787395328,787395583,FR -787395584,787396095,GF -787396096,787396351,FR -787396352,787396607,GF -787396608,787398399,FR +787394816,787396095,FR +787396096,787396351,GF +787396352,787398399,FR 787398400,787398655,MQ 787398656,787415039,PL 787415040,787431423,BA @@ -7761,7 +9690,13 @@ 787703808,787705855,AT 787705856,787707903,RO 787707904,787709951,DE -787709952,787718143,NL +787709952,787711487,IE +787711488,787711999,GB +787712000,787713023,NL +787713024,787713279,LV +787713280,787713535,NL +787713536,787713791,BG +787713792,787718143,NL 787718144,787724287,RU 787724288,787726335,UA 787726336,787742719,RU @@ -7786,7 +9721,9 @@ 787869696,787873791,GB 787873792,787881745,SE 787881746,787881747,FR -787881748,787891247,SE +787881748,787883391,SE +787883392,787883519,GB +787883520,787891247,SE 787891248,787891251,ES 787891252,787906559,SE 787906560,787939327,GR @@ -7802,9 +9739,7 @@ 788070400,788078591,RU 788078592,788086783,NL 788086784,788094975,BG -788094976,788100095,IR -788100096,788101119,BG -788101120,788103167,IR +788094976,788103167,IR 788103168,788111359,HU 788111360,788119551,LT 788119552,788127743,GB @@ -7908,12 +9843,9 @@ 788502528,788504575,IE 788504576,788506623,FR 788506624,788508671,CH -788508672,788508927,AT -788508928,788509183,FR -788509184,788509439,AT -788509440,788509951,FR -788509952,788510463,AT -788510464,788510719,FR +788508672,788509439,AT +788509440,788510207,FR +788510208,788510719,AT 788510720,788512767,ES 788512768,788514815,FI 788514816,788516863,FR @@ -7927,9 +9859,9 @@ 789577728,790102015,US 790102016,792002559,CA 792002560,792068095,US -792068096,792096767,CA -792096768,792097279,US -792097280,792330239,CA +792068096,792095999,CA +792096000,792096255,US +792096256,792330239,CA 792330240,792723455,ES 792723456,793247743,DE 793247744,793313279,NZ @@ -8017,7 +9949,8 @@ 832045056,832307199,CN 832307200,832308223,MN 832308224,832311295,JP -832311296,832315391,AU +832311296,832312319,AU +832313344,832315391,AU 832315392,832319487,KH 832319488,832320511,NU 832320512,832321535,VN @@ -8067,8 +10000,8 @@ 838467584,838729727,JP 838729728,838795263,KR 838795264,838860799,AU -838860800,838995455,US -838995456,838995967,CA +838860800,838995711,US +838995712,838995967,CA 838995968,838996991,US 838996992,838997247,CA 838997248,839016191,US @@ -8089,9 +10022,11 @@ 839104256,839104511,CA 839104512,839112191,US 839112192,839112703,CA -839112704,839352319,US -839352320,839356415,NL -839356416,839357439,US +839112704,839348223,US +839348224,839348479,DE +839348480,839348735,AT +839348736,839352319,US +839352320,839357439,NL 839357440,839358463,FR 839358464,839359487,GB 839359488,839360511,DE @@ -8118,32 +10053,47 @@ 840953856,840954367,JP 840954368,840956927,US 840956928,840957951,JP -840957952,843055103,US +840957952,842019071,US +842019072,842019199,AS +842019200,843055103,US 843055104,843644927,CA 843644928,844890111,US 844890112,844988415,CA -844988416,845283327,US +844988416,845089407,US +845089408,845089535,PR +845089536,845283327,US 845283328,845545471,CA 845545472,846442495,US 846442496,846446591,CA -846446592,846537351,US -846537352,846537352,CA -846537353,846561279,US +846446592,846561279,US 846561280,846594047,CA 846594048,846626815,US 846626816,846627071,CN -846627072,855638015,US +846627072,850506751,US +850506752,850507007,CA +850507008,855638015,US 855638016,872415231,GB 872415232,889192447,US 889192448,905969663,DE -905969664,910688255,US +905969664,910163967,US +910163968,910197237,JP +910197238,910197238,US +910197239,910295039,JP +910295040,910360575,AU +910360576,910688255,US 910688256,911147007,IE 911147008,911212543,AU 911212544,911998975,US 911998976,912031743,JP -912031744,912195583,US +912031744,912064511,US +912064512,912130047,DE +912130048,912195583,BR 912195584,912261119,JP -912261120,917635071,US +912261120,916979711,US +916979712,917045247,JP +917045248,917110783,SG +917110784,917241855,IE +917241856,917635071,US 917635072,917700607,JP 917700608,917766143,SG 917766144,918683647,US @@ -8172,30 +10122,36 @@ 922205776,922205776,DE 922205777,922222591,IE 922222592,922419199,JP -922419200,922484735,SG +922419200,922427633,SG +922427634,922427634,US +922427635,922427703,SG +922427704,922427704,US +922427705,922484735,SG 922484736,922615807,AU 922615808,922746879,SG 922746880,956301311,US -956301312,959447039,FR +956301312,959447039,BE 959447040,959512575,US -959512576,960626687,FR +959512576,960626687,BE 960626688,960641023,GB -960641024,960641279,FR +960641024,960641279,BE 960641280,960643330,GB -960643331,960643331,FR +960643331,960643331,BE 960643332,960644351,GB -960644352,960644863,FR +960644352,960644863,BE 960644864,960646399,GB -960646400,960646911,FR +960646400,960646911,BE 960646912,960654335,GB -960654336,960654591,FR +960654336,960654374,BE +960654375,960654375,GB +960654376,960654591,BE 960654592,960659455,GB 960659456,960662015,DE -960662016,960662271,FR +960662016,960662271,BE 960662272,960662783,DE 960662784,960663039,FR 960663040,960671487,DE -960671488,960671743,FR +960671488,960671743,BE 960671744,960676607,DE 960676608,960676863,PL 960676864,960692223,DE @@ -8204,18 +10160,12 @@ 960726784,960727039,ZA 960727040,960727295,US 960727296,960728319,NL -960728320,960728575,FR +960728320,960728575,BE 960728576,960729343,NL 960729344,960729599,ZA -960729600,960729855,FR +960729600,960729855,BE 960729856,960733183,NL -960733184,960733439,BE -960733440,960733695,FR -960733696,960733951,BE -960733952,960734463,FR -960734464,960737535,BE -960737536,960737791,FR -960737792,960741375,BE +960733184,960741375,BE 960741376,960749567,NL 960749568,960757759,LU 960757760,960888831,US @@ -8234,36 +10184,38 @@ 960970752,960974847,TV 960974848,960978943,VU 960978944,960983039,NC -960983040,961019903,FR +960983040,961019903,BE 961019904,961021439,HK -961021440,961021695,FR +961021440,961021695,BE 961021696,961021951,HK -961021952,961022079,FR +961021952,961022079,BE 961022080,961022095,SG -961022096,961022207,FR +961022096,961022207,BE 961022208,961022719,HK -961022720,961022975,FR +961022720,961022975,BE 961022976,961025535,HK -961025536,961025791,FR +961025536,961025791,BE 961025792,961036799,HK -961036800,961037055,FR +961036800,961037055,BE 961037056,961052671,HK 961052672,961085439,JP 961085440,961087231,SG -961087232,961087487,FR +961087232,961087487,BE 961087488,961089023,SG -961089024,961089535,FR +961089024,961089535,BE 961089536,961090047,SG -961090048,961090303,FR +961090048,961090303,BE 961090304,961091839,SG -961091840,961092095,FR +961091840,961092095,BE 961092096,961092351,IN -961092352,961092607,FR +961092352,961092607,BE 961092608,961093887,SG -961093888,961094143,FR +961093888,961094143,BE 961094144,961118207,SG 961118208,961119487,MY -961119488,961119743,FR +961119488,961119508,BE +961119509,961119509,MY +961119510,961119743,BE 961119744,961126399,MY 961126400,961134591,TW 961134592,961142783,KR @@ -8277,7 +10229,7 @@ 961224704,961228799,EC 961228800,961232895,BO 961232896,961236991,PY -961236992,961241087,FR +961236992,961241087,BE 961241088,961245183,GF 961245184,961247231,GY 961247232,961249279,SR @@ -8288,7 +10240,7 @@ 961265664,961269759,SV 961269760,961273855,PA 961273856,961277951,CR -961277952,961282047,FR +961277952,961282047,BE 961282048,961314815,MX 961314816,961380351,US 961380352,961413119,CA @@ -8316,36 +10268,36 @@ 961716224,961720319,CF 961720320,961724415,TD 961724416,961740799,ZA -961740800,961806335,FR +961740800,961806335,BE 961806336,961810431,MR -961810432,961826815,FR +961810432,961826815,BE 961826816,961830911,NE -961830912,961892351,FR +961830912,961892351,BE 961892352,961896447,ZW 961896448,961900543,NG -961900544,961937407,FR +961900544,961937407,BE 961937408,961945599,IS 961945600,961950463,FI -961950464,961950719,FR +961950464,961950719,BE 961950720,961953791,FI 961953792,961961983,DK 961961984,961970175,NO -961970176,962002943,FR +961970176,962002943,BE 962002944,962035711,RU 962035712,962039807,EE 962039808,962043903,LV 962043904,962047999,LT -962048000,962076671,FR +962048000,962076671,BE 962076672,962080767,BH -962080768,962084863,FR +962080768,962084863,BE 962084864,962088959,GE -962088960,962097151,FR +962088960,962097151,BE 962097152,962101247,IL -962101248,962134015,FR +962101248,962134015,BE 962134016,962138111,AE -962138112,962203647,FR +962138112,962203647,BE 962203648,962207999,AT -962208000,962208255,FR +962208000,962208255,BE 962208256,962211839,AT 962211840,962215935,BG 962215936,962217983,HR @@ -8353,53 +10305,55 @@ 962220032,962224127,CZ 962224128,962228223,GR 962228224,962232319,HU -962232320,962244607,FR +962232320,962244607,BE 962244608,962248703,RO -962248704,962252799,FR +962248704,962252799,BE 962252800,962256895,SK 962256896,962260991,SI 962260992,962265087,TR -962265088,962281471,FR +962265088,962281471,BE 962281472,962285567,DO -962285568,962359295,FR +962285568,962359295,BE 962359296,962363391,IN -962363392,962392063,FR +962363392,962392063,BE 962392064,962396159,PK -962396160,962408447,FR +962396160,962408447,BE 962408448,962412543,TH 962412544,962416639,UZ -962416640,962461695,FR +962416640,962461695,BE 962461696,962469887,IE 962469888,962527231,TR -962527232,962592767,FR +962527232,962592767,BE 962592768,962594815,IN -962594816,962596863,FR +962594816,962596863,BE 962596864,962598911,SG -962598912,962600959,FR +962598912,962600959,BE 962600960,962609151,HK 962609152,962613247,JP -962613248,962617343,FR +962613248,962617343,BE 962617344,962621439,AU -962621440,962674687,FR +962621440,962674687,BE 962674688,962676735,BR -962676736,962680831,FR +962676736,962680831,BE 962680832,962689023,US -962689024,962723839,FR +962689024,962723839,BE 962723840,962732031,GB 962732032,962740223,DE 962740224,962744319,SE -962744320,962748415,FR +962744320,962748415,BE 962748416,962752511,BH 962752512,962756607,ZA -962756608,968818687,FR +962756608,968818687,BE 968818688,968819711,DE -968819712,968851455,FR +968819712,968851455,BE 968851456,968852479,US -968852480,972744447,FR +968852480,972743935,BE +972743936,972744191,GB +972744192,972744447,BE 972744448,972744703,IN -972744704,972747263,FR +972744704,972747263,BE 972747264,972747519,US -972747520,973078527,FR +972747520,973078527,BE 973078528,973209599,JP 973209600,973275135,IN 973275136,973471743,JP @@ -8433,7 +10387,7 @@ 978321408,978452479,JP 978452480,978485247,CN 978485248,978501631,TH -978501632,978518015,SG +978501632,978518015,HK 978518016,978583551,CN 978599936,978640895,AU 978640896,978644991,NZ @@ -8447,9 +10401,7 @@ 979369984,979410943,AU 979410944,979419135,HK 979419136,979435519,AU -979435520,979436799,TH -979436800,979437055,OM -979437056,979468287,TH +979435520,979468287,TH 979468288,979501055,BD 979501056,979566591,JP 979566592,979599359,TW @@ -8530,11 +10482,7 @@ 999817216,999821311,BD 999839744,999845887,BD 999849984,999866367,KR -999866368,999873919,HK -999873920,999873941,VN -999873942,999873943,HK -999873944,999874047,VN -999874048,999882751,HK +999866368,999882751,HK 999948288,1000013823,AU 1000013824,1000079359,CN 1000079360,1000341503,JP @@ -8551,7 +10499,9 @@ 1002373120,1002405887,CN 1002405888,1002422271,JP 1002422272,1002434559,AU -1002434560,1008730111,CN +1002434560,1002438399,CN +1002438400,1002438655,HK +1002438656,1008730111,CN 1008730112,1009778687,JP 1009778688,1010237439,MY 1010237440,1010302975,CN @@ -8581,11 +10531,11 @@ 1023238144,1023246335,ID 1023246336,1023279103,CN 1023279104,1023311871,IN -1023311872,1023315711,US -1023315712,1023315967,AU -1023315968,1023316991,US +1023311872,1023316991,US 1023316992,1023317247,AU -1023317248,1023328255,US +1023317248,1023317759,US +1023317760,1023318015,IN +1023318016,1023328255,US 1023328256,1023344639,JP 1023344640,1023410175,CN 1023410176,1023672319,IN @@ -8608,7 +10558,9 @@ 1023901696,1023934463,TH 1023934464,1023942719,AU 1023942720,1023942751,MY -1023942752,1023950847,AU +1023942752,1023946879,AU +1023946880,1023946911,SG +1023946912,1023950847,AU 1023950848,1023954943,ID 1023954944,1023959039,JP 1023959040,1023967231,AU @@ -8633,15 +10585,13 @@ 1024361168,1024361183,HK 1024361184,1024362911,JP 1024362912,1024362943,SG -1024362944,1024363263,JP -1024363264,1024363519,SG -1024363520,1024363775,JP -1024363776,1024364031,AU +1024362944,1024363519,JP +1024363520,1024364031,AU 1024364032,1024364063,JP 1024364064,1024364079,AU -1024364080,1024365727,JP -1024365728,1024365759,SG -1024365760,1024368639,JP +1024364080,1024365567,JP +1024365568,1024365823,SG +1024365824,1024368639,JP 1024368640,1024369407,MY 1024369408,1024371199,JP 1024371200,1024371455,PH @@ -8717,12 +10667,10 @@ 1029636096,1029668863,AU 1029668864,1029701631,IN 1029701632,1030674431,KR -1030674432,1030676223,JP -1030676224,1030750207,KR +1030674432,1030676479,JP +1030676480,1030750207,KR 1030750208,1031798783,JP -1031798784,1032668159,CN -1032668160,1032668415,HK -1032668416,1035993087,CN +1031798784,1035993087,CN 1035993088,1037565951,JP 1037565952,1038614527,TW 1038614528,1039007743,CN @@ -8787,7 +10735,11 @@ 1041268736,1041301503,NO 1041301504,1041310975,IE 1041310976,1041311231,GB -1041311232,1041367039,IE +1041311232,1041335295,IE +1041335296,1041335551,GB +1041335552,1041338879,IE +1041338880,1041339135,GB +1041339136,1041367039,IE 1041367040,1041498111,IT 1041498112,1041563647,SE 1041563648,1041596415,PL @@ -8799,27 +10751,29 @@ 1041701784,1041701791,FR 1041701792,1041701823,GB 1041701824,1041701831,FR -1041701832,1041703479,GB +1041701832,1041702399,GB +1041702400,1041702655,FR +1041702656,1041703479,GB 1041703480,1041703487,FR 1041703488,1041703631,GB 1041703632,1041703639,FR -1041703640,1041704415,GB +1041703640,1041703679,GB +1041703680,1041703935,FR +1041703936,1041704415,GB 1041704416,1041704423,FR 1041704424,1041706551,GB 1041706552,1041706559,FR 1041706560,1041706751,GB -1041706752,1041707263,FR -1041707264,1041708543,GB +1041706752,1041707007,FR +1041707008,1041708543,GB 1041708544,1041708799,FR -1041708800,1041709823,GB -1041709824,1041710079,FR -1041710080,1041710423,GB -1041710424,1041710431,FR -1041710432,1041710671,GB +1041708800,1041709951,GB +1041709952,1041709959,FR +1041709960,1041710671,GB 1041710672,1041710687,FR -1041710688,1041711551,GB -1041711552,1041711559,FR -1041711560,1041711943,GB +1041710688,1041711359,GB +1041711360,1041711615,FR +1041711616,1041711943,GB 1041711944,1041711951,FR 1041711952,1041712631,GB 1041712632,1041712639,FR @@ -8835,15 +10789,17 @@ 1041716456,1041716463,FR 1041716464,1041718015,GB 1041718016,1041718271,FR -1041718272,1041719223,GB +1041718272,1041718527,GB +1041718528,1041718783,FR +1041718784,1041719223,GB 1041719224,1041719224,FR 1041719225,1041719227,GB 1041719228,1041719228,FR 1041719229,1041719407,GB 1041719408,1041719423,FR -1041719424,1041720575,GB -1041720576,1041720831,FR -1041720832,1041721599,GB +1041719424,1041721391,GB +1041721392,1041721407,FR +1041721408,1041721599,GB 1041721600,1041721727,FR 1041721728,1041721759,GB 1041721760,1041721775,FR @@ -8859,15 +10815,15 @@ 1041729565,1041729566,FR 1041729567,1041729935,GB 1041729936,1041729951,FR -1041729952,1041731071,GB -1041731072,1041731327,FR -1041731328,1041732031,GB -1041732032,1041732047,FR -1041732048,1041736381,GB +1041729952,1041731839,GB +1041731840,1041732095,FR +1041732096,1041734911,GB +1041734912,1041735167,FR +1041735168,1041736381,GB 1041736382,1041736382,FR -1041736383,1041736675,GB -1041736676,1041736676,FR -1041736677,1041737583,GB +1041736383,1041736447,GB +1041736448,1041736703,FR +1041736704,1041737583,GB 1041737584,1041737591,FR 1041737592,1041737839,GB 1041737840,1041737855,FR @@ -8875,7 +10831,9 @@ 1041739032,1041739039,FR 1041739040,1041740279,GB 1041740280,1041740287,FR -1041740288,1041742415,GB +1041740288,1041741055,GB +1041741056,1041741311,FR +1041741312,1041742415,GB 1041742416,1041742423,FR 1041742424,1041743103,GB 1041743104,1041743111,FR @@ -8889,9 +10847,7 @@ 1041749640,1041749643,FR 1041749644,1041749659,GB 1041749660,1041749663,FR -1041749664,1041751679,GB -1041751680,1041751687,FR -1041751688,1041753231,GB +1041749664,1041753231,GB 1041753232,1041753239,FR 1041753240,1041756839,GB 1041756840,1041756855,FR @@ -8941,9 +10897,7 @@ 1042875136,1042875391,FR 1042875392,1042879999,NL 1042880000,1042880255,GB -1042880256,1042889983,NL -1042889984,1042890239,GB -1042890240,1042939903,NL +1042880256,1042939903,NL 1042939904,1043070975,ES 1043070976,1043079167,CZ 1043079168,1043087359,DE @@ -8952,19 +10906,17 @@ 1043103744,1043120127,DK 1043120128,1043136511,FI 1043136512,1043202047,NL -1043202048,1043249919,AT -1043249920,1043250175,HU -1043250176,1043257087,AT -1043257088,1043257343,DE -1043257344,1043281151,AT -1043281152,1043281407,DE -1043281408,1043333119,AT +1043202048,1043242495,AT +1043242496,1043242751,DE +1043242752,1043333119,AT 1043333120,1043341311,CH 1043341312,1043349503,IT 1043349504,1043357695,DE 1043357696,1043365887,CH 1043365888,1043398655,PT -1043398656,1043470127,GB +1043398656,1043465839,GB +1043465840,1043465847,NL +1043465848,1043470127,GB 1043470128,1043470223,NL 1043470224,1043475871,GB 1043475872,1043475887,DE @@ -8987,16 +10939,16 @@ 1043595264,1043661567,DE 1043661568,1043661823,GB 1043661824,1043857407,DE -1043857408,1043892735,GB -1043892736,1043892991,CD -1043892992,1043897343,GB +1043857408,1043897343,GB 1043897344,1043897855,KE 1043897856,1043919442,GB 1043919443,1043919443,SS 1043919444,1043921919,GB 1043921920,1043922943,IL 1043922944,1043988479,ES -1043988480,1044118295,NL +1043988480,1044020223,NL +1044020224,1044020479,BE +1044020480,1044118295,NL 1044118296,1044118303,BE 1044118304,1044118423,NL 1044118424,1044118431,BE @@ -9010,6 +10962,7 @@ 1044201472,1044217855,FI 1044217856,1044226047,DK 1044226048,1044234239,OM +1044234240,1044250623,RE 1044283392,1044316159,FR 1044316160,1044332543,NO 1044332544,1044348927,RU @@ -9086,7 +11039,9 @@ 1044936488,1044936495,BE 1044936496,1044937247,GB 1044937248,1044937255,BE -1044937256,1044946943,GB +1044937256,1044938503,GB +1044938504,1044938511,LU +1044938512,1044946943,GB 1044946944,1044955135,UA 1044955136,1044963327,NL 1044963328,1044971519,FI @@ -9102,10 +11057,8 @@ 1045154630,1045154630,SG 1045154631,1045158306,DE 1045158307,1045158307,SG -1045158308,1045159711,DE -1045159712,1045159712,EG -1045159713,1045163508,DE -1045163509,1045163511,SG +1045158308,1045163509,DE +1045163510,1045163511,SG 1045163512,1045168127,DE 1045168128,1045233663,RU 1045233664,1045241855,GB @@ -9173,7 +11126,9 @@ 1046320128,1046321151,GB 1046321152,1046323199,NL 1046323200,1046331391,ES -1046347776,1046413311,IT +1046347776,1046360319,IT +1046360320,1046360575,SM +1046360576,1046413311,IT 1046413312,1046446079,SE 1046446080,1046478879,DE 1046478880,1046479839,GB @@ -9194,9 +11149,9 @@ 1046487290,1046487290,DE 1046487291,1046487551,GB 1046487552,1046487807,DE -1046487808,1046488319,GB -1046488320,1046488575,DE -1046488576,1046489087,GB +1046487808,1046488063,GB +1046488064,1046488319,DE +1046488320,1046489087,GB 1046489088,1046489119,DE 1046489120,1046489311,GB 1046489312,1046489327,ES @@ -9250,12 +11205,20 @@ 1046503096,1046503103,DE 1046503104,1046504447,GB 1046504448,1046508543,DE -1046508544,1046511615,GB -1046511616,1046515711,DE +1046508544,1046511815,GB +1046511816,1046511823,DE +1046511824,1046512583,GB +1046512584,1046512599,DE +1046512600,1046514687,GB +1046514688,1046515711,DE 1046515712,1046518783,GB 1046518784,1046519807,DE -1046519808,1046525183,GB -1046525184,1046525695,DE +1046519808,1046524215,GB +1046524216,1046524223,DE +1046524224,1046525351,GB +1046525352,1046525359,DE +1046525360,1046525439,GB +1046525440,1046525695,DE 1046525696,1046529023,GB 1046529024,1046530047,DE 1046530048,1046530973,GB @@ -9270,12 +11233,8 @@ 1046535440,1046535447,DE 1046535448,1046537023,GB 1046537024,1046537039,DE -1046537040,1046538751,GB -1046538752,1046539007,DE -1046539008,1046543209,GB -1046543210,1046543210,DE -1046543211,1046543343,GB -1046543344,1046543359,DE +1046537040,1046543103,GB +1046543104,1046543359,DE 1046543360,1046544383,GB 1046544384,1046560767,IT 1046560768,1046585343,ES @@ -9322,9 +11281,9 @@ 1047314432,1047322623,SE 1047322624,1047330815,IT 1047330816,1047339007,RU -1047339008,1047346175,SE -1047346176,1047346431,FI -1047346432,1047347199,SE +1047339008,1047342879,SE +1047342880,1047342887,FI +1047342888,1047347199,SE 1047347200,1047363583,DE 1047363584,1047371775,CZ 1047371776,1047373559,RU @@ -9349,9 +11308,7 @@ 1047658496,1047724031,EG 1047728128,1047732223,SE 1047787520,1047787775,ES -1047789568,1047805439,AT -1047805440,1047805695,DE -1047805696,1047822335,AT +1047789568,1047822335,AT 1047822336,1047838719,DE 1047838720,1047846911,DK 1047846912,1047855103,SE @@ -9396,7 +11353,10 @@ 1048576000,1048584191,DE 1048584192,1048592383,IL 1048592384,1048600575,IT -1048600576,1048603391,UA +1048600576,1048602111,UA +1048602112,1048602623,PL +1048602624,1048603135,RU +1048603136,1048603391,UA 1048603392,1048603647,LV 1048603648,1048608767,UA 1048608768,1048616959,GB @@ -9424,7 +11384,9 @@ 1049006080,1049006335,DE 1049008128,1049009151,DE 1049016320,1049018367,DE -1049018624,1049022463,DE +1049018624,1049021439,DE +1049021440,1049021695,GB +1049021696,1049022463,DE 1049026816,1049029375,DE 1049030656,1049031679,DE 1049031744,1049031871,DE @@ -9546,19 +11508,19 @@ 1051922432,1051924479,CH 1051924480,1051948031,AT 1051948032,1051949055,CH -1051949056,1051949823,AT -1051949824,1051950079,NL -1051950080,1051983871,AT +1051949056,1051983871,AT 1051990016,1051991039,DE 1052001280,1052002303,DE 1052003584,1052003839,DE 1052011264,1052012031,DE -1052017536,1052017663,DE +1052017536,1052017567,DE 1052019712,1052019967,GB 1052045312,1052046079,DE 1052049408,1052057599,PL 1052057600,1052065791,RU -1052065792,1052081151,SE +1052065792,1052076031,SE +1052076032,1052077055,NL +1052077056,1052081151,SE 1052081152,1052082175,NL 1052082176,1052090367,DE 1052090368,1052098559,PL @@ -9631,7 +11593,9 @@ 1052488704,1052489727,GB 1052494336,1052494591,NL 1052498432,1052498463,RO -1052508160,1052704767,GB +1052508160,1052593663,GB +1052593664,1052593919,US +1052593920,1052704767,GB 1052704768,1052712959,NL 1052712960,1052770303,GB 1052770304,1052778495,CH @@ -9657,19 +11621,27 @@ 1053138944,1053147135,FI 1053147136,1053163519,SK 1053163520,1053294591,DK -1053295616,1053296639,AT -1053307904,1053308159,GB +1053294616,1053294623,AT +1053294656,1053294679,AT +1053295104,1053296639,AT +1053297152,1053297663,IT +1053301056,1053301071,FR +1053312872,1053312887,DK +1053312912,1053312927,DK 1053313280,1053313535,GB 1053316688,1053316695,GB +1053318912,1053318943,FI 1053320224,1053320239,DE -1053327616,1053327871,ZA +1053325824,1053326335,DE +1053326504,1053326527,BE +1053326544,1053326551,BE 1053329440,1053329471,ES 1053332992,1053334015,BE 1053335552,1053336575,ZA 1053339904,1053340159,AT -1053340928,1053341183,GB 1053345280,1053345375,PK 1053349376,1053349631,NL +1053349952,1053349967,IE 1053353408,1053353423,GB 1053353984,1053354239,IL 1053354912,1053355007,IL @@ -9696,9 +11668,7 @@ 1053663232,1053671423,RU 1053671424,1053687807,LV 1053687808,1053753343,DE -1053753344,1053788687,NL -1053788688,1053788695,DE -1053788696,1053818879,NL +1053753344,1053818879,NL 1053818880,1053819391,DE 1053819424,1053819439,DE 1053819520,1053819563,DE @@ -9795,9 +11765,7 @@ 1054015488,1054089215,IT 1054089216,1054097407,GE 1054097408,1054105599,NL -1054105600,1054107135,FR -1054107136,1054107391,GB -1054107392,1054113791,FR +1054105600,1054113791,FR 1054113792,1054121983,NL 1054121984,1054130175,AT 1054130176,1054138367,LT @@ -9814,10 +11782,7 @@ 1054186241,1054186495,GB 1054186496,1054187264,DE 1054187265,1054187519,GB -1054187520,1054192639,FR -1054192640,1054192895,BG -1054192896,1054195455,FR -1054195456,1054195711,BG +1054187520,1054195711,FR 1054195712,1054212095,BE 1054212096,1054277631,DE 1054277632,1054343167,KW @@ -9825,7 +11790,9 @@ 1054351360,1054359551,UA 1054359552,1054367743,RO 1054367744,1054375935,FI -1054375936,1054384127,GB +1054375936,1054381567,GB +1054381568,1054381823,US +1054381824,1054384127,GB 1054384128,1054400511,DE 1054400512,1054408703,GB 1054408704,1054416895,FR @@ -9929,8 +11896,7 @@ 1056473088,1056505855,FI 1056505856,1056514047,PT 1056514048,1056522239,IT -1056522240,1056523007,DE -1056523008,1056538623,AT +1056522240,1056538623,AT 1056538624,1056546815,RU 1056546816,1056555007,NO 1056555008,1056571391,GB @@ -9951,9 +11917,7 @@ 1061853696,1061854207,GB 1061854208,1061939711,US 1061939712,1061940223,JM -1061940224,1061987839,US -1061987840,1061988095,CA -1061988096,1062069247,US +1061940224,1062069247,US 1062069248,1062070271,PR 1062070272,1062219519,US 1062219520,1062219775,IN @@ -9967,11 +11931,19 @@ 1062530048,1062531071,EC 1062531072,1062545919,US 1062545920,1062546431,BM -1062546432,1062597375,US +1062546432,1062587135,US +1062587136,1062587391,CA +1062587392,1062597375,US 1062597376,1062597631,PR 1062597632,1062871551,US 1062871552,1062872063,PR -1062872064,1063057432,US +1062872064,1063053567,US +1063053568,1063053647,CA +1063053648,1063053663,US +1063053664,1063053743,CA +1063053744,1063053759,US +1063053760,1063053823,CA +1063053824,1063057432,US 1063057433,1063057433,CA 1063057434,1063305727,US 1063305728,1063305983,CA @@ -10003,7 +11975,9 @@ 1064221952,1064222207,MX 1064222208,1064445183,US 1064445184,1064445439,PK -1064445440,1065519871,US +1064445440,1065372927,US +1065372928,1065373183,PR +1065373184,1065519871,US 1065519872,1065520127,GB 1065520128,1065525791,US 1065525792,1065525807,IN @@ -10025,9 +11999,7 @@ 1065908224,1066311679,US 1066311680,1066315775,CA 1066315776,1066352639,US -1066352640,1066354943,JM -1066354944,1066355199,BB -1066355200,1066355711,JM +1066352640,1066355711,JM 1066355712,1066355967,BB 1066355968,1066369023,JM 1066369024,1067238143,US @@ -10064,7 +12036,9 @@ 1068123136,1068123391,BB 1068123392,1068175871,US 1068175872,1068176383,YE -1068176384,1068199935,US +1068176384,1068179455,US +1068179456,1068179711,PR +1068179712,1068199935,US 1068199936,1068204031,CA 1068204032,1068230655,US 1068230656,1068230911,CO @@ -10091,7 +12065,9 @@ 1070729472,1070729727,CA 1070729728,1071100927,US 1071100928,1071101951,PR -1071101952,1071134719,US +1071101952,1071106559,US +1071106560,1071106815,NL +1071106816,1071134719,US 1071134720,1071136767,HK 1071136768,1071141887,US 1071141888,1071142911,HK @@ -10116,7 +12092,9 @@ 1071255296,1071255525,LB 1071255526,1071255526,DE 1071255527,1071255551,LB -1071255552,1071256319,US +1071255552,1071255839,US +1071255840,1071255847,TW +1071255848,1071256319,US 1071256320,1071256575,HK 1071256576,1071258879,US 1071258880,1071259135,HK @@ -10301,8 +12279,8 @@ 1073028352,1073028607,US 1073028608,1073029119,GD 1073029120,1073031423,US -1073031424,1073031679,CW -1073031680,1073034239,US +1073031424,1073031935,CW +1073031936,1073034239,US 1073034240,1073034495,BB 1073034496,1073035263,US 1073035264,1073036032,GD @@ -10469,13 +12447,16 @@ 1075494912,1075558143,US 1075558144,1075558911,VI 1075558912,1075576831,US -1075576832,1075577087,GB -1075577088,1075579391,NO +1075576832,1075576895,NO +1075576896,1075576896,SE +1075576897,1075579391,NO 1075579392,1075579903,GB 1075579904,1075585023,NO 1075585024,1075609599,US 1075609600,1075613695,TT -1075613696,1075769343,US +1075613696,1075717887,US +1075717888,1075718143,CA +1075718144,1075769343,US 1075769344,1075773439,CA 1075773440,1075855359,US 1075855360,1075871743,DO @@ -10488,9 +12469,9 @@ 1075975168,1075975679,CA 1075975680,1075976191,US 1075976192,1075976447,CA -1075976448,1075976959,US -1075976960,1075977215,CA -1075977216,1075977983,US +1075976448,1075977055,US +1075977056,1075977071,CA +1075977072,1075977983,US 1075977984,1075978239,CA 1075978240,1075982335,US 1075982336,1075982591,CA @@ -10507,10 +12488,8 @@ 1075988224,1075988319,US 1075988320,1075988351,CA 1075988352,1075988479,US -1075988480,1075988991,CA -1075988992,1075989231,US -1075989232,1075989239,CA -1075989240,1075989503,US +1075988480,1075989247,CA +1075989248,1075989503,US 1075989504,1075989759,CA 1075989760,1075990015,US 1075990016,1075990527,CA @@ -10677,7 +12656,9 @@ 1078284864,1078284991,CA 1078284992,1078285151,US 1078285152,1078285167,CA -1078285168,1078285311,US +1078285168,1078285255,US +1078285256,1078285259,CA +1078285260,1078285311,US 1078285312,1078285567,CA 1078285568,1078286351,US 1078286352,1078286367,CA @@ -10840,17 +12821,15 @@ 1080024576,1080033279,US 1080033280,1080164351,KY 1080164352,1080295423,CA -1080295424,1080496639,US -1080496640,1080496895,ES -1080496896,1080498431,US +1080295424,1080498431,US 1080498432,1080498664,GB 1080498665,1080498665,US 1080498666,1080498687,GB -1080498688,1080513535,US +1080498688,1080512511,US +1080512512,1080512767,GB +1080512768,1080513535,US 1080513536,1080513791,GB -1080513792,1080550399,US -1080550400,1080550655,IN -1080550656,1080552447,US +1080513792,1080552447,US 1080552448,1080552703,IN 1080552704,1080569343,US 1080569344,1080569599,JP @@ -10860,7 +12839,9 @@ 1080589568,1080589823,CN 1080589824,1080610559,US 1080610560,1080610815,AU -1080610816,1080621055,US +1080610816,1080613631,US +1080613632,1080613887,AU +1080613888,1080621055,US 1080621056,1080621567,AU 1080621568,1080622079,US 1080622080,1080622335,AU @@ -10892,8 +12873,7 @@ 1081037312,1081037567,CA 1081037568,1081038335,US 1081038336,1081040895,CA -1081040896,1081057535,US -1081061376,1081122559,US +1081040896,1081122559,US 1081122560,1081122815,VI 1081122816,1081212927,US 1081212928,1081278463,CA @@ -10948,7 +12928,9 @@ 1081573376,1081589759,US 1081589760,1081593855,BB 1081593856,1081597951,CA -1081597952,1082139409,US +1081597952,1081639423,US +1081639424,1081639679,DE +1081639680,1082139409,US 1082139410,1082139410,ZA 1082139411,1082314751,US 1082314752,1082318847,CA @@ -10960,7 +12942,8 @@ 1082786592,1082786623,HK 1082786624,1082790143,US 1082790144,1082790399,IN -1082790400,1082791167,US +1082790400,1082790911,US +1082790912,1082791167,AU 1082791168,1082791423,IN 1082791424,1082819839,US 1082819840,1082820351,IN @@ -10982,7 +12965,9 @@ 1083738112,1083740159,PR 1083740160,1084067583,US 1084067584,1084067839,CA -1084067840,1085439999,US +1084067840,1084153599,US +1084153600,1084153855,NL +1084153856,1085439999,US 1085440000,1085448191,CA 1085448192,1085456383,US 1085456384,1085457919,PR @@ -11015,31 +13000,33 @@ 1086955520,1086971903,CA 1086971904,1087016959,US 1087016960,1087021055,CA -1087021056,1087395327,US -1087395328,1087395455,GB -1087395456,1087399167,US +1087021056,1087399167,US 1087399168,1087399423,GB 1087399424,1087405407,US 1087405408,1087405423,MX 1087405424,1087413895,US 1087413896,1087413903,DE -1087413904,1087419135,US +1087413904,1087414271,US +1087414272,1087414527,GB +1087414528,1087419135,US 1087419136,1087419391,GB 1087419392,1087419903,US 1087419904,1087420159,CA -1087420160,1087432447,US -1087432448,1087432607,FR -1087432608,1087432639,US -1087432640,1087432703,FR -1087432704,1087436159,US +1087420160,1087432599,US +1087432600,1087432607,FR +1087432608,1087436031,US +1087436032,1087436159,NL 1087436160,1087436167,CH -1087436168,1087440895,US +1087436168,1087436287,NL +1087436288,1087440895,US 1087440896,1087442943,PR 1087442944,1087443551,US 1087443552,1087443583,DE 1087443584,1087444223,US 1087444224,1087444479,GB -1087444480,1087464945,US +1087444480,1087460863,US +1087460864,1087461119,CA +1087461120,1087464945,US 1087464946,1087464949,GB 1087464950,1087466489,US 1087466490,1087466493,GB @@ -11049,11 +13036,25 @@ 1087496704,1087496959,CA 1087496960,1087508161,US 1087508162,1087508162,JP -1087508163,1087593983,US +1087508163,1087510271,US +1087510272,1087510463,CA +1087510464,1087510495,US +1087510496,1087510527,CA +1087510528,1087514623,US +1087514624,1087515391,BB +1087515392,1087515647,US +1087515648,1087516159,BB +1087516160,1087516415,US +1087516416,1087516671,BB +1087516672,1087580927,US +1087580928,1087581183,BR +1087581184,1087593983,US 1087593984,1087594239,MX 1087594240,1087608319,US 1087608320,1087608575,GB -1087608576,1087643723,US +1087608576,1087626111,US +1087626112,1087626239,VI +1087626240,1087643723,US 1087643724,1087643727,FR 1087643728,1087654143,US 1087654144,1087654399,VE @@ -11061,13 +13062,9 @@ 1087678624,1087678655,GB 1087678656,1087686655,US 1087686656,1087686911,PR -1087686912,1087689215,US -1087689216,1087689471,AR -1087689472,1087695319,US +1087686912,1087695319,US 1087695320,1087695323,GB -1087695324,1087708685,US -1087708686,1087708686,AU -1087708687,1087714335,US +1087695324,1087714335,US 1087714336,1087714367,NL 1087714368,1087715327,US 1087715328,1087717375,PA @@ -11080,38 +13077,38 @@ 1087735648,1087746079,US 1087746080,1087746083,HK 1087746084,1087758335,US -1087758336,1087761919,PR -1087761920,1087762431,US -1087762432,1087766527,PR +1087758336,1087762175,PR +1087762176,1087762431,US +1087762432,1087763967,PR +1087763968,1087764223,US +1087764224,1087766527,PR 1087766528,1087798943,US 1087798944,1087798975,CA -1087798976,1087799413,US -1087799414,1087799414,DE -1087799415,1087799787,US +1087798976,1087799295,US +1087799296,1087799372,DE +1087799373,1087799374,US +1087799375,1087799551,DE +1087799552,1087799787,US 1087799788,1087799791,CH 1087799792,1087825663,US 1087825664,1087825919,SA -1087825920,1087836415,US -1087836416,1087836671,FR -1087836672,1087837359,US -1087837360,1087837367,BR -1087837368,1087839231,US -1087839232,1087839487,GB -1087839488,1087862783,US +1087825920,1087837183,US +1087837184,1087837439,BR +1087837440,1087839231,US +1087839232,1087839359,GB +1087839360,1087862783,US 1087862784,1087864831,PA 1087864832,1087873023,US 1087873024,1087873279,CA 1087873280,1087883263,US 1087883264,1087883519,AR -1087883520,1087884001,US -1087884002,1087884002,GB -1087884003,1087950111,US +1087883520,1087950111,US 1087950112,1087950119,PR 1087950120,1088012767,US 1088012768,1088012775,PR -1088012776,1088398591,US -1088398592,1088398719,CA -1088398720,1088684031,US +1088012776,1088319103,US +1088319104,1088319231,CA +1088319232,1088684031,US 1088684032,1088946175,CA 1088946176,1089053183,US 1089053184,1089053439,BR @@ -11167,7 +13164,9 @@ 1089579520,1089580031,VE 1089580032,1089598975,US 1089598976,1089599231,HK -1089599232,1089881599,US +1089599232,1089824767,US +1089824768,1089825023,VI +1089825024,1089881599,US 1089881600,1089882111,GB 1089882112,1089882623,US 1089882624,1089883135,GB @@ -11195,8 +13194,8 @@ 1091803392,1091807231,US 1091807232,1091807487,CA 1091807488,1091807999,US -1091808000,1091808511,CA -1091808512,1091812351,US +1091808000,1091808255,CA +1091808256,1091812351,US 1091812352,1091812607,CN 1091812608,1091960831,US 1091960832,1092026367,CA @@ -11320,7 +13319,6 @@ 1094670800,1095450623,US 1095450624,1095467007,BS 1095467008,1095483391,US -1095484416,1095484671,US 1095491584,1095627775,US 1095627776,1095628287,CA 1095628288,1096278015,US @@ -11350,14 +13348,10 @@ 1097837199,1097896191,US 1097896192,1097897215,VI 1097897216,1097947135,US -1097947136,1097947735,VI -1097947736,1097947743,US -1097947744,1097949183,VI +1097947136,1097949183,VI 1097949184,1097951231,US 1097951232,1097953279,VI -1097953280,1098507263,US -1098507264,1098507519,CA -1098507520,1101121535,US +1097953280,1101121535,US 1101121536,1101121791,EC 1101121792,1101182975,US 1101182976,1101183487,YE @@ -11387,8 +13381,8 @@ 1101475840,1101479935,CO 1101479936,1101484031,US 1101484032,1101488127,CO -1101488128,1101521407,US -1101521408,1101521919,AS +1101488128,1101521663,US +1101521664,1101521919,AS 1101521920,1101542399,US 1101542400,1101542911,CO 1101542912,1101574655,US @@ -11405,8 +13399,8 @@ 1101681408,1101681663,NL 1101681664,1101750783,US 1101750784,1101751295,BM -1101751296,1101767935,US -1101767936,1101768191,CW +1101751296,1101767679,US +1101767680,1101768191,CW 1101768192,1101797375,US 1101797376,1101798399,BB 1101798400,1101803519,US @@ -11472,9 +13466,7 @@ 1104842752,1104844799,PR 1104844800,1104924415,US 1104924416,1104924671,IN -1104924672,1105034495,US -1105034496,1105034751,IT -1105034752,1105099519,US +1104924672,1105099519,US 1105099520,1105099775,EC 1105099776,1106381199,US 1106381200,1106381207,UM @@ -11602,24 +13594,22 @@ 1110573056,1110587391,PR 1110587392,1110587903,US 1110587904,1110588159,PR -1110588160,1110588671,US -1110588672,1110589183,PR -1110589184,1110589439,US +1110588160,1110588415,US +1110588416,1110588671,PR +1110588672,1110589439,US 1110589440,1110590207,PR 1110590208,1110590463,US -1110590464,1110591231,PR -1110591232,1110591487,US -1110591488,1110592255,PR +1110590464,1110590975,PR +1110590976,1110591743,US +1110591744,1110592255,PR 1110592256,1110592511,US 1110592512,1110593023,PR -1110593024,1110593279,US -1110593280,1110593535,PR -1110593536,1110593791,US +1110593024,1110593791,US 1110593792,1110594047,PR 1110594048,1110594303,US 1110594304,1110594815,PR -1110594816,1110595583,US -1110595584,1110598655,PR +1110594816,1110595776,US +1110595777,1110598655,PR 1110598656,1110598911,US 1110598912,1110638591,PR 1110638592,1110654463,US @@ -11634,7 +13624,9 @@ 1110853632,1110854655,GB 1110854656,1110855679,US 1110855680,1110856703,CN -1110856704,1110857727,IN +1110856704,1110857215,IN +1110857216,1110857471,DE +1110857472,1110857727,IN 1110857728,1110858751,SG 1110858752,1110859007,US 1110859008,1110859263,AU @@ -11644,7 +13636,7 @@ 1110867456,1110867967,JM 1110867968,1110887423,US 1110887424,1110887679,IE -1110887680,1110925311,US +1110887680,1110929407,US 1110929408,1110933503,BM 1110933504,1111195647,US 1111195648,1111212031,CA @@ -11677,7 +13669,9 @@ 1113603328,1113603583,GT 1113603584,1113603839,US 1113603840,1113604095,CA -1113604096,1113657343,US +1113604096,1113643202,US +1113643203,1113643237,CH +1113643238,1113657343,US 1113657344,1113661439,CA 1113661440,1113669631,US 1113669632,1113677823,CA @@ -11706,8 +13700,12 @@ 1114512128,1114513407,US 1114513408,1114513471,SA 1114513472,1114513535,US -1114513536,1114515455,SA -1114515456,1114517503,US +1114513536,1114513663,SA +1114513664,1114514175,US +1114514176,1114515455,SA +1114515456,1114515463,US +1114515464,1114515471,CA +1114515472,1114517503,US 1114517504,1114518015,CA 1114518016,1114520063,US 1114520064,1114520319,PH @@ -11788,9 +13786,13 @@ 1117420032,1117420415,CA 1117420416,1117420447,US 1117420448,1117421567,CA -1117421568,1117460223,US +1117421568,1117458911,US +1117458912,1117458943,GB +1117458944,1117460223,US 1117460224,1117460287,GB -1117460288,1117683711,US +1117460288,1117480191,US +1117480192,1117480255,CA +1117480256,1117683711,US 1117683712,1117691903,CA 1117691904,1117724671,US 1117724672,1117728767,CA @@ -11872,7 +13874,9 @@ 1118975488,1118975743,KE 1118975744,1118975999,US 1118976000,1118976255,GB -1118976256,1118980607,US +1118976256,1118980095,US +1118980096,1118980351,GF +1118980352,1118980607,US 1118980608,1118980863,TZ 1118980864,1118983423,US 1118983424,1118983679,NI @@ -11929,11 +13933,15 @@ 1119502336,1119510527,CA 1119510528,1119558143,US 1119558144,1119558655,PR -1119558656,1119568383,US +1119558656,1119567871,US +1119567872,1119568127,GB +1119568128,1119568383,US 1119568384,1119568639,GB -1119568640,1119570175,US -1119570176,1119570303,GB -1119570304,1119571967,US +1119568640,1119568895,US +1119568896,1119569151,GB +1119569152,1119570175,US +1119570176,1119570431,GB +1119570432,1119571967,US 1119571968,1119576063,CA 1119576064,1119580159,US 1119580160,1119584255,CA @@ -11962,7 +13970,9 @@ 1120312064,1120312319,PH 1120312320,1120312575,US 1120312576,1120312831,PH -1120312832,1120346111,US +1120312832,1120315391,US +1120315392,1120317439,SG +1120317440,1120346111,US 1120346112,1120350207,CA 1120350208,1120370687,US 1120370688,1120371199,CA @@ -12059,8 +14069,12 @@ 1120743680,1120744447,US 1120744448,1120744703,KN 1120744704,1120788479,US -1120793856,1120794111,US -1120796672,1120854015,US +1120793088,1120793343,US +1120796672,1120826367,US +1120826368,1120826370,CA +1120826371,1120826371,US +1120826372,1120826623,CA +1120826624,1120854015,US 1120854016,1120862207,CA 1120862208,1120875007,US 1120875008,1120875263,AS @@ -12086,7 +14100,9 @@ 1121254144,1121255423,CA 1121255424,1121714998,US 1121714999,1121714999,KW -1121715000,1121878015,US +1121715000,1121763327,US +1121763328,1121767423,CA +1121767424,1121878015,US 1121878016,1121910783,CA 1121910784,1122074623,US 1122074624,1122087935,CA @@ -12109,11 +14125,7 @@ 1122451456,1122455551,CO 1122455552,1122476031,US 1122476032,1122480127,PR -1122480128,1122494975,US -1122494976,1122495231,PR -1122495232,1122497791,US -1122497792,1122498047,PR -1122498048,1122533375,US +1122480128,1122533375,US 1122533376,1122535423,GB 1122535424,1122538495,KR 1122538496,1122635775,US @@ -12132,17 +14144,13 @@ 1123589632,1123589887,DE 1123589888,1123590143,US 1123590144,1123598335,VI -1123598336,1123606527,CA -1123606528,1123635199,US +1123598336,1123635199,US 1123635200,1123635455,AU -1123635456,1123635639,GB +1123635456,1123635639,US 1123635640,1123635640,RU -1123635641,1123635670,GB +1123635641,1123635670,US 1123635671,1123635671,RU -1123635672,1123635711,GB -1123635712,1123638527,US -1123638528,1123638783,FR -1123638784,1123651583,US +1123635672,1123651583,US 1123651584,1123651839,JM 1123651840,1123652095,BB 1123652096,1123652863,JM @@ -12201,9 +14209,7 @@ 1125481728,1125489151,US 1125489152,1125490687,CA 1125490688,1125498879,US -1125498880,1125501439,CA -1125501440,1125501695,US -1125501696,1125508095,CA +1125498880,1125508095,CA 1125508096,1125508351,PA 1125508352,1125514239,CA 1125514240,1125514495,CY @@ -12235,13 +14241,17 @@ 1128529920,1128641023,CA 1128641024,1128641535,US 1128641536,1128792063,CA -1128792064,1130537215,US +1128792064,1128817407,US +1128817408,1128817663,NL +1128817664,1130537215,US 1130537216,1130537471,GU 1130537472,1130537727,US 1130537728,1130537983,GU 1130537984,1130538751,US 1130538752,1130539007,GU -1130539008,1133461247,US +1130539008,1133226239,US +1133226240,1133226495,AS +1133226496,1133461247,US 1133461248,1133461503,CA 1133461504,1133785439,US 1133785440,1133785471,GB @@ -12252,8 +14262,10 @@ 1134448640,1134546943,US 1134546944,1134551039,CA 1134551040,1136523263,US -1136523264,1136523775,CA -1136523776,1136721919,US +1136523264,1136523391,CA +1136523392,1136523519,US +1136523520,1136523647,CA +1136523648,1136721919,US 1136721920,1136787455,CA 1136787456,1137195519,US 1137195520,1137195775,JP @@ -12287,7 +14299,9 @@ 1137541120,1137623039,US 1137623040,1137639423,PR 1137639424,1137704959,US -1137704960,1137712383,CA +1137704960,1137706239,CA +1137706240,1137706495,US +1137706496,1137712383,CA 1137712384,1137712639,US 1137712640,1137713151,CA 1137713152,1137758207,US @@ -12303,9 +14317,7 @@ 1137893376,1137917951,US 1137917952,1137922047,CA 1137922048,1137926143,US -1137926144,1137926655,CA -1137926656,1137926911,AW -1137926912,1137929727,CA +1137926144,1137929727,CA 1137929728,1137929983,IE 1137929984,1137934335,CA 1137934336,1137950719,US @@ -12318,7 +14330,9 @@ 1137975296,1137983487,US 1137983488,1137991679,CA 1137991680,1138049023,US -1138049024,1138061311,CA +1138049024,1138053631,CA +1138053632,1138053887,US +1138053888,1138061311,CA 1138061312,1138069503,US 1138069504,1138073599,JM 1138073600,1138163711,US @@ -12336,12 +14350,10 @@ 1138196480,1138204671,CA 1138204672,1138212863,US 1138212864,1138216959,CA -1138216960,1138372863,US -1138372864,1138373119,AS -1138373120,1138373887,US -1138373888,1138374655,AS -1138374656,1138374911,US -1138374912,1138375679,AS +1138216960,1138374143,US +1138374144,1138374399,AS +1138374400,1138375167,US +1138375168,1138375679,AS 1138375680,1138419711,US 1138419712,1138419967,DE 1138419968,1138499583,US @@ -12366,7 +14378,9 @@ 1138774016,1138778111,CA 1138778112,1138780671,US 1138780672,1138780679,CA -1138780680,1138786303,US +1138780680,1138781183,US +1138781184,1138781439,CA +1138781440,1138786303,US 1138786304,1138819071,PR 1138819072,1138851839,CA 1138851840,1138917375,US @@ -12379,25 +14393,23 @@ 1139167232,1139167743,US 1139167744,1139168767,PR 1139168768,1139169279,US -1139169280,1139170303,PR -1139170304,1139171071,US +1139169280,1139170175,PR +1139170176,1139170815,US +1139170816,1139170943,PR +1139170944,1139171071,US 1139171072,1139171327,PR -1139171328,1139175679,US -1139175680,1139175807,PR -1139175808,1139179519,US +1139171328,1139179519,US 1139179520,1139195903,CA 1139195904,1139216383,US 1139216384,1139220479,CA 1139220480,1139265535,US 1139265536,1139269631,CA -1139269632,1144796671,US -1144796672,1144796799,CA -1144796800,1144796927,US -1144796928,1144797055,CA -1144797056,1145141247,US -1145142784,1145158143,US -1145158144,1145158655,CA -1145158656,1145188351,US +1139269632,1143726207,US +1143726208,1143726335,CA +1143726336,1144796671,US +1144796672,1144796927,CA +1144796928,1145141247,US +1145142784,1145188351,US 1145188352,1145192447,CA 1145192448,1145242111,US 1145242112,1145242367,NO @@ -12424,9 +14436,7 @@ 1145430016,1145475071,US 1145475072,1145479167,CA 1145479168,1145503743,US -1145503744,1145506815,CA -1145506816,1145507071,US -1145507072,1145520127,CA +1145503744,1145520127,CA 1145520128,1145552895,US 1145552896,1145556991,CA 1145556992,1150043135,US @@ -12461,17 +14471,15 @@ 1151946240,1151946751,GB 1151946752,1152073727,US 1152073728,1152077823,CA -1152077824,1152083455,US -1152083456,1152083711,MO -1152083712,1152116479,US +1152077824,1152116479,US 1152116480,1152116735,CA 1152116736,1152117759,US 1152117760,1152117952,IL 1152117953,1152117953,CA 1152117954,1152118015,IL -1152118016,1152121855,US -1152121856,1152122111,ID -1152122112,1152581631,US +1152118016,1152120319,US +1152120320,1152120575,CA +1152120576,1152581631,US 1152581632,1152614399,CA 1152614400,1152778239,US 1152778240,1152843775,CA @@ -12511,17 +14519,14 @@ 1158340608,1158344703,CA 1158344704,1158348799,US 1158348800,1158381567,CA -1158381568,1158414591,US -1158416336,1158416351,US -1158416896,1158417151,US -1158420480,1158439167,US -1158439296,1158439423,US -1158439680,1158439935,US +1158381568,1158438911,US 1158441216,1158441471,US 1158443008,1158724607,US 1158724608,1158724863,NL 1158724864,1158774783,US -1158774784,1158791167,CA +1158774784,1158784703,CA +1158784704,1158784767,US +1158784768,1158791167,CA 1158791168,1158794239,BM 1158794240,1158794495,US 1158794496,1158799359,BM @@ -12532,7 +14537,11 @@ 1159213056,1159217151,CA 1159217152,1159249919,US 1159249920,1159254015,PR -1159254016,1159269119,US +1159254016,1159262475,US +1159262476,1159262479,SA +1159262480,1159262487,US +1159262488,1159262491,SA +1159262492,1159269119,US 1159269120,1159269375,AR 1159269376,1159274495,US 1159274496,1159274751,GB @@ -12566,7 +14575,9 @@ 1159519744,1159520255,CA 1159520256,1159521535,US 1159521536,1159521791,CA -1159521792,1159522815,US +1159521792,1159522223,US +1159522224,1159522239,CA +1159522240,1159522815,US 1159522816,1159523071,CA 1159523072,1159523583,US 1159523584,1159524351,CA @@ -12574,15 +14585,15 @@ 1159525376,1159526399,CA 1159526400,1159527935,US 1159527936,1159528191,CA -1159528192,1159694591,US +1159528192,1159668479,US +1159668480,1159668735,CA +1159668736,1159694591,US 1159694592,1159694847,CA 1159694848,1159700479,US 1159700480,1159725055,CA 1159725056,1160011775,US 1160011776,1160019967,CA -1160019968,1160202239,US -1160202240,1160202495,CA -1160202496,1160364031,US +1160019968,1160364031,US 1160364032,1160368127,CA 1160368128,1160373247,US 1160373248,1160373503,AE @@ -12615,9 +14626,7 @@ 1160610816,1160665599,US 1160665600,1160665855,CH 1160665856,1160667135,US -1160667136,1160667903,CA -1160667904,1160668159,US -1160668160,1160675327,CA +1160667136,1160675327,CA 1160675328,1160678399,US 1160678400,1160678655,MX 1160678656,1160683519,US @@ -12676,16 +14685,10 @@ 1161437184,1161453567,US 1161453568,1161457663,CA 1161457664,1161576447,US -1161576448,1161578111,CA -1161578112,1161578239,US -1161578240,1161580543,CA -1161580544,1161586687,US -1161586688,1161586943,PA -1161586944,1161617407,US +1161576448,1161580543,CA +1161580544,1161617407,US 1161617408,1161625599,CA -1161625600,1161627703,US -1161627704,1161627711,DE -1161627712,1161631623,US +1161625600,1161631623,US 1161631624,1161631631,KW 1161631632,1161649407,US 1161649408,1161649663,AR @@ -12795,9 +14798,7 @@ 1163472896,1163479295,US 1163479296,1163479551,CA 1163479552,1163526143,US -1163526144,1163526399,CA -1163526400,1163526655,US -1163526656,1163526911,CA +1163526144,1163526911,CA 1163526912,1163527167,US 1163527168,1163527679,CA 1163527680,1163527935,US @@ -12921,8 +14922,14 @@ 1168393664,1168393983,CA 1168393984,1168394143,US 1168394144,1168394151,CA -1168394152,1168394239,US -1168394240,1168394495,CA +1168394152,1168394279,US +1168394280,1168394303,CA +1168394304,1168394399,US +1168394400,1168394407,CA +1168394408,1168394431,US +1168394432,1168394447,CA +1168394448,1168394479,US +1168394480,1168394495,CA 1168394496,1168394575,US 1168394576,1168394591,CA 1168394592,1168394719,US @@ -12997,7 +15004,8 @@ 1169203200,1169211391,CA 1169211392,1170190335,US 1170190336,1170190847,GB -1170190848,1170227199,US +1170190848,1170191103,JP +1170191104,1170227199,US 1170227200,1170231295,NL 1170231296,1170461183,US 1170461184,1170461695,CO @@ -13017,7 +15025,11 @@ 1170522112,1175728639,US 1175728640,1175728895,CA 1175728896,1175977983,US -1175977984,1176502271,CA +1175977984,1176068167,CA +1176068168,1176068175,US +1176068176,1176068191,CA +1176068192,1176068207,US +1176068208,1176502271,CA 1176502272,1176616959,US 1176616960,1176620031,CA 1176620032,1176620447,US @@ -13039,7 +15051,9 @@ 1176702976,1176707071,CA 1176707072,1176731647,US 1176731648,1176735743,PR -1176735744,1176738303,US +1176735744,1176736767,US +1176736768,1176737023,NG +1176737024,1176738303,US 1176738304,1176739071,CO 1176739072,1176739583,US 1176739584,1176739839,CO @@ -13086,13 +15100,13 @@ 1177075456,1177164863,US 1177164864,1177164895,CA 1177164896,1177165055,US -1177165056,1177165311,CA +1177165056,1177165061,CA +1177165062,1177165062,US +1177165063,1177165311,CA 1177165312,1177354239,US -1177354240,1177357311,PR -1177357312,1177357567,US -1177357568,1177405695,PR -1177405696,1177405951,US -1177405952,1177419775,PR +1177354240,1177356799,PR +1177356800,1177357055,US +1177357056,1177419775,PR 1177419776,1177505401,US 1177505402,1177505402,BB 1177505403,1177550847,US @@ -13115,9 +15129,9 @@ 1192468480,1192476671,CA 1192476672,1192488959,US 1192488960,1192493055,CA -1192493056,1207932159,US -1207932160,1207932415,CA -1207932416,1207975935,US +1192493056,1207032703,US +1207032704,1207032831,CA +1207032832,1207975935,US 1207975936,1207980031,CA 1207980032,1208008703,US 1208008704,1208016895,CA @@ -13216,15 +15230,17 @@ 1209867520,1209917439,US 1209917440,1209925631,CA 1209925632,1210253311,US -1210253312,1210258431,CA -1210258432,1210258687,US -1210258688,1210261503,CA +1210253312,1210261503,CA 1210261504,1210420223,US 1210420224,1210420479,IT 1210420480,1210421503,US 1210421504,1210421551,CA -1210421552,1210449919,US -1210449920,1210580991,CA +1210421552,1210447003,US +1210447004,1210447004,CA +1210447005,1210449919,US +1210449920,1210554367,CA +1210554368,1210554623,US +1210554624,1210580991,CA 1210580992,1210847231,US 1210851328,1210925055,US 1210925056,1210941439,CA @@ -13296,9 +15312,11 @@ 1224473600,1224474623,US 1224474624,1224475647,GT 1224475648,1224476671,US -1224476672,1224476927,CW -1224476928,1224477183,US -1224477184,1224478719,CW +1224476672,1224476927,SX +1224476928,1224477439,US +1224477440,1224477695,SX +1224477696,1224477951,US +1224477952,1224478719,SX 1224478720,1224480767,US 1224480768,1224484863,JM 1224484864,1224493055,GT @@ -13341,7 +15359,9 @@ 1246923520,1246923775,AU 1246923776,1246937087,US 1246937088,1246945279,CA -1246945280,1247119439,US +1246945280,1247060479,US +1247060480,1247060735,CA +1247060736,1247119439,US 1247119440,1247119447,KW 1247119448,1247119967,US 1247119968,1247119975,KW @@ -13350,7 +15370,9 @@ 1247123712,1247123967,US 1247123968,1247124223,LU 1247124224,1247490047,US -1247494144,1248864255,US +1247494144,1247556640,US +1247556641,1247556641,CA +1247556642,1248864255,US 1248864256,1248866303,CA 1248866304,1248879615,US 1248880640,1248885759,US @@ -13437,7 +15459,9 @@ 1249256448,1249257471,CA 1249257472,1249260543,US 1249260544,1249261567,CA -1249261568,1249272831,US +1249261568,1249267711,US +1249267712,1249268735,AF +1249268736,1249272831,US 1249272832,1249273855,CA 1249273856,1249281023,US 1249282048,1249310719,US @@ -13459,7 +15483,6 @@ 1249397760,1249409023,US 1249409024,1249410047,CA 1249410048,1249432575,US -1249433088,1249433343,US 1249433600,1249434623,US 1249434624,1249435647,CA 1249435648,1249449983,US @@ -13496,7 +15519,8 @@ 1249592320,1249593343,CA 1249593344,1249598463,US 1249598464,1249599487,CA -1249599488,1249637887,US +1249599488,1249609983,US +1249611776,1249637887,US 1249637888,1249638143,CA 1249638144,1249710143,US 1249710144,1249710207,CN @@ -13505,19 +15529,22 @@ 1249710592,1249710847,DE 1249710848,1249715711,US 1249715712,1249715967,DE -1249715968,1249716735,US +1249715968,1249716479,US +1249716480,1249716735,TW 1249716736,1249716991,DE -1249716992,1249720319,US -1249720320,1249720511,AU +1249716992,1249718015,US +1249718016,1249718271,BE +1249718272,1249720319,US +1249720320,1249720367,AU +1249720368,1249720383,SG +1249720384,1249720511,AU 1249720512,1249720527,IN 1249720528,1249720575,AU 1249720576,1249720591,FR 1249720592,1249720599,GB 1249720600,1249720607,IT 1249720608,1249720831,GB -1249720832,1249721119,US -1249721120,1249721135,CA -1249721136,1249721343,US +1249720832,1249721343,US 1249721344,1249721351,AT 1249721352,1249721359,BE 1249721360,1249721367,CH @@ -13570,7 +15597,12 @@ 1249721808,1249721815,ZA 1249721816,1249722111,US 1249722112,1249722367,IN -1249722368,1249725439,US +1249722368,1249724671,US +1249724672,1249724694,BE +1249724695,1249724695,US +1249724696,1249724927,BE +1249724928,1249725183,FI +1249725184,1249725439,US 1249725440,1249725695,NL 1249725696,1249725951,US 1249725952,1249726207,NL @@ -13578,9 +15610,15 @@ 1249728000,1249728255,HU 1249728256,1249744895,US 1249744896,1249745151,TW -1249745152,1249754390,US +1249745152,1249752319,US +1249752320,1249752575,BE +1249752576,1249754111,US +1249754112,1249754367,IE +1249754368,1249754390,US 1249754391,1249754391,DE -1249754392,1249796095,US +1249754392,1249754623,US +1249754624,1249754879,SG +1249754880,1249796095,US 1249796096,1249804287,CA 1249804288,1249851903,US 1249851904,1249852159,FR @@ -13597,7 +15635,9 @@ 1254704640,1254978751,US 1254978752,1254978767,LB 1254978768,1254989823,US -1254989824,1254998015,CA +1254989824,1254990335,CA +1254990336,1254990591,US +1254990592,1254998015,CA 1254998016,1255002111,US 1255002112,1255006207,CA 1255006208,1255011583,US @@ -13622,7 +15662,9 @@ 1255514112,1255522303,CA 1255522304,1255571455,US 1255571456,1255579647,CA -1255579648,1255669759,US +1255579648,1255588351,US +1255588352,1255588607,NL +1255588608,1255669759,US 1255669760,1255735295,CA 1255735296,1255770367,US 1255770368,1255770623,CA @@ -13643,8 +15685,8 @@ 1262783744,1262783871,US 1262783872,1262783999,CA 1262784000,1262784127,US -1262784128,1262784255,CA -1262784256,1263271423,US +1262784128,1262784511,CA +1262784512,1263271423,US 1263271424,1263271679,CA 1263271680,1264717823,US 1264717824,1264718079,CA @@ -13662,7 +15704,11 @@ 1266147328,1266155519,CA 1266155520,1267934968,US 1267934969,1267934969,CA -1267934970,1268252671,US +1267934970,1268152737,US +1268152738,1268152738,CA +1268152739,1268200732,US +1268200733,1268200733,VI +1268200734,1268252671,US 1268252672,1268776959,CA 1268776960,1275600895,US 1275600896,1275604991,BM @@ -13692,8 +15738,8 @@ 1279262720,1279787007,CA 1279787008,1279848447,US 1279848448,1279851519,PR -1279851520,1279852031,VI -1279852032,1279852543,PR +1279851520,1279851775,VI +1279851776,1279852543,PR 1279852544,1279950847,US 1279950848,1279951103,CA 1279951104,1279951231,US @@ -13702,7 +15748,9 @@ 1279952384,1279952895,CA 1279952896,1279953151,US 1279953152,1279953663,CA -1279953664,1279959551,US +1279953664,1279953759,US +1279953760,1279953791,CA +1279953792,1279959551,US 1279959552,1279959807,CA 1279959808,1279960479,US 1279960480,1279960511,CA @@ -13889,13 +15937,11 @@ 1296367616,1296400383,GR 1296400384,1296433151,BH 1296433152,1296465919,BG -1296465920,1296470015,LT -1296470016,1296473087,NO -1296473088,1296475135,LT -1296475136,1296476159,US -1296476160,1296479743,LT +1296465920,1296474111,FR +1296474112,1296476159,US +1296476160,1296479743,FR 1296479744,1296482303,NO -1296482304,1296498687,LT +1296482304,1296498687,FR 1296498688,1296531455,BG 1296531456,1296564223,MT 1296564224,1296566271,GB @@ -13952,7 +15998,9 @@ 1296677640,1296677647,NG 1296677648,1296677727,JE 1296677728,1296677735,NG -1296677736,1296678903,JE +1296677736,1296678791,JE +1296678792,1296678799,NG +1296678800,1296678903,JE 1296678904,1296678911,NG 1296678912,1296680959,SA 1296680960,1296683007,ES @@ -14038,9 +16086,15 @@ 1297072128,1297088511,PL 1297088512,1297121279,AT 1297121280,1297154047,SE -1297154048,1297178623,RO +1297154048,1297173503,RO +1297173504,1297173759,IR +1297173760,1297173775,IQ +1297173776,1297175551,IR +1297175552,1297178623,RO 1297178624,1297178879,NL -1297178880,1297215487,RO +1297178880,1297182719,RO +1297182720,1297184767,ES +1297184768,1297215487,RO 1297215488,1297217535,NL 1297217536,1297219583,RO 1297219584,1297285119,RU @@ -14086,7 +16140,9 @@ 1297727488,1297743871,MD 1297743872,1297760255,DE 1297760256,1297776639,LT -1297776640,1297793023,DE +1297776640,1297782783,DE +1297782784,1297784831,PT +1297784832,1297793023,DE 1297793024,1297809407,UA 1297809408,1297825791,PL 1297825792,1297842175,RU @@ -14161,7 +16217,7 @@ 1298137088,1298661375,GB 1298661376,1298677759,FR 1298677760,1298694143,IR -1298694144,1298710527,RO +1298694144,1298710527,BG 1298710528,1298726911,CZ 1298726912,1298743295,RS 1298743296,1298759679,FI @@ -14199,16 +16255,16 @@ 1299120128,1299136511,SI 1299136512,1299169279,HU 1299169280,1299174399,FR -1299174400,1299176447,GB -1299176448,1299177471,FR -1299177472,1299179519,DE -1299179520,1299185663,FR +1299174400,1299178495,GB +1299178496,1299185663,FR 1299185664,1299447807,PL 1299447808,1299709951,AT 1299709952,1299972095,UA 1299972096,1300234239,IL 1300234240,1302331391,FR -1302331392,1303379967,NL +1302331392,1303359999,NL +1303360000,1303360255,DE +1303360256,1303379967,NL 1303379968,1304428543,DE 1304428544,1305477119,FR 1305477120,1305739263,ES @@ -14342,10 +16398,8 @@ 1307623424,1307627519,FR 1307627520,1307631615,SE 1307631616,1307635711,IT -1307635712,1307636991,EE -1307636992,1307637247,LV -1307637248,1307637503,EE -1307637504,1307637759,LV +1307635712,1307636735,EE +1307636736,1307637759,LV 1307637760,1307639807,LT 1307639808,1307643903,IT 1307643904,1307652095,RU @@ -14374,9 +16428,9 @@ 1307742208,1307746303,HU 1307746304,1307750399,UA 1307750400,1307754495,IT -1307754496,1307757289,GB -1307757290,1307757293,FR -1307757294,1307758591,GB +1307754496,1307757055,GB +1307757056,1307757311,FR +1307757312,1307758591,GB 1307758592,1307762687,SM 1307762688,1307766783,PL 1307766784,1307770879,GB @@ -14389,6 +16443,7 @@ 1307807744,1307811839,SE 1307811840,1307815935,NL 1307816192,1307816447,GB +1307817286,1307817286,DE 1307817984,1307818048,GB 1307818049,1307818049,BE 1307818050,1307818239,GB @@ -14423,7 +16478,9 @@ 1307926528,1307930623,KZ 1307930624,1307934719,RU 1307934720,1307938815,FR -1307938816,1307942911,US +1307938816,1307941242,US +1307941243,1307941243,TR +1307941244,1307942911,US 1307942912,1307947007,RU 1307947008,1307951103,CH 1307951104,1307959295,RU @@ -14521,19 +16578,7 @@ 1310588928,1310605311,RU 1310605312,1310621695,PL 1310621696,1310638079,RS -1310638080,1310639615,RU -1310639616,1310639871,UA -1310639872,1310640639,RU -1310640640,1310641407,UA -1310641408,1310642175,RU -1310642176,1310642431,UA -1310642432,1310643711,RU -1310643712,1310644223,UA -1310644224,1310648063,RU -1310648064,1310648319,UA -1310648320,1310650623,RU -1310650624,1310650879,UA -1310650880,1310656511,RU +1310638080,1310656511,RU 1310656512,1310657535,GB 1310657536,1310658559,SE 1310658560,1310660607,RU @@ -14583,9 +16628,7 @@ 1311250432,1311252479,RU 1311252480,1311253447,GB 1311253448,1311253455,IT -1311253456,1311254447,GB -1311254448,1311254455,IT -1311254456,1311254527,GB +1311253456,1311254527,GB 1311254528,1311256575,SE 1311256576,1311258623,FR 1311258624,1311262719,GB @@ -14611,11 +16654,13 @@ 1311301632,1311303679,TR 1311303680,1311307775,GB 1311307776,1311309823,IS -1311309824,1311310591,GB -1311310592,1311310847,GG +1311309824,1311310335,GB +1311310336,1311310847,GG 1311310848,1311310857,GB 1311310858,1311310858,GG -1311310859,1311311871,GB +1311310859,1311311103,GB +1311311104,1311311359,GG +1311311360,1311311871,GB 1311311872,1311315967,CZ 1311315968,1311318015,PL 1311318016,1311320063,RU @@ -14646,9 +16691,11 @@ 1311506432,1311637503,CZ 1311637504,1312292863,DE 1312292864,1312817151,LT -1312817152,1313183103,SE -1313183104,1313183231,DK -1313183232,1313865727,SE +1312817152,1313144959,SE +1313144960,1313145087,DK +1313145088,1313391615,SE +1313391616,1313391871,DK +1313391872,1313865727,SE 1313865728,1313931263,CZ 1313931264,1313996799,RU 1313996800,1314062335,SE @@ -14682,10 +16729,9 @@ 1315741696,1315745791,LB 1315745792,1315749887,CZ 1315749888,1315753983,RU -1315758080,1315758847,RE -1315758848,1315760639,FR -1315760640,1315760895,RE -1315760896,1315761407,FR +1315758080,1315760383,FR +1315760384,1315761151,RE +1315761152,1315761407,FR 1315761408,1315761663,RE 1315761664,1315761919,FR 1315761920,1315762175,RE @@ -14771,7 +16817,9 @@ 1317636096,1317637119,IE 1317637120,1317642239,GB 1317642240,1317642495,IE -1317642496,1317646551,GB +1317642496,1317643316,GB +1317643317,1317643317,IE +1317643318,1317646551,GB 1317646552,1317646559,IE 1317646560,1317647015,GB 1317647016,1317647023,IE @@ -14790,7 +16838,9 @@ 1317765120,1317781503,GE 1317781504,1317814271,RU 1317814272,1317830655,DE -1317830656,1317847039,NL +1317830656,1317831167,NL +1317831168,1317831423,RU +1317831424,1317847039,NL 1317847040,1317863423,RU 1317863424,1317879807,GB 1317879808,1317896191,SK @@ -14819,10 +16869,7 @@ 1318682624,1318690815,RU 1318690816,1318699007,DK 1318699008,1318707199,IE -1318707200,1318707455,FR -1318707456,1318713023,GB -1318713024,1318713087,FR -1318713088,1318715391,GB +1318707200,1318715391,FR 1318715392,1318723583,BG 1318723584,1318731775,IR 1318731776,1318739967,PL @@ -14845,7 +16892,9 @@ 1318871040,1318879231,DK 1318879232,1318887423,CZ 1318887424,1318895615,PL -1318895616,1318903807,DK +1318895616,1318900735,DK +1318900736,1318900991,SE +1318900992,1318903807,DK 1318903808,1318911999,RU 1318912000,1318920191,MK 1318920192,1318928383,IR @@ -14900,8 +16949,7 @@ 1331836928,1331838975,FR 1331838976,1331841023,ES 1331841024,1331843071,CZ -1331843072,1331844863,GB -1331844864,1331845119,FR +1331843072,1331845119,GB 1331845120,1331847167,RU 1331847168,1331849215,FR 1331849216,1331851263,BG @@ -14942,7 +16990,12 @@ 1331931136,1331933183,SE 1331933184,1331935231,TR 1331935232,1331937279,NL -1331937280,1331939327,GB +1331937280,1331938063,NG +1331938064,1331938079,GB +1331938080,1331938431,NG +1331938432,1331938559,GB +1331938560,1331939071,NG +1331939072,1331939327,GB 1331939328,1331941375,BE 1331941376,1331943423,ES 1331943424,1331945471,RU @@ -15037,15 +17090,28 @@ 1334479360,1334479871,SE 1334479872,1334480639,DK 1334480640,1334484991,SE -1334484992,1334487039,DK +1334484992,1334485503,DK +1334485504,1334485759,SE +1334485760,1334486015,DK +1334486016,1334486527,SE +1334486528,1334487039,DK 1334487040,1334487295,SE -1334487296,1334489087,DK +1334487296,1334487551,DK +1334487552,1334487807,SE +1334487808,1334489087,DK 1334489088,1334501631,SE -1334501632,1334508031,DK -1334508032,1334508415,SE -1334508416,1334509055,DK -1334509056,1334509311,SE -1334509312,1334509567,DK +1334501632,1334501887,DK +1334501888,1334502143,SE +1334502144,1334502911,DK +1334502912,1334503423,SE +1334503424,1334505855,DK +1334505856,1334506239,SE +1334506240,1334507007,DK +1334507008,1334507519,SE +1334507520,1334508031,DK +1334508032,1334508543,SE +1334508544,1334508799,DK +1334508800,1334509567,SE 1334509568,1334542335,PL 1334542336,1334575103,RU 1334575104,1334579199,UA @@ -15059,7 +17125,9 @@ 1334611968,1334616063,ME 1334616064,1334620159,MD 1334620160,1334624255,DE -1334624256,1334628351,GB +1334624256,1334625791,GB +1334625792,1334626047,AU +1334626048,1334628351,GB 1334628352,1334632447,IE 1334632448,1334636543,KZ 1334636544,1334640639,RU @@ -15078,8 +17146,8 @@ 1334681856,1334682111,GB 1334682112,1334682367,IE 1334682368,1334682623,FR -1334682624,1334683135,DE -1334683136,1334683391,GB +1334682624,1334683135,GB +1334683136,1334683391,CZ 1334683392,1334683647,CH 1334683648,1334683903,GB 1334683904,1334684031,DE @@ -15179,7 +17247,8 @@ 1336619008,1336621055,AL 1336621056,1336623103,DE 1336623104,1336625151,BE -1336625152,1336626286,GB +1336625152,1336625407,IE +1336625408,1336626286,GB 1336626287,1336626287,IE 1336626288,1336627199,GB 1336627200,1336629247,NO @@ -15232,95 +17301,55 @@ 1342177280,1342628207,GB 1342628208,1342628223,IE 1342628224,1342701567,GB -1342701568,1342704127,MQ -1342704128,1342704383,FR -1342704384,1342704895,MQ -1342704896,1342705151,FR -1342705152,1342705919,MQ -1342705920,1342706175,FR -1342706176,1342707711,MQ -1342707712,1342707967,FR -1342707968,1342708223,MQ -1342708224,1342708479,FR -1342708480,1342708735,MQ -1342708736,1342708991,FR -1342708992,1342711807,MQ -1342711808,1342712063,FR -1342712064,1342716159,MQ -1342716160,1342716415,FR -1342716416,1342716927,MQ -1342716928,1342717183,FR -1342717184,1342717951,MQ -1342717952,1342718207,GP -1342718208,1342718463,FR -1342718464,1342719231,GP -1342719232,1342719487,FR -1342719488,1342720255,GP -1342720256,1342720511,FR -1342720512,1342720767,GP -1342720768,1342721023,FR -1342721024,1342722303,GP -1342722304,1342722559,FR -1342722560,1342723071,GP -1342723072,1342723327,FR -1342723328,1342724095,GP -1342724096,1342724351,FR -1342724352,1342725375,GP -1342725376,1342725631,FR -1342725632,1342727423,GP -1342727424,1342727679,FR -1342727680,1342729215,GP -1342729216,1342729471,FR -1342729472,1342729727,GP -1342729728,1342729983,FR -1342729984,1342733823,GP -1342733824,1342734079,FR -1342734080,1342734335,GP -1342734336,1342734847,RE -1342734848,1342735103,FR -1342735104,1342736639,RE -1342736640,1342736895,FR -1342736896,1342738175,RE -1342738176,1342738687,FR -1342738688,1342739199,RE -1342739200,1342739455,FR -1342739456,1342741503,RE -1342741504,1342742015,FR -1342742016,1342742271,RE -1342742272,1342742783,FR -1342742784,1342743039,RE -1342743040,1342743295,FR -1342743296,1342743807,RE -1342743808,1342744063,FR -1342744064,1342749695,RE -1342749696,1342750207,FR -1342750208,1342753023,RE -1342753024,1342753279,FR -1342753280,1342756351,RE -1342756352,1342757119,FR -1342757120,1342757887,RE -1342757888,1342758399,FR -1342758400,1342759167,RE -1342759168,1342759423,FR -1342759424,1342760447,RE -1342760448,1342760703,FR -1342760704,1342763519,RE -1342763520,1342763775,FR -1342763776,1342764031,RE -1342764032,1342764287,FR -1342764288,1342766079,RE -1342766080,1342766847,FR -1342766848,1342767103,RE -1342767104,1342988287,FR +1342701568,1342750719,RE +1342750720,1342751999,FR +1342752000,1342752255,RE +1342752256,1342753023,FR +1342753024,1342753279,YT +1342753280,1342754047,FR +1342754048,1342754303,RE +1342754304,1342755583,FR +1342755584,1342756095,RE +1342756096,1342759679,FR +1342759680,1342759935,RE +1342759936,1342760703,FR +1342760704,1342760959,RE +1342760960,1342763007,FR +1342763008,1342763263,YT +1342763264,1342765055,FR +1342765056,1342765311,RE +1342765312,1342988287,FR 1342988288,1342989055,US -1342989056,1342996479,FR -1342996480,1343000575,GF -1343000576,1343001087,FR -1343001088,1343001855,GF -1343001856,1343002111,FR -1343002112,1343005695,GF -1343005696,1343005951,FR -1343005952,1343012863,GF +1342989056,1342996991,FR +1342996992,1342997247,GF +1342997248,1342997759,FR +1342997760,1342999551,GF +1342999552,1343000575,FR +1343000576,1343001087,GF +1343001088,1343001599,FR +1343001600,1343002367,GF +1343002368,1343002879,FR +1343002880,1343003135,GF +1343003136,1343003391,FR +1343003392,1343004159,GF +1343004160,1343004671,FR +1343004672,1343004927,GF +1343004928,1343005439,FR +1343005440,1343007231,GF +1343007232,1343007487,FR +1343007488,1343007999,GF +1343008000,1343008255,FR +1343008256,1343008511,GF +1343008512,1343008767,FR +1343008768,1343009023,GF +1343009024,1343010047,FR +1343010048,1343010303,GF +1343010304,1343010815,FR +1343010816,1343011071,GF +1343011072,1343011583,FR +1343011584,1343012095,GF +1343012096,1343012607,FR +1343012608,1343012863,GF 1343012864,1343017983,FR 1343017984,1343018495,RE 1343018496,1343025151,FR @@ -15425,12 +17454,7 @@ 1346740224,1346744319,FI 1346744320,1346748415,RU 1346748416,1346752511,DE -1346752512,1346753023,RE -1346753024,1346753791,FR -1346753792,1346754303,RE -1346754304,1346754559,FR -1346754560,1346755071,RE -1346755072,1346755583,FR +1346752512,1346755583,FR 1346755584,1346756095,RE 1346756096,1346756607,FR 1346756608,1346760703,SE @@ -15726,31 +17750,27 @@ 1347295217,1347295223,US 1347295224,1347295224,AO 1347295225,1347295232,NG -1347295233,1347295744,SE -1347295745,1347295745,US -1347295746,1347295748,SE -1347295749,1347295752,US +1347295233,1347295743,SE +1347295744,1347295752,US 1347295753,1347295755,BW -1347295756,1347295759,SE +1347295756,1347295759,US 1347295760,1347295775,BW 1347295776,1347295776,IQ 1347295777,1347295784,HU 1347295785,1347295791,LB -1347295792,1347295816,SE +1347295792,1347295816,US 1347295817,1347295824,OM 1347295825,1347295832,GH 1347295833,1347295840,FR 1347295841,1347295848,NG 1347295849,1347295852,LS -1347295853,1347295856,SE +1347295853,1347295856,US 1347295857,1347295864,NG -1347295865,1347295928,SE +1347295865,1347295928,US 1347295929,1347295936,NG 1347295937,1347295976,US 1347295977,1347295984,LS -1347295985,1347295992,US -1347295993,1347295999,SE -1347296000,1347296007,US +1347295985,1347296007,US 1347296008,1347296008,SE 1347296009,1347296032,US 1347296033,1347296040,SE @@ -15782,9 +17802,7 @@ 1347305472,1347309567,AL 1347309568,1347313663,DE 1347313664,1347321855,RU -1347325952,1347327743,CZ -1347327744,1347327999,SK -1347328000,1347330047,CZ +1347325952,1347330047,CZ 1347330048,1347338239,DE 1347338240,1347342335,RU 1347342336,1347346431,SE @@ -15888,8 +17906,7 @@ 1347755160,1347755175,GR 1347755176,1347756031,CY 1347756032,1347760127,NL -1347760128,1347762175,CZ -1347762176,1347764223,HU +1347760128,1347764223,HU 1347764224,1347772415,GB 1347772416,1347776511,MT 1347776512,1347780607,SE @@ -15910,7 +17927,8 @@ 1347837952,1347846143,RO 1347846144,1347850239,NO 1347850240,1347854335,IT -1347854336,1347854847,DE +1347854336,1347854591,DE +1347854600,1347854607,DE 1347857408,1347858431,DE 1347862090,1347862090,DE 1347862272,1347862527,DE @@ -16056,53 +18074,31 @@ 1348861952,1348993023,ES 1348993024,1349124095,IT 1349124096,1349255167,GR -1349255168,1349400575,AT -1349400576,1349401087,DE -1349401088,1349451775,AT +1349255168,1349451775,AT 1349451776,1349517311,IE 1349517312,1349763071,NL 1349763072,1349771263,RU 1349771264,1349779455,NL 1349779456,1349910527,IT 1349910528,1350041599,FR -1350041600,1350067575,AT -1350067576,1350067579,CH -1350067580,1350110335,AT -1350110336,1350110463,DE -1350110464,1350140927,AT -1350140928,1350141055,CH -1350141056,1350166015,AT -1350166016,1350166271,SK -1350166272,1350188543,AT -1350188544,1350188799,DE -1350188800,1350195231,AT -1350195232,1350195235,DE -1350195236,1350215679,AT +1350041600,1350215679,AT 1350215680,1350215935,IQ 1350215936,1350216959,AT 1350216960,1350217215,IQ 1350217216,1350217471,AT 1350217472,1350217727,IQ -1350217728,1350230015,AT -1350230016,1350230271,DE -1350230272,1350251007,AT -1350251008,1350251263,HU -1350251264,1350259447,AT -1350259448,1350259451,CZ -1350259452,1350290223,AT -1350290224,1350290227,CH -1350290228,1350303743,AT +1350217728,1350303743,AT 1350303744,1350434815,FR 1350434816,1350565887,NL 1350565888,1352299775,DE 1352299776,1352300031,US 1352300032,1352412159,DE 1352412160,1352412415,FR -1352412416,1352412799,DE -1352412800,1352412863,GB -1352412864,1352417279,DE +1352412416,1352417279,DE 1352417280,1352418303,SK -1352418304,1352663039,DE +1352418304,1352488959,DE +1352488960,1352491007,FR +1352491008,1352663039,DE 1352663040,1353187327,DK 1353187328,1353262295,GB 1353262296,1353262303,US @@ -16112,11 +18108,11 @@ 1353275248,1353275255,ES 1353275256,1353277439,GB 1353277440,1353279487,CH -1353279488,1353287959,GB +1353279488,1353279583,GB +1353279584,1353279591,IT +1353279592,1353287959,GB 1353287960,1353287967,IE -1353287968,1353288191,GB -1353288192,1353288447,IE -1353288448,1353298687,GB +1353287968,1353298687,GB 1353298688,1353299455,SE 1353299456,1353300079,GB 1353300080,1353300095,SE @@ -16126,9 +18122,7 @@ 1353308160,1353309183,FR 1353309184,1353312447,GB 1353312448,1353312479,CH -1353312480,1353313535,GB -1353313536,1353313791,IE -1353313792,1353315327,GB +1353312480,1353315327,GB 1353315328,1353316351,ES 1353316352,1353318399,GB 1353318400,1353383935,SE @@ -16161,9 +18155,7 @@ 1356070912,1356201983,NO 1356201984,1356333055,FR 1356333056,1356464127,SE -1356464128,1356539775,CH -1356539776,1356539903,DE -1356539904,1356595199,CH +1356464128,1356595199,CH 1356595200,1356857343,FI 1356857344,1356922879,ES 1356922880,1356988415,GB @@ -16182,9 +18174,12 @@ 1357324288,1357325311,GB 1357326336,1357326337,ES 1357327360,1357327615,FR -1357328384,1357328639,GB +1357328384,1357328671,GB +1357328896,1357329151,NL 1357329408,1357329415,BE +1357330944,1357331199,GB 1357335808,1357336063,IT +1357337600,1357337615,NL 1357340672,1357341695,GB 1357342976,1357343231,GB 1357343488,1357343503,GB @@ -16194,24 +18189,29 @@ 1357346848,1357346863,FR 1357347336,1357347375,FR 1357347456,1357347583,FR -1357347616,1357347647,FR +1357347616,1357347655,FR 1357347840,1357348095,PL 1357348384,1357348415,ES +1357348480,1357348607,ES 1357351168,1357351423,PL 1357359872,1357360383,GB 1357361152,1357363199,GB 1357363200,1357364223,QA 1357364224,1357365247,ES -1357366784,1357366959,FR +1357366784,1357366959,GB 1357366960,1357366967,BE -1357366968,1357366975,FR -1357366976,1357367039,GB +1357366968,1357367039,GB +1357368352,1357368383,NL 1357368576,1357368831,NL +1357371392,1357371647,GB 1357372160,1357372927,GB 1357373468,1357373471,GB 1357373480,1357373483,GB 1357373488,1357373519,GB -1357373952,1357374463,GB +1357373520,1357373535,FI +1357373952,1357374975,GB +1357377536,1357377671,FR +1357377792,1357378047,FR 1357381632,1357414399,NO 1357414400,1357447167,LV 1357447168,1357479935,IE @@ -16232,6 +18232,7 @@ 1357877248,1357877311,DE 1357877376,1357877439,DE 1357879936,1357880063,GB +1357883392,1357883647,FR 1357883648,1357883903,SE 1357885952,1357886207,SE 1357889024,1357889279,GB @@ -16241,14 +18242,12 @@ 1357891840,1357892095,GB 1357892608,1357892735,NL 1357892864,1357893119,NL +1357896192,1357896447,DE 1357898752,1357898879,DE 1357899584,1357899615,NL 1357899648,1357899775,GB 1357900416,1357900543,SE -1357902336,1357902365,GB 1357902366,1357902366,NO -1357902367,1357902591,GB -1357902592,1357902847,RU 1357902848,1357903359,GB 1357904896,1357905407,GB 1357905920,1357910015,LT @@ -16289,13 +18288,11 @@ 1357984912,1357984919,IT 1357984920,1357985015,GB 1357985016,1357985023,IT -1357985024,1357985575,GB -1357985576,1357985583,IT -1357985584,1357985791,GB +1357985024,1357985599,GB +1357985600,1357985607,IT +1357985608,1357985791,GB 1357985792,1357987839,DE -1357987840,1357989631,GB -1357989632,1357989887,FR -1357989888,1357991935,GB +1357987840,1357991935,GB 1357991936,1357996031,NO 1357996032,1358000127,CH 1358000128,1358004223,LI @@ -16329,21 +18326,17 @@ 1358147584,1358151679,GB 1358151680,1358155775,DE 1358155776,1358159871,CH -1358163968,1358164223,FR -1358164224,1358164479,MQ -1358164480,1358164991,FR -1358164992,1358165503,MQ -1358165504,1358166015,FR -1358166016,1358166783,MQ -1358166784,1358167551,FR -1358167552,1358167807,MQ -1358167808,1358168063,FR +1358163968,1358165503,FR +1358165504,1358165759,MQ +1358165760,1358166015,FR +1358166016,1358166527,MQ +1358166528,1358168063,FR 1358168064,1358172159,GB 1358172160,1358176255,CY 1358176256,1358180351,RU 1358180352,1358184447,ES -1358184448,1358186607,SE -1358186608,1358186623,NO +1358184448,1358186608,SE +1358186609,1358186623,NO 1358186624,1358187775,SE 1358187776,1358187839,NO 1358187840,1358192639,SE @@ -16427,9 +18420,7 @@ 1358553088,1358557183,UA 1358557184,1358557951,GB 1358557952,1358558207,IE -1358558208,1358560255,GB -1358560256,1358560511,IE -1358560512,1358561279,GB +1358558208,1358561279,GB 1358561280,1358569471,CZ 1358569472,1358573567,NG 1358573568,1358577663,LV @@ -16521,9 +18512,7 @@ 1358862899,1358862899,NO 1358862900,1358863359,GB 1358863360,1358863615,US -1358863616,1358863903,GB -1358863904,1358863919,SA -1358863920,1358864383,GB +1358863616,1358864383,GB 1358864384,1358872575,CH 1358872576,1358876671,IT 1358876672,1358880767,LV @@ -16586,7 +18575,9 @@ 1359413248,1359429631,DE 1359429632,1359446015,LT 1359446016,1359462399,DK -1359462400,1359467775,DE +1359462400,1359467007,DE +1359467008,1359467263,US +1359467264,1359467775,DE 1359467776,1359468031,US 1359468032,1359470591,DE 1359470592,1359478783,CH @@ -16633,7 +18624,13 @@ 1360113664,1360117759,HU 1360117760,1360121855,FI 1360121856,1360125951,DE -1360125952,1360130047,SI +1360125952,1360127487,SI +1360127488,1360127999,RS +1360128000,1360128511,MK +1360128512,1360128767,ME +1360128768,1360129023,SI +1360129024,1360129535,BA +1360129536,1360130047,SI 1360130048,1360134143,IE 1360134144,1360138239,NL 1360138240,1360142335,CH @@ -16875,9 +18872,7 @@ 1363410944,1363673087,NL 1363673088,1363935231,IT 1363935232,1364197375,GB -1364197376,1364212991,FR -1364212992,1364213247,GF -1364213248,1364262911,FR +1364197376,1364262911,FR 1364262912,1364328447,IT 1364328448,1364459519,BE 1364459520,1364525055,PT @@ -16950,7 +18945,9 @@ 1364963328,1364967423,RU 1364967424,1364971519,GB 1364971520,1364975615,CZ -1364975616,1364979711,BJ +1364975616,1364979199,BJ +1364979200,1364979455,NG +1364979456,1364979711,BJ 1364979712,1364983039,GB 1364983040,1364983295,CH 1364983296,1364983807,GB @@ -16975,7 +18972,8 @@ 1365044800,1365044927,FR 1365044928,1365044935,GR 1365044936,1365044943,LU -1365044944,1365045247,FR +1365044944,1365044991,FR +1365044992,1365045247,LU 1365045248,1365047295,AT 1365047296,1365049343,SK 1365049344,1365057535,FR @@ -17022,7 +19020,9 @@ 1365219704,1365219711,US 1365219712,1365220231,NL 1365220232,1365220239,IE -1365220240,1365221239,NL +1365220240,1365220503,NL +1365220504,1365220507,IE +1365220508,1365221239,NL 1365221240,1365221247,US 1365221248,1365221375,NL 1365221376,1365225471,GE @@ -17034,7 +19034,11 @@ 1365245952,1366294527,GB 1366294528,1366405831,IT 1366405832,1366405835,SI -1366405836,1367343103,IT +1366405836,1366465791,IT +1366465792,1366465873,NL +1366465874,1366465874,IT +1366465875,1366466047,NL +1366466048,1367343103,IT 1367343104,1369440255,GB 1369440256,1369473023,DE 1369473024,1369505791,HU @@ -17211,6 +19215,7 @@ 1372698880,1372699391,DE 1372699904,1372700159,DE 1372702720,1372703231,DE +1372703616,1372703743,DE 1372704768,1372713983,DE 1372715008,1372717055,DE 1372717056,1372749823,PL @@ -17226,95 +19231,121 @@ 1373437952,1373503487,CH 1373503488,1373569023,RU 1373569024,1373634559,AT -1373634560,1374683135,SE +1373634560,1373854975,SE +1373854976,1373855180,RU +1373855181,1373855181,SE +1373855182,1373855220,RU +1373855221,1373855221,SE +1373855222,1373855231,RU +1373855232,1374683135,SE 1374683136,1375207423,BE -1375207424,1375207935,FR -1375207936,1375208447,MQ -1375208448,1375208703,GP -1375208704,1375210239,MQ -1375210240,1375210495,GP -1375210496,1375211519,MQ -1375211520,1375211775,GP -1375211776,1375212031,FR -1375212032,1375212799,GP -1375212800,1375213055,FR -1375213056,1375215615,GP -1375215616,1375215871,GF -1375215872,1375216383,FR -1375216384,1375218175,GF -1375218176,1375218687,FR -1375218688,1375219455,GF -1375219456,1375219711,FR -1375219712,1375221247,GF -1375221248,1375221503,FR -1375221504,1375221759,GF -1375221760,1375222783,FR -1375222784,1375223807,GF -1375223808,1375227135,MQ -1375227136,1375227647,FR -1375227648,1375230463,MQ -1375230464,1375230719,FR -1375230720,1375233023,MQ -1375233024,1375233279,FR -1375233280,1375233791,MQ -1375233792,1375235071,FR -1375235072,1375235583,MQ -1375235584,1375236095,FR -1375236096,1375236351,MQ -1375236352,1375236863,FR -1375236864,1375237631,MQ -1375237632,1375237887,FR -1375237888,1375239679,MQ -1375239680,1375239935,FR -1375239936,1375240191,MQ -1375240192,1375240447,FR -1375240448,1375240959,GP -1375240960,1375241215,FR -1375241216,1375241983,GP -1375241984,1375242239,FR +1375207424,1375207679,MQ +1375207680,1375208703,FR +1375208704,1375209215,MQ +1375209216,1375209471,FR +1375209472,1375209983,MQ +1375209984,1375210751,FR +1375210752,1375211519,MQ +1375211520,1375211775,FR +1375211776,1375213311,GP +1375213312,1375213567,FR +1375213568,1375215103,GP +1375215104,1375215359,FR +1375215360,1375215615,GP +1375215616,1375215871,FR +1375215872,1375216127,GF +1375216128,1375217663,FR +1375217664,1375218175,GF +1375218176,1375218431,FR +1375218432,1375219711,GF +1375219712,1375219967,FR +1375219968,1375220479,GF +1375220480,1375220735,FR +1375220736,1375220991,GF +1375220992,1375221247,FR +1375221248,1375221503,GF +1375221504,1375223039,FR +1375223040,1375223551,GF +1375223552,1375224831,FR +1375224832,1375225087,MQ +1375225088,1375225599,FR +1375225600,1375225855,MQ +1375225856,1375226111,FR +1375226112,1375227903,MQ +1375227904,1375228671,FR +1375228672,1375228927,MQ +1375228928,1375229439,FR +1375229440,1375230719,MQ +1375230720,1375231231,FR +1375231232,1375231487,MQ +1375231488,1375231999,FR +1375232000,1375232255,MQ +1375232256,1375233023,FR +1375233024,1375233279,MQ +1375233280,1375233791,FR +1375233792,1375234303,MQ +1375234304,1375236351,FR +1375236352,1375236863,MQ +1375236864,1375237631,FR +1375237632,1375237887,MQ +1375237888,1375239679,FR +1375239680,1375239935,MQ +1375239936,1375240191,FR +1375240192,1375240959,GP +1375240960,1375242239,FR 1375242240,1375242495,MF -1375242496,1375242751,GP -1375242752,1375243263,FR -1375243264,1375245311,GP -1375245312,1375246079,FR -1375246080,1375246335,GP -1375246336,1375246591,FR -1375246592,1375247359,GP -1375247360,1375247615,FR -1375247616,1375249919,GP -1375249920,1375250175,FR -1375250176,1375250431,GP -1375250432,1375251455,FR -1375251456,1375252223,GP -1375252224,1375253247,FR -1375253248,1375253759,GP -1375253760,1375254527,FR -1375254528,1375256063,GP -1375256064,1375256319,FR -1375256320,1375256575,GP +1375242496,1375243263,GP +1375243264,1375243519,FR +1375243520,1375243775,GP +1375243776,1375244031,FR +1375244032,1375244287,GP +1375244288,1375244799,FR +1375244800,1375246591,GP +1375246592,1375246847,FR +1375246848,1375247615,GP +1375247616,1375247871,FR +1375247872,1375248383,GP +1375248384,1375248639,FR +1375248640,1375248895,GP +1375248896,1375249919,FR +1375249920,1375250175,GP +1375250176,1375251967,FR +1375251968,1375252479,GP +1375252480,1375252991,FR +1375252992,1375254015,GP +1375254016,1375254527,FR +1375254528,1375255039,GP +1375255040,1375255295,FR +1375255296,1375255551,GP +1375255552,1375256063,FR +1375256064,1375256575,GP 1375256576,1375257087,RE -1375257088,1375257343,FR -1375257344,1375257855,RE -1375257856,1375258111,FR -1375258112,1375258879,RE -1375258880,1375261183,FR -1375261184,1375261695,RE -1375261696,1375262207,FR -1375262208,1375265535,RE -1375265536,1375266047,FR -1375266048,1375266303,RE -1375266304,1375268095,FR +1375257088,1375257855,FR +1375257856,1375258111,RE +1375258112,1375259135,FR +1375259136,1375259647,RE +1375259648,1375260671,FR +1375260672,1375260927,RE +1375260928,1375261951,FR +1375261952,1375262463,RE +1375262464,1375262719,FR +1375262720,1375263231,RE +1375263232,1375264511,FR +1375264512,1375265279,RE +1375265280,1375265535,FR +1375265536,1375266047,RE +1375266048,1375266559,FR +1375266560,1375267839,RE +1375267840,1375268095,FR 1375268096,1375268351,RE -1375268352,1375268863,FR -1375268864,1375269119,RE -1375269120,1375269631,FR -1375269632,1375270143,RE -1375270144,1375270655,FR -1375270656,1375271423,RE -1375271424,1375271679,FR -1375271680,1375271935,RE -1375271936,1375272191,FR -1375272192,1375272959,RE +1375268352,1375269119,FR +1375269120,1375269631,RE +1375269632,1375270143,FR +1375270144,1375270399,RE +1375270400,1375271167,FR +1375271168,1375272191,RE +1375272192,1375272703,FR +1375272704,1375272959,RE 1375272960,1375731711,FR 1375731712,1378877439,GB 1378877440,1379926015,IT @@ -17342,9 +19373,7 @@ 1382213632,1382219775,GB 1382219776,1382222847,SE 1382222848,1382223103,FI -1382223104,1382226943,SE -1382226944,1382227199,NO -1382227200,1382252543,SE +1382223104,1382252543,SE 1382252544,1382268927,CZ 1382268928,1382285311,IR 1382285312,1382301695,CZ @@ -17361,7 +19390,9 @@ 1382465536,1382481919,PS 1382481920,1382498303,AT 1382498304,1382514687,BG -1382514688,1382531071,DK +1382514688,1382518783,DK +1382518784,1382522879,DE +1382522880,1382531071,DK 1382531072,1382547455,FI 1382547456,1382809599,IT 1382809600,1383071743,GB @@ -17397,7 +19428,9 @@ 1383251968,1383260159,CZ 1383260160,1383268351,RU 1383268352,1383273983,IR -1383273984,1383275775,KW +1383273984,1383274248,KW +1383274249,1383274249,IR +1383274250,1383275775,KW 1383275776,1383276543,IR 1383276544,1383284735,KZ 1383284736,1383292927,PL @@ -17554,11 +19587,7 @@ 1385496576,1385504767,SI 1385504768,1385512959,IT 1385512960,1385521151,DE -1385521152,1385523711,AT -1385523712,1385523967,HU -1385523968,1385524479,AT -1385524480,1385524735,HU -1385524736,1385529343,AT +1385521152,1385529343,AT 1385529344,1385537535,RU 1385537536,1385545727,DE 1385545728,1385553919,RU @@ -17637,6 +19666,7 @@ 1388587520,1388587775,GB 1388588288,1388588543,GB 1388588800,1388589823,GB +1388590080,1388590335,GB 1388591104,1388591359,AU 1388593152,1388601343,RU 1388601344,1388609535,SE @@ -17647,13 +19677,7 @@ 1388642304,1388650495,FI 1388650496,1388658687,PL 1388658688,1388666879,GB -1388666880,1388667135,FR -1388667136,1388667391,RE -1388667392,1388668671,FR -1388668672,1388668927,RE -1388668928,1388669183,FR -1388669184,1388669439,RE -1388669440,1388675071,FR +1388666880,1388675071,FR 1388677632,1388677887,NL 1388678144,1388679167,DE 1388681216,1388683263,DE @@ -17696,11 +19720,13 @@ 1388744760,1388744767,IE 1388744768,1388744831,GB 1388744832,1388744847,IE -1388744848,1388745971,GB +1388744848,1388744959,GB +1388744960,1388745215,IE +1388745216,1388745971,GB 1388745972,1388745975,IE 1388745976,1388746495,GB -1388746496,1388746751,IE -1388746752,1388746911,GB +1388746496,1388746559,IE +1388746560,1388746911,GB 1388746912,1388746927,IE 1388746928,1388748799,GB 1388748800,1388756991,RU @@ -17780,14 +19806,15 @@ 1389707264,1389723647,IT 1389723648,1389756415,ES 1389756416,1389772799,SE -1389772800,1389783039,SI +1389772800,1389778431,SI +1389778432,1389780991,RS +1389780992,1389783039,HR 1389783040,1389785087,BA 1389785088,1389787135,MK -1389787136,1389789183,SI +1389787136,1389788671,SI +1389788672,1389789183,RS 1389789184,1389805567,PL -1389805568,1389805823,DE -1389805824,1389806079,US -1389806080,1389806591,DE +1389805568,1389806591,DE 1389806592,1389806847,SA 1389806848,1389821951,DE 1389821952,1389838335,NL @@ -17796,9 +19823,7 @@ 1389871104,1389887487,FI 1389887488,1389953023,FR 1389953024,1390018559,NL -1390018560,1390074879,AT -1390074880,1390075135,HU -1390075136,1390084095,AT +1390018560,1390084095,AT 1390084096,1390149631,GB 1390149632,1390215167,CH 1390215168,1390280703,IS @@ -17827,11 +19852,7 @@ 1397071872,1397096447,RU 1397096448,1397227519,IE 1397227520,1397489663,DK -1397489664,1397582847,CH -1397582848,1397583103,DE -1397583104,1397583615,CH -1397583616,1397583871,DE -1397583872,1397751807,CH +1397489664,1397751807,CH 1397751808,1398276095,NL 1398276096,1398800383,DK 1398800384,1398833151,KW @@ -17947,7 +19968,9 @@ 1401546752,1401548799,IT 1401548800,1401550847,FR 1401550848,1401551103,GB -1401551104,1401552639,JE +1401551104,1401551359,JE +1401551360,1401551615,GB +1401551616,1401552639,JE 1401552640,1401552895,GB 1401552896,1401554943,NL 1401554944,1401556991,IE @@ -17962,7 +19985,9 @@ 1401634816,1401651199,HR 1401651200,1401667583,RU 1401667584,1401683967,IT -1401683968,1401749503,SE +1401683968,1401712895,SE +1401712896,1401713151,DE +1401713152,1401749503,SE 1401749504,1401765887,DE 1401765888,1401782271,IE 1401782272,1401815039,FR @@ -18183,30 +20208,14 @@ 1404385280,1404386047,LT 1404386048,1404387327,SE 1404387328,1404420095,LT -1404420096,1404436479,RU +1404420096,1404426502,RU +1404426503,1404426503,SE +1404426504,1404436479,RU 1404436480,1404444671,SE -1404444672,1404445951,NO -1404445952,1404446207,SE -1404446208,1404446719,NO -1404446720,1404446975,SE -1404446976,1404447999,NO -1404448000,1404448255,SE -1404448256,1404452863,NO +1404444672,1404452863,NO 1404452864,1404510207,SE -1404510208,1404510975,HR -1404510976,1404511231,SE -1404511232,1404512255,HR -1404512256,1404512767,SE -1404512768,1404513023,HR -1404513024,1404514303,SE -1404514304,1404514559,HR -1404514560,1404514815,SE -1404514816,1404515071,HR -1404515072,1404515327,SE -1404515328,1404515839,HR -1404515840,1404516095,SE -1404516096,1404518143,HR -1404518144,1404522495,SE +1404510208,1404518399,HR +1404518400,1404522495,SE 1404522496,1404526591,LV 1404526592,1404538879,SE 1404538880,1404542975,LV @@ -18215,93 +20224,31 @@ 1404563456,1404567551,SE 1404567552,1404583935,HR 1404583936,1404600319,NO -1404600320,1404678143,SE +1404600320,1404633087,SE +1404633088,1404633599,HR +1404633600,1404633855,SE +1404633856,1404635647,HR +1404635648,1404635903,SE +1404635904,1404637439,HR +1404637440,1404637695,SE +1404637696,1404638207,HR +1404638208,1404638463,SE +1404638464,1404641279,HR +1404641280,1404678143,SE 1404678144,1404680191,HR 1404680192,1404731391,SE -1404731392,1404732159,HR -1404732160,1404732671,SE -1404732672,1404733951,HR -1404733952,1404734207,SE -1404734208,1404736511,HR -1404736512,1404736767,SE -1404736768,1404740095,HR -1404740096,1404740351,SE -1404740352,1404740863,HR -1404740864,1404741119,SE -1404741120,1404742911,HR -1404742912,1404743679,SE -1404743680,1404744959,HR -1404744960,1404745215,SE -1404745216,1404745983,HR -1404745984,1404746495,SE -1404746496,1404748031,HR -1404748032,1404748287,SE -1404748288,1404748799,HR -1404748800,1404749311,SE -1404749312,1404749567,HR -1404749568,1404750079,SE -1404750080,1404752639,HR -1404752640,1404752895,SE -1404752896,1404754943,HR -1404754944,1404755199,SE -1404755200,1404755967,HR -1404755968,1404756223,SE -1404756224,1404756479,HR -1404756480,1404756735,SE -1404756736,1404757247,HR -1404757248,1404757503,SE -1404757504,1404759551,HR -1404759552,1404759807,SE -1404759808,1404760063,HR -1404760064,1404760319,SE -1404760320,1404760831,HR -1404760832,1404761087,SE -1404761088,1404762111,HR -1404762112,1404762367,SE -1404762368,1404762623,HR -1404762624,1404763135,SE -1404763136,1404763647,HR -1404763648,1404763903,SE -1404763904,1404764159,HR +1404731392,1404764159,HR 1404764160,1404780543,NL 1404780544,1404788735,SE -1404788736,1404790527,NL -1404790528,1404790783,SE -1404790784,1404791039,NL -1404791040,1404791295,SE -1404791296,1404791807,NL -1404791808,1404792063,SE -1404792064,1404792575,NL -1404792576,1404792831,SE -1404792832,1404793599,NL -1404793600,1404793855,SE -1404793856,1404795135,NL -1404795136,1404795391,SE -1404795392,1404795647,NL -1404795648,1404795903,SE -1404795904,1404796927,NL +1404788736,1404796927,NL 1404796928,1404801023,EE -1404801024,1404803071,SE -1404803072,1404803327,LV -1404803328,1404803583,SE +1404801024,1404803583,SE 1404803584,1404804095,LV 1404804096,1404805119,SE 1404805120,1404813311,AT 1404813312,1404815871,EE 1404815872,1404816383,LT -1404816384,1404821503,NL -1404821504,1404821759,SE -1404821760,1404822271,NL -1404822272,1404822527,SE -1404822528,1404822783,NL -1404822784,1404823039,SE -1404823040,1404825087,NL -1404825088,1404825343,SE -1404825344,1404826367,NL -1404826368,1404826623,SE -1404826624,1404827135,NL -1404827136,1404827903,SE -1404827904,1404829695,NL +1404816384,1404829695,NL 1404829696,1404870655,RU 1404870656,1404872703,LT 1404872704,1404874751,SE @@ -18310,21 +20257,44 @@ 1404887040,1404927999,NL 1404928000,1404944383,SE 1404944384,1404960767,LT -1404960768,1405009919,SE -1405009920,1405010687,LT -1405010688,1405010943,SE -1405010944,1405011199,LT -1405011200,1405011711,SE -1405011712,1405013759,LT -1405013760,1405014015,SE -1405014016,1405020159,LT -1405020160,1405020415,SE -1405020416,1405020927,LT -1405020928,1405021183,SE -1405021184,1405021439,LT -1405021440,1405021951,SE -1405021952,1405022207,LT -1405022208,1405026303,SE +1404960768,1404977151,SE +1404977152,1404977919,LT +1404977920,1404978175,SE +1404978176,1404980223,LT +1404980224,1404980479,SE +1404980480,1404981247,LT +1404981248,1404981503,SE +1404981504,1404983551,LT +1404983552,1404983807,SE +1404983808,1404985087,LT +1404985088,1404985343,SE +1404985344,1404986623,LT +1404986624,1404986879,SE +1404986880,1404987135,LT +1404987136,1404987311,SE +1404987312,1404987312,LT +1404987313,1404987647,SE +1404987648,1404988415,LT +1404988416,1404988469,SE +1404988470,1404988470,LT +1404988471,1404988671,SE +1404988672,1404989695,LT +1404989696,1404989951,SE +1404989952,1404990463,LT +1404990464,1404990719,SE +1404990720,1404990975,LT +1404990976,1404991231,SE +1404991232,1404992511,LT +1404992512,1404992767,SE +1404992768,1404993535,LT +1404993536,1405009919,SE +1405009920,1405022207,LT +1405022208,1405022463,SE +1405022464,1405022975,LT +1405022976,1405023231,SE +1405023232,1405025023,LT +1405025024,1405025279,SE +1405025280,1405026303,LT 1405026304,1405042687,NO 1405042688,1405048831,SE 1405048832,1405050879,HR @@ -18333,21 +20303,133 @@ 1405063168,1405067263,NO 1405067264,1405083647,EE 1405083648,1405091839,SE -1405091840,1405815295,FR -1405815296,1405815551,MQ -1405815552,1405820927,FR -1405820928,1405821183,MQ -1405821184,1405822719,FR -1405822720,1405822975,MQ -1405822976,1405834751,FR -1405834752,1405835007,MQ -1405835008,1405850879,FR -1405850880,1405851135,MQ -1405851136,1405858815,FR +1405091840,1405813759,FR +1405813760,1405814015,MQ +1405814016,1405815807,FR +1405815808,1405816063,MQ +1405816064,1405816319,FR +1405816320,1405816575,MQ +1405816576,1405816831,FR +1405816832,1405817087,MQ +1405817088,1405817343,FR +1405817344,1405817599,MQ +1405817600,1405818111,FR +1405818112,1405818367,MQ +1405818368,1405818623,FR +1405818624,1405818879,MQ +1405818880,1405819135,FR +1405819136,1405819391,MQ +1405819392,1405819903,FR +1405819904,1405820159,MQ +1405820160,1405820671,FR +1405820672,1405820927,MQ +1405820928,1405821439,FR +1405821440,1405821695,MQ +1405821696,1405822207,FR +1405822208,1405822719,MQ +1405822720,1405823231,FR +1405823232,1405823743,MQ +1405823744,1405824255,FR +1405824256,1405824511,MQ +1405824512,1405824767,FR +1405824768,1405825279,MQ +1405825280,1405825535,FR +1405825536,1405826303,MQ +1405826304,1405826559,FR +1405826560,1405826815,MQ +1405826816,1405827071,FR +1405827072,1405827583,MQ +1405827584,1405827839,FR +1405827840,1405828095,MQ +1405828096,1405828607,FR +1405828608,1405829119,MQ +1405829120,1405829375,FR +1405829376,1405829631,MQ +1405829632,1405830143,FR +1405830144,1405830399,MQ +1405830400,1405830655,FR +1405830656,1405831167,MQ +1405831168,1405831423,FR +1405831424,1405831679,MQ +1405831680,1405833727,FR +1405833728,1405833983,MQ +1405833984,1405834495,FR +1405834496,1405835263,MQ +1405835264,1405835775,FR +1405835776,1405836031,MQ +1405836032,1405836543,FR +1405836544,1405837055,MQ +1405837056,1405837311,FR +1405837312,1405837567,MQ +1405837568,1405838079,FR +1405838080,1405838591,MQ +1405838592,1405839103,FR +1405839104,1405839359,MQ +1405839360,1405839615,FR +1405839616,1405839871,MQ +1405839872,1405840127,FR +1405840128,1405840639,MQ +1405840640,1405845503,FR +1405845504,1405845759,MQ +1405845760,1405846015,FR +1405846016,1405846527,MQ +1405846528,1405846783,FR +1405846784,1405847039,MQ +1405847040,1405847551,FR +1405847552,1405847807,MQ +1405847808,1405848063,FR +1405848064,1405848319,MQ +1405848320,1405848575,FR +1405848576,1405848831,MQ +1405848832,1405849087,FR +1405849088,1405849599,MQ +1405849600,1405849855,FR +1405849856,1405850111,MQ +1405850112,1405850623,FR +1405850624,1405850879,MQ +1405850880,1405851135,FR +1405851136,1405851903,MQ +1405851904,1405852159,FR +1405852160,1405853439,MQ +1405853440,1405854463,FR +1405854464,1405854975,MQ +1405854976,1405856255,FR +1405856256,1405856511,MQ +1405856512,1405857791,FR +1405857792,1405858559,MQ +1405858560,1405858815,FR 1405858816,1405859071,MQ -1405859072,1405871103,FR -1405871104,1405871359,MQ -1405871360,1406140415,FR +1405859072,1405859327,FR +1405859328,1405860351,MQ +1405860352,1405860607,FR +1405860608,1405861119,MQ +1405861120,1405861375,FR +1405861376,1405861631,MQ +1405861632,1405862143,FR +1405862144,1405862399,MQ +1405862400,1405862911,FR +1405862912,1405863423,MQ +1405863424,1405864447,FR +1405864448,1405864703,MQ +1405864704,1405864959,FR +1405864960,1405865983,MQ +1405865984,1405866239,FR +1405866240,1405866495,MQ +1405866496,1405867519,FR +1405867520,1405867775,MQ +1405867776,1405868287,FR +1405868288,1405868799,MQ +1405868800,1405870335,FR +1405870336,1405870591,MQ +1405870592,1405871359,FR +1405871360,1405871615,MQ +1405871616,1405871871,FR +1405871872,1405872127,MQ +1405872128,1405872383,FR +1405872384,1405872895,MQ +1405872896,1405873663,FR +1405873664,1405873919,MQ +1405873920,1406140415,FR 1406140416,1406205951,CZ 1406205952,1406271487,SE 1406271488,1406337023,IE @@ -18369,35 +20451,23 @@ 1406730240,1406746623,RU 1406746624,1406754815,BE 1406754816,1406763007,GB -1406763008,1406763263,BE -1406763264,1406764799,LU -1406764800,1406765055,BE -1406765056,1406765311,LU -1406765312,1406765823,BE -1406765824,1406766335,LU -1406766336,1406767103,BE -1406767104,1406767615,LU -1406767616,1406767871,BE -1406767872,1406768127,LU -1406768128,1406768383,BE -1406768384,1406769407,LU -1406769408,1406769663,BE -1406769664,1406770431,LU -1406770432,1406770687,BE -1406770688,1406770943,LU -1406770944,1406771199,BE +1406763008,1406771199,LU 1406771200,1406779391,GB 1406779392,1406787583,RU -1406787584,1406791167,ES -1406791168,1406791295,GB +1406787584,1406791159,ES +1406791160,1406791295,GB 1406791296,1406793843,ES 1406793844,1406793847,GB 1406793848,1406794751,ES 1406794752,1406795775,NL 1406795776,1406796543,GB 1406796544,1406796799,IM -1406796800,1406803455,GB -1406803456,1406803967,IM +1406796800,1406802175,GB +1406802176,1406802431,IM +1406802432,1406803199,GB +1406803200,1406803455,IM +1406803456,1406803711,GB +1406803712,1406803967,IM 1406803968,1406812159,DE 1406812160,1406820351,SE 1406820352,1406828543,PL @@ -18452,9 +20522,7 @@ 1407320064,1407451135,SE 1407451136,1407483903,BG 1407483904,1407516671,CH -1407516672,1407522719,GB -1407522720,1407522727,CD -1407522728,1407526231,GB +1407516672,1407526231,GB 1407526232,1407526239,CD 1407526240,1407529178,GB 1407529179,1407529180,NG @@ -18572,9 +20640,7 @@ 1410514944,1410523135,GB 1410523136,1410531327,PT 1410531328,1410539519,DE -1410539520,1410540671,GB -1410540672,1410540799,US -1410540800,1410547711,GB +1410539520,1410547711,GB 1410547712,1410555903,CZ 1410555904,1410564095,GB 1410564096,1410572287,SE @@ -18600,9 +20666,9 @@ 1410711552,1410719743,BG 1410719744,1410727935,RU 1410727936,1410736127,BG -1410736128,1410738687,RS -1410738688,1410738943,XK -1410738944,1410744319,RS +1410736128,1410739967,RS +1410739968,1410740479,XK +1410740480,1410744319,RS 1410744320,1410752511,FR 1410752512,1410760703,NL 1410760704,1410768895,RU @@ -18617,15 +20683,7 @@ 1410834432,1410842623,PL 1410842624,1410850815,PT 1410850816,1410859007,DE -1410859008,1410972159,NL -1410972160,1410972415,DE -1410972416,1410972671,NL -1410972672,1410972927,DE -1410972928,1410973439,NL -1410973440,1410973695,DE -1410973696,1410975487,NL -1410975488,1410975743,DE -1410975744,1411383295,NL +1410859008,1411383295,NL 1411383296,1411448831,LT 1411448832,1411449727,IT 1411449728,1411449791,DE @@ -18672,8 +20730,11 @@ 1411899392,1411901439,ES 1411901440,1411903487,IE 1411903488,1411907583,RU +1411907584,1411911679,GB 1411911680,1411915775,US +1411915776,1411919871,GB 1411919872,1411921919,DE +1411922432,1411923967,GB 1411923968,1411940351,BG 1411940352,1411973119,PL 1411973120,1411999743,SI @@ -18729,11 +20790,9 @@ 1412939776,1412956159,CH 1412956160,1413480447,DE 1413480448,1414004735,IN -1414004736,1414036607,CH -1414036608,1414036991,DE -1414036992,1414039551,CH -1414039552,1414040575,DE -1414040576,1414069218,CH +1414004736,1414039551,CH +1414039552,1414040191,DE +1414040192,1414069218,CH 1414069219,1414069219,AT 1414069220,1414094847,CH 1414094848,1414095615,DE @@ -18747,9 +20806,7 @@ 1415577600,1416101887,FR 1416101888,1416364031,NL 1416364032,1416626175,IL -1416626176,1416876287,AT -1416876288,1416876543,CH -1416876544,1416941567,AT +1416626176,1416941567,AT 1416941568,1416943615,CH 1416943616,1416944639,AT 1416944640,1416945663,CZ @@ -18758,61 +20815,7 @@ 1417019392,1417150463,DE 1417150464,1417674751,ES 1417674752,1421869055,DE -1421869056,1421886975,BE -1421886976,1421887743,NL -1421887744,1421888511,BE -1421888512,1421888767,NL -1421888768,1421889279,BE -1421889280,1421889791,NL -1421889792,1421890047,BE -1421890048,1421890303,NL -1421890304,1421893119,BE -1421893120,1421893631,NL -1421893632,1421894143,BE -1421894144,1421894399,NL -1421894400,1421894783,BE -1421894784,1421894911,NL -1421894912,1421896063,BE -1421896064,1421896703,NL -1421896704,1421896831,BE -1421896832,1421896959,NL -1421896960,1421897727,BE -1421897728,1421898239,NL -1421898240,1421899263,BE -1421899264,1421899519,NL -1421899520,1421900543,BE -1421900544,1421900799,NL -1421900800,1421959679,BE -1421959680,1421959807,NL -1421959808,1421959935,BE -1421959936,1421960191,NL -1421960192,1422022143,BE -1422022144,1422022399,NL -1422022400,1422082559,BE -1422082560,1422083071,NL -1422083072,1422084223,BE -1422084224,1422084351,NL -1422084352,1422085119,BE -1422085120,1422085375,NL -1422085376,1422085887,BE -1422085888,1422086143,NL -1422086144,1422087679,BE -1422087680,1422088191,NL -1422088192,1422088447,BE -1422088448,1422088703,NL -1422088704,1422088959,BE -1422088960,1422089215,NL -1422089216,1422089471,BE -1422089472,1422089727,NL -1422089728,1422095743,BE -1422095744,1422095871,NL -1422095872,1422128639,BE -1422128640,1422129151,NL -1422129152,1422132479,BE -1422132480,1422132735,NL -1422132736,1422289663,BE -1422289664,1422289791,NL -1422289792,1422393343,BE +1421869056,1422393343,BE 1422393344,1422413567,DE 1422413568,1422413695,AT 1422413696,1422413727,US @@ -18838,10 +20841,10 @@ 1422786560,1422852095,HU 1422857088,1422857151,FR 1422910208,1422910463,NL +1422911232,1422911487,NL 1422916608,1422916863,GB 1422917120,1422917343,GB 1422917344,1422917375,NL -1422917376,1422917631,GB 1422917632,1423441919,NO 1423441920,1423704063,SE 1423704064,1423966207,IT @@ -18858,21 +20861,27 @@ 1424503716,1424523263,ES 1424523264,1424556031,RO 1424556032,1424588799,EG -1424588800,1424592639,GB -1424592640,1424592895,FR -1424592896,1424595711,GB -1424595712,1424595967,IT -1424595968,1424597069,GB +1424588800,1424595743,GB +1424595744,1424595751,IT +1424595752,1424597069,GB 1424597070,1424597070,CZ -1424597071,1424600575,GB -1424600576,1424600831,FR -1424600832,1424602879,GB -1424602880,1424603135,US -1424603136,1424604975,GB -1424604976,1424604983,NL -1424604984,1424607743,GB +1424597071,1424603023,GB +1424603024,1424603039,US +1424603040,1424604975,GB +1424604976,1424604991,NL +1424604992,1424607743,GB 1424607744,1424607775,DE -1424607776,1424617215,GB +1424607776,1424608083,GB +1424608084,1424608087,FR +1424608088,1424610643,GB +1424610644,1424610644,PL +1424610645,1424610992,GB +1424610993,1424610993,FR +1424610994,1424611002,GB +1424611003,1424611003,FR +1424611004,1424611005,GB +1424611006,1424611006,FR +1424611007,1424617215,GB 1424617216,1424617231,IT 1424617232,1424621567,GB 1424621568,1424625663,PL @@ -18963,17 +20972,12 @@ 1425485312,1425489407,RO 1425489408,1425489663,NL 1425489664,1425506303,RO -1425506304,1425518847,NO -1425518848,1425518975,RU -1425518976,1425522687,NO +1425506304,1425522687,NO 1425522688,1425539071,IT 1425539072,1425801215,FI -1425801216,1425813759,BG -1425813760,1425814015,MK -1425814016,1425814271,BG -1425814272,1425814527,MK +1425801216,1425813503,BG +1425813504,1425814527,MK 1425814528,1425817599,BG -1425820160,1425820415,DE 1425833984,1425850367,RU 1425850368,1425866751,GB 1425866752,1425883135,CH @@ -18984,7 +20988,8 @@ 1425948672,1425965055,DE 1425965056,1425970175,IT 1425970176,1425970431,FR -1425970432,1425980415,IT +1425970432,1425977343,IT +1425977344,1425980415,FR 1425980416,1425980671,IQ 1425980672,1425981439,IT 1425981440,1425997823,RU @@ -18992,17 +20997,7 @@ 1426014208,1426030591,DK 1426030592,1426046975,BH 1426046976,1426063359,SI -1426063360,1426094335,CH -1426094336,1426094591,DE -1426094592,1426112511,CH -1426112512,1426112767,DE -1426112768,1426118271,CH -1426118272,1426118399,DE -1426118400,1426168575,CH -1426168576,1426168831,DE -1426168832,1426175999,CH -1426176000,1426176255,DE -1426176256,1426587647,CH +1426063360,1426587647,CH 1426587648,1426604031,SE 1426604032,1426620415,DE 1426636800,1426653183,GB @@ -19026,9 +21021,7 @@ 1426915328,1426931711,AT 1426931712,1426948095,CZ 1426948096,1426964479,DE -1426964480,1426967287,GB -1426967288,1426967295,ES -1426967296,1426980863,GB +1426964480,1426980863,GB 1426980864,1426997247,BG 1426997248,1427013631,PL 1427013632,1427030015,FR @@ -19082,7 +21075,9 @@ 1427832832,1427865599,BE 1427865600,1427898367,DK 1427898368,1427914751,RU -1427914752,1427931135,BE +1427914752,1427930965,BE +1427930966,1427930966,LU +1427930967,1427931135,BE 1427931136,1427947519,PL 1427947520,1427963903,RU 1427963904,1427980287,TR @@ -19142,7 +21137,9 @@ 1431953408,1431961599,DK 1431961600,1431969791,CH 1431969792,1431977983,GB -1431977984,1431986175,NL +1431977984,1431980719,NL +1431980720,1431980727,SA +1431980728,1431986175,NL 1431986176,1431994367,RU 1431994368,1432002559,AT 1432002560,1432010751,HU @@ -19219,12 +21216,8 @@ 1433615028,1433615028,GB 1433615029,1433615359,DE 1433615360,1433615615,FR -1433615616,1433615871,GB -1433615872,1433616127,CH -1433616128,1433616383,GB -1433616384,1433621759,AE -1433621760,1433622015,IN -1433622016,1433624575,AE +1433615616,1433616383,GB +1433616384,1433624575,AE 1433624576,1433632767,LV 1433632768,1433640959,GI 1433640960,1433649151,RU @@ -19266,9 +21259,9 @@ 1433860096,1433862143,DE 1433862144,1433864191,CH 1433864192,1433866239,HU -1433866240,1433867519,NL -1433867520,1433867775,GB -1433867776,1433868287,NL +1433866240,1433867521,NL +1433867522,1433867522,GB +1433867523,1433868287,NL 1433868288,1433870335,GB 1433870336,1433872383,TR 1433872384,1433874431,IT @@ -19310,9 +21303,7 @@ 1434615808,1434648575,IL 1434648576,1434681343,FI 1434681344,1434714111,DE -1434714112,1434717951,AZ -1434717952,1434718207,GB -1434718208,1434746879,AZ +1434714112,1434746879,AZ 1434746880,1434779647,CZ 1434779648,1434812415,GB 1434812416,1434845183,IR @@ -19354,9 +21345,7 @@ 1436464384,1436464639,AT 1436464640,1436465151,DE 1436465152,1436467199,RU -1436467200,1436468223,DE -1436468224,1436468479,AT -1436468480,1436469247,DE +1436467200,1436469247,DE 1436469248,1436471295,NL 1436471296,1436473343,BE 1436473344,1436475391,RO @@ -19453,15 +21442,15 @@ 1439055872,1439072255,RU 1439072256,1439088639,UA 1439088640,1439105023,PL -1439105024,1439121407,AT +1439105024,1439106559,AT +1439106560,1439106815,DE +1439106816,1439121407,AT 1439121408,1439154175,DE 1439154176,1439156106,GB 1439156107,1439156108,LB 1439156109,1439170559,GB 1439170560,1439236095,NO -1439236096,1439261439,BE -1439261440,1439261695,FR -1439261696,1439301631,BE +1439236096,1439301631,BE 1439301632,1439305727,RU 1439305728,1439309823,DK 1439309824,1439318015,PL @@ -19511,7 +21500,7 @@ 1439561728,1439562239,GB 1439562240,1439562751,IE 1439562752,1439563007,DE -1439563008,1439563263,IT +1439563008,1439563263,GB 1439563264,1439563775,DE 1439563776,1439629311,LT 1439629312,1439694847,CZ @@ -19532,8 +21521,7 @@ 1440645120,1440669695,RS 1440669696,1440671743,NL 1440671744,1440672767,EE -1440672768,1440673791,RS -1440673792,1440710655,NL +1440672768,1440710655,NL 1440710656,1440743423,UA 1440743424,1441267711,SE 1441267712,1441275903,DE @@ -19558,9 +21546,9 @@ 1441439744,1441447935,LV 1441447936,1441456127,BE 1441456128,1441464319,NL -1441464320,1441468927,SE -1441468928,1441469183,DK -1441469184,1441472511,SE +1441464320,1441470463,SE +1441470464,1441470719,DK +1441470720,1441472511,SE 1441472512,1441480703,RU 1441480704,1441488895,TR 1441488896,1441497087,GB @@ -19620,9 +21608,7 @@ 1442709504,1442775039,LV 1442775040,1442779135,PL 1442779136,1442783231,DE -1442783232,1442786559,NO -1442786560,1442786815,LV -1442786816,1442787327,NO +1442783232,1442787327,NO 1442787328,1442791423,LT 1442791424,1442795519,LV 1442799616,1442803711,LT @@ -19637,11 +21623,7 @@ 1442832384,1442836479,GB 1442836480,1442840575,PL 1442840576,1444937727,GB -1444937728,1444985599,AT -1444985600,1444985855,DE -1444985856,1445061631,AT -1445061632,1445061887,DE -1445061888,1445068799,AT +1444937728,1445068799,AT 1445068800,1445199871,RO 1445199872,1445330943,QA 1445330944,1445396479,LT @@ -19653,14 +21635,13 @@ 1446182912,1446248447,SA 1446248448,1446313983,DK 1446313984,1446445055,GB -1446445056,1446510591,RO +1446445056,1446510591,IR 1446510592,1446543359,DE 1446543360,1446576127,AT 1446576128,1446608895,IR 1446608896,1446641663,BY 1446641664,1446674431,SI -1446674432,1446707135,DK -1446707136,1446707199,NO +1446674432,1446707199,DK 1446707200,1446739967,AT 1446739968,1446772735,HU 1446772736,1446805503,SA @@ -19683,7 +21664,9 @@ 1449459712,1449525247,HU 1449525248,1449590783,RU 1449590784,1449656319,DE -1449656320,1449706495,RO +1449656320,1449664511,RO +1449664512,1449668607,IR +1449668608,1449706495,RO 1449706496,1449707519,MD 1449707520,1449736191,RO 1449736192,1449738239,MD @@ -19699,13 +21682,16 @@ 1449824256,1449826303,MD 1449826304,1449840639,RO 1449840640,1449852927,MD -1449852928,1449869311,RO +1449852928,1449857023,IR +1449857024,1449869311,RO 1449869312,1449870335,MD 1449870336,1449883647,RO 1449883648,1449885695,BE 1449885696,1449893887,RO 1449893888,1449895935,MD -1449895936,1449918463,RO +1449895936,1449906175,RO +1449906176,1449910271,IR +1449910272,1449918463,RO 1449918464,1449951231,JO 1449951232,1449983999,TR 1449984000,1449992191,NL @@ -19769,19 +21755,13 @@ 1466097664,1466099711,ES 1466099712,1466101759,PL 1466101760,1466103807,DE -1466103808,1466104116,FR -1466104117,1466104117,GB -1466104118,1466104442,FR -1466104443,1466104443,GB -1466104444,1466104467,FR -1466104468,1466104468,GB -1466104469,1466104942,FR +1466103808,1466104575,GB +1466104576,1466104942,FR 1466104943,1466104943,BE 1466104944,1466105173,FR 1466105174,1466105174,BE 1466105175,1466105343,FR -1466105344,1466105599,GB -1466105600,1466105855,FR +1466105344,1466105855,GB 1466105856,1466122239,PL 1466122240,1466130431,LV 1466130432,1466138623,PL @@ -19803,7 +21783,9 @@ 1466499072,1466564607,PL 1466564608,1466571894,DE 1466571895,1466571895,AE -1466571896,1466589183,DE +1466571896,1466588785,DE +1466588786,1466588786,FR +1466588787,1466589183,DE 1466589184,1466590207,FR 1466590208,1466591999,GB 1466592000,1466613759,DE @@ -19946,12 +21928,7 @@ 1475211264,1475213311,DE 1475213312,1475215359,FR 1475215360,1475223551,IT -1475223552,1475226239,SE -1475226240,1475226367,NO -1475226368,1475226495,SE -1475226496,1475227647,NO -1475227648,1475231743,SE -1475231744,1475233791,NO +1475223552,1475233791,NO 1475233792,1475235839,GB 1475235840,1475237887,IE 1475237888,1475239935,ES @@ -19969,7 +21946,9 @@ 1475260416,1475262463,FR 1475262464,1475266559,DE 1475266560,1475268607,GB -1475268608,1475270655,RS +1475268608,1475268863,RS +1475268864,1475269119,XK +1475269120,1475270655,RS 1475270656,1475272703,GB 1475272704,1475274751,BE 1475274752,1475276799,RU @@ -20022,23 +22001,13 @@ 1475575808,1475592191,AT 1475592192,1475608575,GB 1475608576,1475624959,RU -1475624960,1475637303,JE -1475637304,1475637311,GB -1475637312,1475637471,JE -1475637472,1475637479,GB -1475637480,1475638783,JE +1475624960,1475638783,JE 1475638784,1475639039,GB 1475639040,1475639391,JE 1475639392,1475639399,GB 1475639400,1475639479,JE 1475639480,1475639487,GB -1475639488,1475639559,JE -1475639560,1475639567,GB -1475639568,1475639583,JE -1475639584,1475639591,GB -1475639592,1475639695,JE -1475639696,1475639703,GB -1475639704,1475641343,JE +1475639488,1475641343,JE 1475641344,1475657727,UA 1475657728,1475674111,SK 1475674112,1475690495,DE @@ -20049,10 +22018,8 @@ 1475724868,1475724869,GB 1475724870,1475724870,RU 1475724871,1475725055,GB -1475725056,1475725311,RU -1475725312,1475726079,GB -1475726080,1475726335,RU -1475726336,1475729663,GB +1475725056,1475725183,RU +1475725184,1475729663,GB 1475729664,1475729671,UA 1475729672,1475731007,GB 1475731008,1475731071,UA @@ -20184,7 +22151,8 @@ 1481741568,1481741568,GG 1481741569,1481741823,GB 1481741824,1481742079,GG -1481742080,1481744383,GB +1481742080,1481744127,GB +1481744128,1481744383,GG 1481744384,1481752575,IT 1481752576,1481760767,RU 1481760768,1481768959,UA @@ -20244,19 +22212,7 @@ 1482948608,1483210751,CZ 1483210752,1483735039,GB 1483735040,1483997183,FI -1483997184,1484044287,AT -1484044288,1484044543,DE -1484044544,1484049911,AT -1484049912,1484049915,DE -1484049916,1484049921,AT -1484049922,1484049922,DE -1484049923,1484084607,AT -1484084608,1484084735,DE -1484084736,1484084991,AT -1484084992,1484085119,DE -1484085120,1484088831,AT -1484088832,1484089087,DE -1484089088,1484128255,AT +1483997184,1484128255,AT 1484128256,1484259327,LT 1484259328,1484783615,FR 1484783616,1484849151,DE @@ -20270,9 +22226,7 @@ 1485250560,1485254655,IR 1485254656,1485259007,RU 1485259008,1485262847,UA -1485262848,1485263615,RU -1485263616,1485263871,UA -1485263872,1485266943,RU +1485262848,1485266943,RU 1485266944,1485271039,RO 1485271040,1485275135,UA 1485275136,1485283327,LV @@ -20356,13 +22310,18 @@ 1489644032,1489644287,IT 1489644288,1489644543,FR 1489644544,1489644799,IQ -1489644800,1489648383,IT +1489644800,1489647615,IT +1489647616,1489648383,FR 1489648384,1489648639,GR 1489648640,1489649663,IT 1489649664,1489650687,FR -1489650688,1489660159,IT -1489660160,1489660415,LY -1489660416,1489666047,IT +1489650688,1489651199,IT +1489651200,1489653247,FR +1489653248,1489655295,IT +1489655296,1489655551,GR +1489655552,1489659647,IT +1489659648,1489661951,FR +1489661952,1489666047,IT 1489666048,1489674239,GB 1489674240,1489676287,NL 1489676288,1489698815,GB @@ -20379,35 +22338,26 @@ 1490028544,1490029055,UA 1490029056,1490042879,NL 1490042880,1490053375,CZ -1490053376,1490053631,PL -1490053632,1490059263,CZ +1490053376,1490054143,PL +1490054144,1490059263,CZ 1490059264,1490075647,DE 1490075648,1490092031,GB 1490092032,1490108415,DE 1490108416,1490124799,MC 1490124800,1490141183,HU 1490141184,1490142719,CZ -1490142720,1490143231,HU -1490143232,1490143999,CZ -1490144000,1490144255,HU -1490144256,1490146559,CZ -1490146560,1490146815,HU -1490146816,1490148863,CZ -1490148864,1490149119,HU -1490149120,1490151679,CZ -1490151680,1490151935,HU -1490151936,1490153983,CZ -1490153984,1490154239,HU -1490154240,1490154495,CZ -1490154496,1490154751,HU -1490154752,1490157567,CZ +1490142720,1490142975,HU +1490142976,1490145279,CZ +1490145280,1490147327,HU +1490147328,1490149375,CZ +1490149376,1490150399,HU +1490150400,1490155519,CZ +1490155520,1490157567,HU 1490157568,1490173951,RU 1490173952,1490190335,PT 1490190336,1490196991,GB 1490196992,1490197247,IE -1490197248,1490205183,GB -1490205184,1490205439,LY -1490205440,1490206719,GB +1490197248,1490206719,GB 1490206720,1490223103,GE 1490223104,1490255871,GB 1490255872,1490272255,NL @@ -20451,32 +22401,32 @@ 1491075072,1493172223,TR 1493172224,1493303295,DE 1493303296,1493430527,FR -1493430528,1493430783,GP -1493430784,1493431039,FR -1493431040,1493431551,GP -1493431552,1493431807,FR -1493431808,1493432319,GP -1493432320,1493434111,MQ -1493434112,1493434367,FR +1493430528,1493431039,GP +1493431040,1493431807,FR +1493431808,1493432063,GP +1493432064,1493433087,FR +1493433088,1493433855,MQ +1493433856,1493434111,FR +1493434112,1493434367,MQ 1493434368,1493565439,SA 1493565440,1493696511,ES 1493696512,1493958655,NO 1493958656,1494220799,DE -1494220800,1494221823,FR -1494221824,1494222335,RE +1494220800,1494222079,FR +1494222080,1494222335,RE 1494222336,1494222591,FR 1494222592,1494222847,RE -1494222848,1494223615,FR -1494223616,1494223871,RE -1494223872,1494225407,FR +1494222848,1494223359,FR +1494223360,1494223615,RE +1494223616,1494223871,FR +1494223872,1494224127,RE +1494224128,1494224895,FR +1494224896,1494225151,GP +1494225152,1494225407,FR 1494225408,1494225663,GP -1494225664,1494226687,FR -1494226688,1494226943,GP -1494226944,1494227455,FR -1494227456,1494227967,GP -1494227968,1494228479,FR -1494228480,1494228735,GP -1494228736,1494228991,FR +1494225664,1494227711,FR +1494227712,1494227967,GP +1494227968,1494228991,FR 1494228992,1494237183,RU 1494237184,1494245375,IE 1494245376,1494253567,RU @@ -20645,13 +22595,19 @@ 1495517184,1495518207,MD 1495518208,1495571455,RO 1495571456,1495572479,MD -1495572480,1495608319,RO +1495572480,1495597055,RO +1495597056,1495601151,IR +1495601152,1495608319,RO 1495608320,1495609343,MD 1495609344,1495623679,RO 1495623680,1495623935,MD -1495623936,1495670783,RO +1495623936,1495632127,RO +1495632128,1495632639,MD +1495632640,1495670783,RO 1495670784,1495671807,MD -1495671808,1495678975,RO +1495671808,1495672831,RO +1495672832,1495674879,ES +1495674880,1495678975,RO 1495678976,1495679999,MD 1495680000,1495682047,RO 1495682048,1495683071,MD @@ -20667,9 +22623,12 @@ 1495756800,1495758847,MD 1495758848,1495759871,RO 1495759872,1495760127,MD -1495760128,1495762943,RO +1495760128,1495760895,RO +1495760896,1495762943,DE 1495762944,1495764991,MD -1495764992,1495782655,RO +1495764992,1495771135,RO +1495771136,1495772159,PL +1495772160,1495782655,RO 1495782656,1495782911,GB 1495782912,1495790079,RO 1495790080,1495790335,MD @@ -20691,13 +22650,16 @@ 1495957504,1495958527,MD 1495958528,1495966719,RO 1495966720,1495967743,MD -1495967744,1495970815,RO +1495967744,1495968767,NL +1495968768,1495970815,RO 1495970816,1495971839,MD 1495971840,1495982079,RO 1495982080,1495983103,MD 1495983104,1495986175,RO 1495986176,1495988223,MD -1495988224,1496004607,RO +1495988224,1495990271,RO +1495990272,1495994367,IR +1495994368,1496004607,RO 1496004608,1496005631,MD 1496005632,1496018943,RO 1496018944,1496020991,MD @@ -20717,7 +22679,9 @@ 1496121344,1496122367,MD 1496122368,1496131583,RO 1496131584,1496132607,MD -1496132608,1496197119,RO +1496132608,1496133631,RO +1496133632,1496137727,IR +1496137728,1496197119,RO 1496197120,1496197631,MD 1496197632,1496228863,RO 1496228864,1496229887,MD @@ -20736,13 +22700,7 @@ 1499594752,1499725823,NL 1499725824,1499856895,IE 1499856896,1499987967,CZ -1499987968,1499989247,AT -1499989248,1499989503,HU -1499989504,1499990911,AT -1499990912,1499991039,HU -1499991040,1499992575,AT -1499992576,1499992831,HU -1499992832,1499996159,AT +1499987968,1499996159,AT 1499996160,1500004351,GB 1500004352,1500020735,RU 1500020736,1500028927,IS @@ -20818,11 +22776,7 @@ 1500479488,1500495871,RU 1500495872,1500512255,BA 1500512256,1500643327,RU -1500643328,1500661247,PT -1500661248,1500661503,RO -1500661504,1500667647,PT -1500667648,1500667903,RO -1500667904,1500774399,PT +1500643328,1500774399,PT 1500774400,1500905471,LT 1500905472,1501036543,IT 1501036544,1501298687,RO @@ -20863,8 +22817,10 @@ 1502937088,1502953471,RO 1502953472,1502969855,MD 1502969856,1502975231,FR -1502975232,1502975487,GB -1502975488,1502975743,FR +1502975232,1502975247,GB +1502975248,1502975327,FR +1502975328,1502975359,GB +1502975360,1502975743,FR 1502975744,1502975999,DE 1502976000,1502978047,FR 1502978048,1502979071,US @@ -20895,7 +22851,9 @@ 1503084544,1503100927,GB 1503100928,1503117311,RU 1503117312,1503133695,NO -1503133696,1503395839,PT +1503133696,1503370138,PT +1503370139,1503370139,GB +1503370140,1503395839,PT 1503395840,1503657983,FR 1503657984,1503690751,SE 1503690752,1503723519,IS @@ -21075,9 +23033,7 @@ 1503905648,1503905655,IT 1503905656,1503905663,AT 1503905664,1503920127,DE -1503920128,1503985151,HR -1503985152,1503985407,DE -1503985408,1503985663,HR +1503920128,1503985663,HR 1503985664,1504018431,IR 1504018432,1504051199,RO 1504051200,1504083967,FI @@ -21111,9 +23067,7 @@ 1505304576,1505312767,FR 1505312768,1505320959,RU 1505320960,1505329151,AT -1505329152,1505335807,IE -1505335808,1505336063,GB -1505336064,1505336575,IE +1505329152,1505336575,IE 1505336576,1505336831,GB 1505336832,1505337343,IE 1505337344,1505345535,FR @@ -21164,32 +23118,12 @@ 1505705984,1505714175,DE 1505714176,1505722367,LV 1505722368,1505738751,PL -1505738752,1505740543,GB -1505740544,1505740607,IL -1505740608,1505740631,GB -1505740632,1505740799,IL -1505740800,1505746943,GB +1505738752,1505746943,GB 1505746944,1505755135,RU 1505755136,1506017279,GB 1506017280,1506082815,IR 1506082816,1506148351,GB -1506148352,1506218751,IR -1506218752,1506219007,DE -1506219008,1506219263,IR -1506219264,1506219519,DE -1506219520,1506219775,IR -1506219776,1506220031,DE -1506220032,1506261759,IR -1506261760,1506262783,DE -1506262784,1506265343,IR -1506265344,1506267135,DE -1506267136,1506270207,IR -1506270208,1506271231,DE -1506271232,1506274303,IR -1506274304,1506274559,DE -1506274560,1506274815,IR -1506274816,1506275071,DE -1506275072,1506279423,IR +1506148352,1506279423,IR 1506279424,1506312191,NL 1506312192,1506316287,GB 1506316288,1506322431,PL @@ -21224,15 +23158,21 @@ 1506450864,1506450879,CZ 1506450880,1506453311,GB 1506453312,1506453319,SE -1506453320,1506456831,GB -1506456832,1506457087,IT -1506457088,1506458244,GB +1506453320,1506456533,GB +1506456534,1506456534,IT +1506456535,1506458244,GB 1506458245,1506458245,CH -1506458246,1506460151,GB +1506458246,1506459968,GB +1506459969,1506459969,FR +1506459970,1506460151,GB 1506460152,1506460159,FR -1506460160,1506462719,GB +1506460160,1506462511,GB +1506462512,1506462527,FR +1506462528,1506462719,GB 1506462720,1506462975,IT -1506462976,1506463679,GB +1506462976,1506463551,GB +1506463552,1506463615,DE +1506463616,1506463679,GB 1506463680,1506463695,DE 1506463696,1506464895,GB 1506464896,1506464911,NL @@ -21241,8 +23181,8 @@ 1506465189,1506466383,GB 1506466384,1506466391,DE 1506466392,1506466399,GB -1506466400,1506466431,DE -1506466432,1506469663,GB +1506466400,1506466559,DE +1506466560,1506469663,GB 1506469664,1506469695,IT 1506469696,1506469759,GB 1506469760,1506469775,IT @@ -21250,11 +23190,7 @@ 1506471984,1506471999,NL 1506472000,1506472031,GB 1506472032,1506472047,NL -1506472048,1506473471,GB -1506473472,1506473727,IT -1506473728,1506474239,GB -1506474240,1506474495,IT -1506474496,1506476031,GB +1506472048,1506476031,GB 1506476032,1506508799,KW 1506508800,1506541567,CZ 1506541568,1506574335,RU @@ -21302,9 +23238,9 @@ 1507262464,1507327999,BG 1507328000,1507393535,RS 1507393536,1507459071,CH -1507459072,1507502847,KZ -1507502848,1507503103,GB -1507503104,1507524607,KZ +1507459072,1507483903,KZ +1507483904,1507484159,NZ +1507484160,1507524607,KZ 1507524608,1507590143,EE 1507590144,1507655679,NL 1507655680,1507659775,DE @@ -21346,15 +23282,13 @@ 1508589568,1508605951,IR 1508605952,1508622335,RU 1508622336,1508638719,EE -1508638720,1508639999,SE -1508640000,1508640255,DK -1508640256,1508642175,SE +1508638720,1508642175,SE 1508642176,1508642303,DK 1508642304,1508642559,SE 1508642560,1508642815,DK -1508642816,1508650751,SE -1508650752,1508651007,DK -1508651008,1508655103,SE +1508642816,1508647691,SE +1508647692,1508647692,DK +1508647693,1508655103,SE 1508655104,1508671487,FI 1508671488,1508687871,CH 1508687872,1508704255,UZ @@ -21365,9 +23299,7 @@ 1508769792,1508786175,PL 1508786176,1508802559,DE 1508802560,1508818943,GB -1508818944,1508819711,RO -1508819712,1508819967,DE -1508819968,1508830719,RO +1508818944,1508830719,RO 1508830720,1508831487,SK 1508831488,1508835327,RO 1508835328,1508851711,CZ @@ -21385,9 +23317,7 @@ 1509449728,1509453823,ES 1509453824,1509457919,RU 1509457920,1509462015,NL -1509462016,1509465599,LI -1509465600,1509465855,CH -1509465856,1509466111,LI +1509462016,1509466111,LI 1509466112,1509470207,NL 1509470208,1509478399,RU 1509478400,1509482495,FR @@ -21448,230 +23378,354 @@ 1509883904,1509900287,NL 1509900288,1509916671,RU 1509916672,1509933055,GB -1509933056,1509949439,US -1509949440,1510663167,FR -1510663168,1510663423,RE -1510663424,1511981055,FR -1511981056,1511981567,RE -1511981568,1511982591,FR -1511982592,1511983615,RE -1511983616,1511984639,FR -1511984640,1511985151,RE -1511985152,1511985407,FR -1511985408,1511986175,RE -1511986176,1511986431,FR -1511986432,1511986687,RE -1511986688,1511986943,FR -1511986944,1511987199,RE -1511987200,1511987967,FR -1511987968,1511988479,RE -1511988480,1511988735,FR -1511988736,1511989247,RE -1511989248,1511989503,FR -1511989504,1511990271,RE -1511990272,1511990527,FR -1511990528,1511991295,RE -1511991296,1511991551,FR -1511991552,1511992575,RE -1511992576,1511993087,FR -1511993088,1511994367,RE -1511994368,1511995135,FR -1511995136,1511995391,RE -1511995392,1511995647,FR -1511995648,1511996415,RE -1511996416,1511996671,FR -1511996672,1511996927,RE -1511996928,1511997439,FR -1511997440,1511998207,MQ -1511998208,1511998463,FR -1511998464,1511998719,MQ -1511998720,1511998975,FR -1511998976,1511999487,MQ -1511999488,1511999743,FR -1511999744,1512001023,MQ -1512001024,1512001535,FR -1512001536,1512003583,MQ -1512003584,1512003839,FR -1512003840,1512004095,MQ -1512004096,1512004351,FR -1512004352,1512005631,MQ -1512005632,1512006143,BL -1512006144,1512006399,FR -1512006400,1512006911,BL -1512006912,1512007167,MF -1512007168,1512007423,FR -1512007424,1512007935,BL -1512007936,1512008191,FR -1512008192,1512008447,BL -1512008448,1512008703,MF -1512008704,1512009215,BL -1512009216,1512009471,MF -1512009472,1512010239,BL -1512010240,1512010495,GP -1512010496,1512010751,BL -1512010752,1512011263,MF -1512011264,1512012287,BL -1512012288,1512012543,FR -1512012544,1512013055,BL -1512013056,1512013311,FR -1512013312,1512013567,BL -1512013568,1512013823,FR -1512013824,1512016639,GF -1512016640,1512016895,FR -1512016896,1512018943,GF -1512018944,1512019199,FR -1512019200,1512020479,GF -1512020480,1512022015,FR -1512022016,1512022271,GF -1512022272,1512022527,FR -1512022528,1512028415,GF -1512028416,1512030207,FR +1509933056,1509949439,NL +1509949440,1510605311,FR +1510605312,1510605823,RE +1510605824,1510608383,FR +1510608384,1510608639,RE +1510608640,1510609407,FR +1510609408,1510610175,RE +1510610176,1510614015,FR +1510614016,1510614783,RE +1510614784,1510615039,FR +1510615040,1510615295,RE +1510615296,1510615551,FR +1510615552,1510616319,RE +1510616320,1510616575,FR +1510616576,1510616831,RE +1510616832,1510617087,FR +1510617088,1510617599,RE +1510617600,1510617855,FR +1510617856,1510619135,RE +1510619136,1510619391,FR +1510619392,1510620159,RE +1510620160,1510621695,FR +1510621696,1510621951,RE +1510621952,1510622463,FR +1510622464,1510622719,RE +1510622720,1510624511,FR +1510624512,1510624767,RE +1510624768,1510625791,FR +1510625792,1510626303,RE +1510626304,1510626815,FR +1510626816,1510627071,RE +1510627072,1510628351,FR +1510628352,1510628607,RE +1510628608,1510628863,FR +1510628864,1510629119,RE +1510629120,1510629631,FR +1510629632,1510629887,RE +1510629888,1510630399,FR +1510630400,1510630655,RE +1510630656,1510631167,FR +1510631168,1510631423,RE +1510631424,1510631935,FR +1510631936,1510632703,RE +1510632704,1510632959,FR +1510632960,1510633727,RE +1510633728,1510633983,FR +1510633984,1510635263,RE +1510635264,1510637567,FR +1510637568,1510638079,RE +1510638080,1510638335,FR +1510638336,1510638591,RE +1510638592,1510638847,FR +1510638848,1510639359,RE +1510639360,1510639871,FR +1510639872,1510640127,RE +1510640128,1510640383,FR +1510640384,1510641151,RE +1510641152,1510641407,FR +1510641408,1510641919,RE +1510641920,1510642431,FR +1510642432,1510642943,RE +1510642944,1510643455,FR +1510643456,1510643711,RE +1510643712,1510644479,FR +1510644480,1510645759,RE +1510645760,1510646015,FR +1510646016,1510646271,RE +1510646272,1510646783,FR +1510646784,1510647295,RE +1510647296,1510647807,FR +1510647808,1510648319,RE +1510648320,1510649343,FR +1510649344,1510649599,RE +1510649600,1510650623,FR +1510650624,1510650879,RE +1510650880,1510651135,FR +1510651136,1510651391,RE +1510651392,1510651647,FR +1510651648,1510652159,RE +1510652160,1510652927,FR +1510652928,1510653439,RE +1510653440,1510654719,FR +1510654720,1510654975,RE +1510654976,1510655487,FR +1510655488,1510656255,RE +1510656256,1510656511,FR +1510656512,1510657023,RE +1510657024,1510658303,FR +1510658304,1510658559,RE +1510658560,1510658815,FR +1510658816,1510659071,RE +1510659072,1510659839,FR +1510659840,1510660095,RE +1510660096,1510660863,FR +1510660864,1510661119,RE +1510661120,1510661375,FR +1510661376,1510661631,RE +1510661632,1510662399,FR +1510662400,1510663423,RE +1510663424,1510663679,FR +1510663680,1510663935,RE +1510663936,1510664447,FR +1510664448,1510664703,RE +1510664704,1510664959,FR +1510664960,1510665215,RE +1510665216,1510665983,FR +1510665984,1510667775,RE +1510667776,1511981567,FR +1511981568,1511982079,RE +1511982080,1511982335,FR +1511982336,1511982591,RE +1511982592,1511984383,FR +1511984384,1511984639,RE +1511984640,1511985151,FR +1511985152,1511985407,RE +1511985408,1511987199,FR +1511987200,1511987711,RE +1511987712,1511990271,FR +1511990272,1511990527,RE +1511990528,1511992575,FR +1511992576,1511992831,RE +1511992832,1511995391,FR +1511995392,1511995647,RE +1511995648,1511996415,FR +1511996416,1511996671,RE +1511996672,1511997183,FR +1511997184,1511997439,RE +1511997440,1511997695,FR +1511997696,1511998463,MQ +1511998464,1512001279,FR +1512001280,1512002047,MQ +1512002048,1512002303,FR +1512002304,1512002559,MQ +1512002560,1512006143,FR +1512006144,1512006399,MF +1512006400,1512006655,FR +1512006656,1512008191,BL +1512008192,1512008703,FR +1512008704,1512008959,BL +1512008960,1512010495,FR +1512010496,1512010751,MF +1512010752,1512011263,FR +1512011264,1512011775,BL +1512011776,1512012287,FR +1512012288,1512012543,BL +1512012544,1512012799,MF +1512012800,1512013055,FR +1512013056,1512013311,BL +1512013312,1512013567,FR +1512013568,1512013823,BL +1512013824,1512014335,FR +1512014336,1512015103,GF +1512015104,1512015615,FR +1512015616,1512016127,GF +1512016128,1512016383,FR +1512016384,1512018175,GF +1512018176,1512018431,FR +1512018432,1512018687,GF +1512018688,1512019711,FR +1512019712,1512019967,GF +1512019968,1512020479,FR +1512020480,1512021503,GF +1512021504,1512021759,FR +1512021760,1512023295,GF +1512023296,1512023551,FR +1512023552,1512023807,GF +1512023808,1512024831,FR +1512024832,1512025087,GF +1512025088,1512025599,FR +1512025600,1512026879,GF +1512026880,1512028159,FR +1512028160,1512030207,GF 1512030208,1512046591,YT -1512046592,1512767487,FR -1512767488,1512767743,RE -1512767744,1512767999,FR -1512768000,1512768255,RE -1512768256,1512768511,FR -1512768512,1512770047,RE -1512770048,1512770303,FR -1512770304,1512770815,RE -1512770816,1512771583,FR -1512771584,1512772351,RE -1512772352,1512772863,FR -1512772864,1512777215,RE -1512777216,1512777471,FR -1512777472,1512778495,RE -1512778496,1512779007,FR -1512779008,1512779519,RE -1512779520,1512780031,FR -1512780032,1512780287,RE -1512780288,1512780543,FR -1512780544,1512781567,RE -1512781568,1512782847,FR -1512782848,1512783103,RE -1512783104,1512783359,FR -1512783360,1512785919,RE -1512785920,1512787199,FR -1512787200,1512787967,RE -1512787968,1512788223,FR -1512788224,1512791807,RE -1512791808,1512793087,FR -1512793088,1512794111,RE -1512794112,1512794367,FR -1512794368,1512794623,RE -1512794624,1512794879,FR -1512794880,1512795135,RE -1512795136,1512795391,FR -1512795392,1512796415,RE -1512796416,1512796671,FR -1512796672,1512797183,RE -1512797184,1512797439,FR -1512797440,1512797695,RE -1512797696,1512797951,FR -1512797952,1512798207,RE -1512798208,1512799231,FR -1512799232,1512799487,RE -1512799488,1512800511,FR -1512800512,1512801023,MQ -1512801024,1512801535,FR -1512801536,1512802303,MQ -1512802304,1512802815,FR -1512802816,1512803071,MQ -1512803072,1512803327,FR -1512803328,1512803839,MQ -1512803840,1512804607,FR -1512804608,1512805375,MQ -1512805376,1512805631,FR -1512805632,1512806399,MQ -1512806400,1512806655,FR -1512806656,1512807423,MQ -1512807424,1512807679,FR -1512807680,1512807935,MQ -1512807936,1512808447,FR -1512808448,1512808959,MQ -1512808960,1512809215,FR -1512809216,1512810495,MQ -1512810496,1512810751,FR -1512810752,1512812543,MQ -1512812544,1512812799,FR -1512812800,1512813311,MQ -1512813312,1512813567,FR -1512813568,1512813823,MQ -1512813824,1512814079,FR -1512814080,1512815615,MQ -1512815616,1512815871,FR -1512815872,1512816639,MQ -1512816640,1512818431,GP -1512818432,1512818687,FR -1512818688,1512819967,GP -1512819968,1512820223,FR -1512820224,1512822271,GP -1512822272,1512822527,FR -1512822528,1512824319,GP -1512824320,1512824831,FR -1512824832,1512826367,GP -1512826368,1512826623,FR -1512826624,1512828671,GP -1512828672,1512828927,FR -1512828928,1512830463,GP -1512830464,1512830719,FR -1512830720,1512831999,GP -1512832000,1512832255,FR -1512832256,1512832767,GP -1512832768,1514110975,FR -1514110976,1514111487,GP -1514111488,1514111743,FR -1514111744,1514112255,GP -1514112256,1514112767,FR -1514112768,1514114047,GP -1514114048,1514114559,FR -1514114560,1514116863,GP -1514116864,1514117119,FR -1514117120,1514117887,GP -1514117888,1514118143,FR -1514118144,1514119423,GP -1514119424,1514119679,FR -1514119680,1514119935,GP -1514119936,1514120191,FR -1514120192,1514121215,GP -1514121216,1514121471,FR -1514121472,1514123007,GP -1514123008,1514123263,FR -1514123264,1514125055,GP -1514125056,1514125823,FR -1514125824,1514126079,GP -1514126080,1514126335,FR -1514126336,1514126591,GP -1514126592,1514127359,FR -1514127360,1514127871,RE -1514127872,1514128127,FR -1514128128,1514128895,RE -1514128896,1514129151,FR -1514129152,1514129919,RE -1514129920,1514130175,FR -1514130176,1514130687,RE -1514130688,1514130943,FR -1514130944,1514131455,RE -1514131456,1514131711,FR -1514131712,1514131967,RE -1514131968,1514132223,FR -1514132224,1514132735,RE -1514132736,1514132991,FR -1514132992,1514134015,RE -1514134016,1514134271,FR -1514134272,1514135295,RE -1514135296,1514135551,FR -1514135552,1514135807,RE -1514135808,1514136063,FR -1514136064,1514136831,RE -1514136832,1514137855,FR -1514137856,1514139391,RE -1514139392,1514139647,FR -1514139648,1514140415,RE -1514140416,1514140671,FR -1514140672,1514142207,RE -1514142208,1514142463,FR -1514142464,1514143743,RE +1512046592,1512308991,FR +1512308992,1512309247,GP +1512309248,1512310271,FR +1512310272,1512310527,GP +1512310528,1512310783,FR +1512310784,1512311295,GP +1512311296,1512311551,FR +1512311552,1512312063,GP +1512312064,1512314367,FR +1512314368,1512314623,GP +1512314624,1512314879,FR +1512314880,1512315391,GP +1512315392,1512315647,FR +1512315648,1512316159,GP +1512316160,1512316415,FR +1512316416,1512316927,GP +1512316928,1512317439,FR +1512317440,1512317951,GP +1512317952,1512318207,FR +1512318208,1512318463,GP +1512318464,1512319231,FR +1512319232,1512319487,GP +1512319488,1512319743,FR +1512319744,1512319999,GP +1512320000,1512320511,FR +1512320512,1512320767,GP +1512320768,1512322047,FR +1512322048,1512322303,GP +1512322304,1512322559,FR +1512322560,1512322815,GP +1512322816,1512323327,FR +1512323328,1512323583,GP +1512323584,1512324095,FR +1512324096,1512324351,GP +1512324352,1512324863,FR +1512324864,1512325119,GP +1512325120,1512325631,FR +1512325632,1512325887,GP +1512325888,1512326399,FR +1512326400,1512326655,GP +1512326656,1512327423,FR +1512327424,1512328191,GP +1512328192,1512329727,FR +1512329728,1512330239,GP +1512330240,1512330495,FR +1512330496,1512332287,GP +1512332288,1512332799,FR +1512332800,1512333311,GP +1512333312,1512334079,FR +1512334080,1512334335,GP +1512334336,1512334847,FR +1512334848,1512335103,GP +1512335104,1512335359,FR +1512335360,1512335871,GP +1512335872,1512336383,FR +1512336384,1512337151,GP +1512337152,1512338175,FR +1512338176,1512338431,GP +1512338432,1512338943,FR +1512338944,1512339199,GP +1512339200,1512339455,FR +1512339456,1512339711,GP +1512339712,1512340735,FR +1512340736,1512341247,GP +1512341248,1512341503,FR +1512341504,1512341759,GP +1512341760,1512342271,FR +1512342272,1512342527,GP +1512342528,1512343295,FR +1512343296,1512343551,GP +1512343552,1512344063,FR +1512344064,1512344575,GP +1512344576,1512344831,FR +1512344832,1512345087,GP +1512345088,1512345855,FR +1512345856,1512346111,GP +1512346112,1512346367,FR +1512346368,1512346623,GP +1512346624,1512347391,FR +1512347392,1512347903,GP +1512347904,1512348159,FR +1512348160,1512348927,GP +1512348928,1512349439,FR +1512349440,1512349951,GP +1512349952,1512350463,FR +1512350464,1512350719,GP +1512350720,1512351231,FR +1512351232,1512351487,GP +1512351488,1512351999,FR +1512352000,1512352767,GP +1512352768,1512353535,FR +1512353536,1512354047,GP +1512354048,1512354303,FR +1512354304,1512354559,GP +1512354560,1512354815,FR +1512354816,1512355327,GP +1512355328,1512356095,FR +1512356096,1512356351,GP +1512356352,1512356607,FR +1512356608,1512356863,GP +1512356864,1512357119,FR +1512357120,1512357375,GP +1512357376,1512357631,FR +1512357632,1512357887,GP +1512357888,1512358655,FR +1512358656,1512359167,GP +1512359168,1512359423,FR +1512359424,1512360191,GP +1512360192,1512360447,FR +1512360448,1512361471,GP +1512361472,1512361727,FR +1512361728,1512361983,GP +1512361984,1512362239,FR +1512362240,1512362495,GP +1512362496,1512363007,FR +1512363008,1512363263,GP +1512363264,1512363519,FR +1512363520,1512363775,GP +1512363776,1512364031,FR +1512364032,1512364287,GP +1512364288,1512364543,FR +1512364544,1512366847,GP +1512366848,1512367359,FR +1512367360,1512367615,GP +1512367616,1512368127,FR +1512368128,1512368383,GP +1512368384,1512368639,FR +1512368640,1512368895,GP +1512368896,1512370431,FR +1512370432,1512370441,GP +1512370442,1512370442,FR +1512370443,1512370687,GP +1512370688,1512370943,FR +1512370944,1512372223,GP +1512372224,1512372735,FR +1512372736,1512372991,GP +1512372992,1514111231,FR +1514111232,1514111743,GP +1514111744,1514111999,FR +1514112000,1514112255,GP +1514112256,1514113791,FR +1514113792,1514114047,GP +1514114048,1514114815,FR +1514114816,1514115071,GP +1514115072,1514115583,FR +1514115584,1514115839,GP +1514115840,1514116351,FR +1514116352,1514116607,GP +1514116608,1514119935,FR +1514119936,1514120191,GP +1514120192,1514121215,FR +1514121216,1514121471,GP +1514121472,1514123007,FR +1514123008,1514123263,GP +1514123264,1514124287,FR +1514124288,1514124543,GP +1514124544,1514127871,FR +1514127872,1514128127,RE +1514128128,1514128895,FR +1514128896,1514129407,RE +1514129408,1514131967,FR +1514131968,1514132223,RE +1514132224,1514132735,FR +1514132736,1514132991,RE +1514132992,1514134271,FR +1514134272,1514134527,RE +1514134528,1514136063,FR +1514136064,1514136319,RE +1514136320,1514137599,FR +1514137600,1514137855,RE +1514137856,1514142207,FR +1514142208,1514142719,RE +1514142720,1514142975,FR +1514142976,1514143231,RE +1514143232,1514143743,FR 1514143744,1514176511,SK 1514176512,1515467007,FR 1515467008,1515467263,ES @@ -21688,87 +23742,51 @@ 1515488512,1515488895,US 1515488896,1515489023,FR 1515489024,1515489039,DE -1515489040,1515489151,FR +1515489040,1515489055,FR +1515489056,1515489087,DE +1515489088,1515489151,FR 1515489152,1515489167,ES 1515489168,1518338047,FR 1518338048,1518370815,DE -1518370816,1518403839,NL -1518403840,1518404095,SE -1518404096,1518404351,NL -1518404352,1518404863,SE -1518404864,1518405119,NL -1518405120,1518405375,SE -1518405376,1518406655,NL -1518406656,1518406911,SE -1518406912,1518407935,NL -1518407936,1518408191,SE -1518408192,1518409727,NL -1518409728,1518436351,SE +1518370816,1518409727,NL +1518409728,1518412031,SE +1518412032,1518413567,NO +1518413568,1518413823,SE +1518413824,1518418943,NO +1518418944,1518419199,SE +1518419200,1518419967,NO +1518419968,1518436351,SE 1518436352,1518452735,NO 1518452736,1518460927,AT -1518460928,1518470143,NL -1518470144,1518472191,SE +1518460928,1518471167,NL +1518471168,1518472191,SE 1518472192,1518475263,LT 1518475264,1518476287,SE 1518476288,1518476799,EE 1518476800,1518477311,SE 1518477312,1518481407,EE 1518481408,1518489599,SE -1518489600,1518490623,NL -1518490624,1518493695,SE -1518493696,1518501887,NL +1518489600,1518501887,NL 1518501888,1518503935,EE 1518503936,1518510079,LT 1518510080,1518516223,LV 1518516224,1518517247,SE 1518517248,1518518271,LV -1518518272,1518540543,SE +1518518272,1518532351,SE +1518532352,1518532607,NO +1518532608,1518532863,SE +1518532864,1518533375,NO +1518533376,1518533887,SE +1518533888,1518534143,NO +1518534144,1518540543,SE 1518540544,1518540799,LT -1518540800,1518542847,SE +1518540800,1518541479,SE +1518541480,1518541480,DE +1518541481,1518542847,SE 1518542848,1518551039,LT 1518551040,1518565375,NL 1518565376,1518567423,SE -1518567424,1518568703,LV -1518568704,1518568959,SE -1518568960,1518570239,LV -1518570240,1518570495,SE -1518570496,1518572543,LV -1518572544,1518572799,SE -1518572800,1518573311,LV -1518573312,1518573823,SE -1518573824,1518574335,LV -1518574336,1518574591,SE -1518574592,1518576127,LV -1518576128,1518576383,SE -1518576384,1518577407,LV -1518577408,1518577919,SE -1518577920,1518578687,LV -1518578688,1518578943,SE -1518578944,1518580479,LV -1518580480,1518580735,SE -1518580736,1518582271,LV -1518582272,1518582527,SE -1518582528,1518583039,LV -1518583040,1518583295,SE -1518583296,1518585343,LV -1518585344,1518585599,SE -1518585600,1518585855,LV -1518585856,1518586111,SE -1518586112,1518586623,LV -1518586624,1518586879,SE -1518586880,1518587647,LV -1518587648,1518587903,SE -1518587904,1518591743,LV -1518591744,1518591999,SE -1518592000,1518592255,LV -1518592256,1518592511,SE -1518592512,1518594047,LV -1518594048,1518594303,SE -1518594304,1518594815,LV -1518594816,1518595071,SE -1518595072,1518595327,LV -1518595328,1518595583,SE -1518595584,1518600191,LV +1518567424,1518600191,LV 1518600192,1518633215,SE 1518633216,1518633471,NL 1518633472,1518635007,SE @@ -21784,7 +23802,35 @@ 1518780416,1518796799,HR 1518796800,1518927871,DE 1518927872,1518944255,RU -1518944256,1518960639,SE +1518944256,1518945023,NL +1518945024,1518945535,SE +1518945536,1518946303,NL +1518946304,1518946815,SE +1518946816,1518947327,NL +1518947328,1518948095,SE +1518948096,1518948351,NL +1518948352,1518948863,SE +1518948864,1518949119,NL +1518949120,1518949631,SE +1518949632,1518950911,NL +1518950912,1518951167,SE +1518951168,1518951679,NL +1518951680,1518952191,SE +1518952192,1518954751,NL +1518954752,1518955007,SE +1518955008,1518955775,NL +1518955776,1518956031,SE +1518956032,1518956543,NL +1518956544,1518957311,SE +1518957312,1518957823,NL +1518957824,1518958079,SE +1518958080,1518958591,NL +1518958592,1518958847,SE +1518958848,1518959103,NL +1518959104,1518959359,SE +1518959360,1518959871,NL +1518959872,1518960127,SE +1518960128,1518960639,NL 1518960640,1518961663,LT 1518961664,1518962175,EE 1518962176,1518962687,SE @@ -21792,51 +23838,49 @@ 1518964736,1518966783,HR 1518966784,1518967807,SE 1518967808,1518977023,HR -1518977024,1518993407,SE +1518977024,1518977791,SE +1518977792,1518978559,NL +1518978560,1518979071,SE +1518979072,1518980095,NL +1518980096,1518980607,SE +1518980608,1518980863,NL +1518980864,1518981631,SE +1518981632,1518982143,NL +1518982144,1518982399,SE +1518982400,1518982655,NL +1518982656,1518983935,SE +1518983936,1518984191,NL +1518984192,1518989311,SE +1518989312,1518992127,NL +1518992128,1518992383,SE +1518992384,1518992639,NL +1518992640,1518992895,SE +1518992896,1518993152,NL +1518993153,1518993407,SE 1518993408,1519190015,RU 1519190016,1519206399,SE 1519206400,1519208447,LV 1519208448,1519214591,SE -1519214592,1519214847,LV -1519214848,1519215359,SE -1519215360,1519215615,LV -1519215616,1519215871,SE -1519215872,1519219455,LV +1519214592,1519219455,LV 1519219456,1519219711,SE 1519219712,1519222783,LV 1519222784,1519259647,SE 1519259648,1519260671,NL 1519260672,1519263743,SE -1519263744,1519289343,NL -1519289344,1519292415,SE +1519263744,1519290367,NL +1519290368,1519292415,SE 1519292416,1519293951,LT -1519293952,1519297023,SE -1519297024,1519297279,LT -1519297280,1519297535,SE -1519297536,1519297791,LT -1519297792,1519298559,SE -1519298560,1519298815,LT -1519298816,1519300607,SE +1519293952,1519296511,SE +1519296512,1519299583,LT +1519299584,1519300607,SE 1519300608,1519304703,LT -1519304704,1519313151,SE -1519313152,1519313407,LT -1519313408,1519313663,SE -1519313664,1519313919,LT -1519313920,1519314175,SE -1519314176,1519318271,LT -1519318272,1519318527,SE -1519318528,1519321087,LT +1519304704,1519312895,SE +1519312896,1519321087,LT 1519321088,1519386623,RU 1519386624,1519394815,SE 1519394816,1519398911,HR 1519398912,1519403007,SE -1519403008,1519411711,NL -1519411712,1519411967,SE -1519411968,1519415295,NL -1519415296,1519415551,SE -1519415552,1519416575,NL -1519416576,1519416831,SE -1519416832,1519419391,NL +1519403008,1519419391,NL 1519419392,1519452159,SE 1519452160,1519517695,NL 1519517696,1519583231,AT @@ -21867,19 +23911,13 @@ 1520271360,1520304127,SI 1520304128,1520435199,TR 1520435200,1521483775,ES -1521483776,1521531391,CZ -1521531392,1521531647,PL -1521531648,1522008063,CZ +1521483776,1522008063,CZ 1522008064,1522139135,DK 1522139136,1522270207,DE 1522270208,1522401279,RU 1522401280,1522532351,EE 1522532352,1524629503,GB -1524629504,1525092351,SE -1525092352,1525092479,DK -1525092480,1525122047,SE -1525122048,1525122175,DK -1525122176,1525678079,SE +1524629504,1525678079,SE 1525678080,1526726655,GB 1526726656,1531183103,DE 1531183104,1531445247,FR @@ -21890,9 +23928,7 @@ 1532199936,1532200959,RS 1532200960,1532231679,HU 1532231680,1532362751,GB -1532362752,1532408063,BE -1532408064,1532408319,DE -1532408320,1532493823,BE +1532362752,1532493823,BE 1532493824,1532559359,FR 1532559360,1532624895,DE 1532624896,1532626943,ES @@ -21953,13 +23989,13 @@ 1533472768,1533474815,ES 1533474816,1533476863,FR 1533476864,1533478911,IE -1533478912,1533480959,RS 1533480960,1533483007,NL 1533483008,1533485055,AM 1533485056,1533486079,GB 1533486080,1533486335,SE 1533486336,1533486591,NO -1533486592,1533487103,GB +1533486592,1533486847,DK +1533486848,1533487103,GB 1533487104,1533489151,FR 1533489152,1533491199,ES 1533491200,1533493247,AM @@ -22037,74 +24073,254 @@ 1533929472,1533932799,GB 1533932800,1533933055,DE 1533933056,1534066687,GB -1534066688,1534135295,AT -1534135296,1534135423,HU -1534135424,1534145279,AT -1534145280,1534145407,DE -1534145408,1534147711,AT -1534147712,1534147839,CZ -1534147840,1534156543,AT -1534156544,1534156671,SK -1534156672,1534241535,AT -1534241536,1534241663,DE -1534241664,1534268671,AT -1534268672,1534268927,HU -1534268928,1534279423,AT -1534279424,1534279551,SK -1534279552,1534298751,AT -1534298752,1534298879,HU -1534298880,1534299903,AT -1534299904,1534300159,HU -1534300160,1534302975,AT -1534302976,1534303231,HU -1534303232,1534303999,AT -1534304000,1534304255,SK -1534304256,1534328831,AT +1534066688,1534328831,AT 1534328832,1534459903,ES 1534459904,1534590975,AT 1534590976,1534656511,HU 1534656512,1534711807,FR 1534711808,1534712831,BE -1534712832,1534714415,FR -1534714416,1534714431,ES -1534714432,1534714751,FR +1534712832,1534713919,FR +1534713920,1534713927,CH +1534713928,1534714055,FR +1534714056,1534714063,PL +1534714064,1534714079,NL +1534714080,1534714207,FR +1534714208,1534714223,NL +1534714224,1534714255,FR +1534714256,1534714259,FI +1534714260,1534714279,FR +1534714280,1534714283,DE +1534714284,1534714287,CH +1534714288,1534714323,FR +1534714324,1534714327,ES +1534714328,1534714403,FR +1534714404,1534714431,ES +1534714432,1534714539,FR +1534714540,1534714543,ES +1534714544,1534714575,FR +1534714576,1534714583,NL +1534714584,1534714751,FR 1534714752,1534714767,DE -1534714768,1534715263,FR +1534714768,1534714799,FR +1534714800,1534714815,GB +1534714816,1534714927,FR +1534714928,1534714931,DE +1534714932,1534715211,FR +1534715212,1534715215,LT +1534715216,1534715263,FR 1534715264,1534715267,IT -1534715268,1534715871,FR +1534715268,1534715295,FR +1534715296,1534715299,GB +1534715300,1534715359,FR +1534715360,1534715367,DE +1534715368,1534715415,FR +1534715416,1534715419,PL +1534715420,1534715423,FR +1534715424,1534715431,IT +1534715432,1534715439,FR +1534715440,1534715447,IT +1534715448,1534715631,FR +1534715632,1534715639,DE +1534715640,1534715671,FR +1534715672,1534715675,CZ +1534715676,1534715711,FR +1534715712,1534715727,GB +1534715728,1534715775,FR +1534715776,1534715783,ES +1534715784,1534715791,IT +1534715792,1534715871,FR 1534715872,1534715875,ES -1534715876,1534715935,FR +1534715876,1534715879,FR +1534715880,1534715883,PL +1534715884,1534715935,FR 1534715936,1534715939,NL -1534715940,1534716375,FR +1534715940,1534716007,FR +1534716008,1534716015,IT +1534716016,1534716031,ES +1534716032,1534716095,FR +1534716096,1534716127,NL +1534716128,1534716131,GB +1534716132,1534716163,FR +1534716164,1534716167,BE +1534716168,1534716303,FR +1534716304,1534716307,GB +1534716308,1534716367,FR +1534716368,1534716375,IT 1534716376,1534716379,ES -1534716380,1534717199,FR +1534716380,1534716383,BE +1534716384,1534716447,FR +1534716448,1534716463,ES +1534716464,1534716575,FR +1534716576,1534716591,NL +1534716592,1534716623,FR +1534716624,1534716639,BE +1534716640,1534716647,IT +1534716648,1534716763,FR +1534716764,1534716767,BE +1534716768,1534716775,DE +1534716776,1534716783,FR +1534716784,1534716791,NL +1534716792,1534716799,LT +1534716800,1534716803,FI +1534716804,1534716807,NL +1534716808,1534717035,FR +1534717036,1534717039,IT +1534717040,1534717063,FR +1534717064,1534717071,IT +1534717072,1534717087,GB +1534717088,1534717199,FR 1534717200,1534717215,GB 1534717216,1534717247,FR 1534717248,1534717251,ES -1534717252,1534717263,FR +1534717252,1534717255,FR +1534717256,1534717263,IT 1534717264,1534717267,ES -1534717268,1534717663,FR +1534717268,1534717323,FR +1534717324,1534717327,CH +1534717328,1534717343,NL +1534717344,1534717407,FR +1534717408,1534717415,IT +1534717416,1534717551,FR +1534717552,1534717567,PL +1534717568,1534717587,FR +1534717588,1534717591,GB +1534717592,1534717599,FR +1534717600,1534717631,PT +1534717632,1534717663,FR 1534717664,1534717679,GB -1534717680,1534717923,FR +1534717680,1534717695,BE +1534717696,1534717711,PT +1534717712,1534717791,FR +1534717792,1534717823,NL +1534717824,1534717915,FR +1534717916,1534717919,ES +1534717920,1534717923,FR 1534717924,1534717927,IT -1534717928,1534718763,FR -1534718764,1534718767,ES -1534718768,1534719747,FR +1534717928,1534717935,FR +1534717936,1534717951,CZ +1534717952,1534717991,FR +1534717992,1534717995,FI +1534717996,1534718007,FR +1534718008,1534718011,ES +1534718012,1534718271,FR +1534718272,1534718335,PT +1534718336,1534718351,FR +1534718352,1534718359,IT +1534718360,1534718363,GB +1534718364,1534718475,FR +1534718476,1534718479,GB +1534718480,1534718535,FR +1534718536,1534718539,IT +1534718540,1534718575,FR +1534718576,1534718591,LT +1534718592,1534718631,FR +1534718632,1534718639,GB +1534718640,1534718655,FR +1534718656,1534718687,GB +1534718688,1534718759,FR +1534718760,1534718767,ES +1534718768,1534718819,FR +1534718820,1534718823,PL +1534718824,1534719087,FR +1534719088,1534719103,GB +1534719104,1534719335,FR +1534719336,1534719339,IT +1534719340,1534719423,FR +1534719424,1534719439,PL +1534719440,1534719459,FR +1534719460,1534719463,DE +1534719464,1534719471,FR +1534719472,1534719487,BE +1534719488,1534719507,FR +1534719508,1534719511,FI +1534719512,1534719519,FR +1534719520,1534719535,GB +1534719536,1534719567,FR +1534719568,1534719575,LT +1534719576,1534719583,IT +1534719584,1534719599,PT +1534719600,1534719607,PL +1534719608,1534719615,FR +1534719616,1534719631,PL +1534719632,1534719747,FR 1534719748,1534719751,ES 1534719752,1534719783,FR 1534719784,1534719787,ES -1534719788,1534720003,FR +1534719788,1534719791,PT +1534719792,1534719815,FR +1534719816,1534719823,GB +1534719824,1534719831,FR +1534719832,1534719839,PL +1534719840,1534719967,FR +1534719968,1534719983,IT +1534719984,1534720003,FR 1534720004,1534720007,ES 1534720008,1534720011,IT -1534720012,1534720023,FR +1534720012,1534720015,FR +1534720016,1534720023,IT 1534720024,1534720027,PL -1534720028,1534720179,FR +1534720028,1534720047,FR +1534720048,1534720063,GB +1534720064,1534720095,FR +1534720096,1534720111,IT +1534720112,1534720179,FR 1534720180,1534720183,ES -1534720184,1534720471,FR +1534720184,1534720211,FR +1534720212,1534720215,DE +1534720216,1534720223,GB +1534720224,1534720255,FR +1534720256,1534720271,PL +1534720272,1534720415,FR +1534720416,1534720419,ES +1534720420,1534720423,FR +1534720424,1534720431,IT +1534720432,1534720467,FR +1534720468,1534720471,ES 1534720472,1534720479,DE -1534720480,1534721619,FR +1534720480,1534720527,FR +1534720528,1534720531,BE +1534720532,1534720647,FR +1534720648,1534720655,ES +1534720656,1534720735,FR +1534720736,1534720739,PL +1534720740,1534720743,FR +1534720744,1534720767,GB +1534720768,1534720787,FR +1534720788,1534720791,IT +1534720792,1534720943,FR +1534720944,1534720951,LT +1534720952,1534720967,FR +1534720968,1534720975,IT +1534720976,1534720991,FR +1534720992,1534721007,IT +1534721008,1534721035,FR +1534721036,1534721039,PT +1534721040,1534721071,FR +1534721072,1534721087,IT +1534721088,1534721115,FR +1534721116,1534721119,CH +1534721120,1534721195,FR +1534721196,1534721199,DE +1534721200,1534721215,IT +1534721216,1534721295,FR +1534721296,1534721311,GB +1534721312,1534721391,FR +1534721392,1534721407,GB +1534721408,1534721487,FR +1534721488,1534721491,BE +1534721492,1534721587,FR +1534721588,1534721591,LT +1534721592,1534721619,FR 1534721620,1534721623,ES -1534721624,1534722047,FR +1534721624,1534721707,FR +1534721708,1534721711,IT +1534721712,1534721727,FR +1534721728,1534721743,GB +1534721744,1534721827,FR +1534721828,1534721831,DE +1534721832,1534721971,FR +1534721972,1534721975,GB +1534721976,1534722047,FR 1534722048,1534787583,RU 1534787584,1534791679,RO 1534791680,1534795775,RU @@ -22125,11 +24341,9 @@ 1534984192,1534985215,NO 1534985216,1535049727,ES 1535049728,1535115263,SK -1535115264,1535146495,AT -1535146496,1535146751,CH -1535146752,1535197183,AT -1535197184,1535203071,EE -1535203072,1535246335,SE +1535115264,1535197183,AT +1535197184,1535203359,EE +1535203360,1535246335,SE 1535246336,1535311871,AT 1535311872,1535344639,NO 1535344640,1535350783,LV @@ -22137,8 +24351,7 @@ 1535352832,1535361023,EE 1535361024,1535377407,NL 1535377408,1535442943,GR -1535442944,1535450879,RU -1535450880,1535451135,FI +1535442944,1535451135,RU 1535451136,1535459327,DK 1535459328,1535475711,AT 1535475712,1535508479,IR @@ -22172,10 +24385,12 @@ 1535715328,1535717375,DE 1535717376,1535721471,CH 1535721472,1535721727,DE -1535721728,1535737855,CH -1535737856,1535746815,HU -1535746816,1535747071,RS -1535747072,1535770623,HU +1535721728,1535727871,CH +1535727872,1535728127,DE +1535728128,1535732735,CH +1535732736,1535735807,DE +1535735808,1535737855,CH +1535737856,1535770623,HU 1535770624,1535803391,CH 1535803392,1535836159,GR 1535836160,1535868927,CZ @@ -22277,9 +24492,7 @@ 1536684032,1536688127,GB 1536688128,1537212415,FI 1537212416,1538260991,FR -1538260992,1538628607,BE -1538628608,1538629119,FR -1538629120,1538785279,BE +1538260992,1538785279,BE 1538785280,1538793471,NL 1538793472,1538797567,DE 1538797568,1538801663,NL @@ -22358,7 +24571,11 @@ 1539211264,1539213311,CZ 1539213312,1539215359,SE 1539215360,1539219455,DE -1539219456,1539221247,GG +1539219456,1539219967,GG +1539219968,1539220223,GB +1539220224,1539220479,GG +1539220480,1539220991,GB +1539220992,1539221247,GG 1539221248,1539221503,GB 1539221504,1539223551,FR 1539223552,1539225599,RU @@ -23266,8 +25483,7 @@ 1539865600,1539866623,UA 1539866624,1539867647,IT 1539867648,1539868671,RO -1539868672,1539868927,UA -1539868928,1539869695,RU +1539868672,1539869695,RU 1539869696,1539870719,ES 1539870720,1539871743,IL 1539872768,1539873791,SE @@ -23566,7 +25782,6 @@ 1540242944,1540243455,RU 1540243456,1540243967,PL 1540243968,1540244479,RU -1540244480,1540244735,CH 1540244992,1540245503,DE 1540245504,1540246015,RU 1540246016,1540246527,IT @@ -23641,7 +25856,8 @@ 1540284928,1540285439,UA 1540285440,1540285951,DE 1540285952,1540286463,RU -1540286464,1540286975,NL +1540286464,1540286719,GB +1540286720,1540286975,NL 1540286976,1540287487,GB 1540287488,1540288511,AT 1540288512,1540289535,RU @@ -23764,7 +25980,7 @@ 1540361472,1540361727,DE 1540361728,1540361983,IT 1540361984,1540362239,EE -1540362240,1540363263,DE +1540362496,1540363007,DE 1540363264,1540363519,RU 1540363776,1540364031,IS 1540364032,1540364287,RU @@ -24252,7 +26468,6 @@ 1540588544,1540589567,UA 1540589568,1540593663,RU 1540594688,1540595711,IT -1540595712,1540596735,UZ 1540596736,1540597759,FR 1540597760,1540598783,SE 1540598784,1540600831,UA @@ -24313,7 +26528,6 @@ 1540631040,1540631295,NL 1540631296,1540631551,CH 1540631552,1540631807,HR -1540631808,1540632063,LV 1540632064,1540632319,AT 1540632320,1540632575,RU 1540632576,1540632831,DK @@ -24358,7 +26572,6 @@ 1540645120,1540645375,RU 1540645376,1540645631,BE 1540645632,1540645887,NL -1540645888,1540646143,PL 1540646144,1540646399,RO 1540646400,1540646655,PS 1540646656,1540646911,SE @@ -24386,7 +26599,7 @@ 1540653056,1540653311,FR 1540653312,1540653567,DK 1540653568,1540653823,DE -1540653824,1540654335,GB +1540653824,1540654079,GB 1540654336,1540654591,RU 1540654592,1540654847,SI 1540654848,1540655103,RU @@ -24470,7 +26683,6 @@ 1540678656,1540678911,SE 1540678912,1540679167,GB 1540679168,1540679423,RU -1540679424,1540679679,PL 1540679680,1540679935,LT 1540679936,1540680191,BG 1540680192,1540680447,CH @@ -24525,7 +26737,7 @@ 1540693760,1540694015,UZ 1540694016,1540694271,CH 1540694272,1540694527,UA -1540694528,1540695039,RO +1540694528,1540694783,RO 1540695040,1540695295,DE 1540695296,1540695551,NL 1540695552,1540695807,PL @@ -24690,7 +26902,6 @@ 1540742144,1540742399,RU 1540742400,1540742655,DE 1540742656,1540742911,AT -1540742912,1540743167,RU 1540743168,1540743423,NO 1540743424,1540743679,GB 1540743680,1540743935,PL @@ -24726,7 +26937,6 @@ 1540756480,1540757503,DK 1540757504,1540758527,PL 1540758528,1540759551,UA -1540760064,1540760319,UA 1540760576,1540761599,PL 1540761600,1540762623,RU 1540762624,1540763647,LU @@ -24745,9 +26955,9 @@ 1540779008,1540780031,NL 1540780032,1540781055,UA 1540781056,1540783103,RU -1540783104,1540784639,UA -1540784640,1540784895,RU -1540784896,1540787199,UA +1540783104,1540784383,UA +1540784384,1540785151,RU +1540785152,1540787199,UA 1540787200,1540788223,KZ 1540788224,1540790271,RU 1540790272,1540791295,KW @@ -24799,11 +27009,10 @@ 1540848640,1540849663,UA 1540849664,1540850687,RU 1540850688,1540851711,FI -1540851712,1540852735,UA -1540852736,1540853759,RU +1540851712,1540853759,RU 1540853760,1540854783,UA 1540854784,1540855807,NL -1540855808,1540856831,RU +1540855808,1540856831,UA 1540856832,1540857855,NL 1540857856,1540858879,DK 1540858880,1540859903,GB @@ -24811,7 +27020,9 @@ 1540860928,1540861951,KZ 1540861952,1540862975,BY 1540862976,1540865023,GB -1540865024,1540872191,RU +1540865024,1540867071,RU +1540867072,1540868095,KZ +1540868096,1540872191,RU 1540872192,1540873215,BG 1540873216,1540875263,RU 1540875264,1540876287,PL @@ -25399,13 +27610,11 @@ 1541165312,1541165567,RU 1541165568,1541165823,NL 1541165824,1541166079,GB -1541166080,1541166335,RU 1541166336,1541166591,FR 1541166592,1541166847,RO 1541166848,1541167103,RU 1541167104,1541167359,NL 1541167360,1541167615,AT -1541167616,1541167871,RU 1541167872,1541168127,UA 1541168128,1541168639,RU 1541168640,1541168895,MD @@ -25439,7 +27648,6 @@ 1541176064,1541176319,NL 1541176320,1541176575,AM 1541176576,1541176831,DE -1541176832,1541177087,RU 1541177088,1541177343,GB 1541177344,1541177599,CH 1541177600,1541177855,DE @@ -25484,7 +27692,6 @@ 1541187840,1541188351,RU 1541188352,1541188607,FR 1541188608,1541188863,HU -1541188864,1541189119,RU 1541189120,1541189375,UA 1541189376,1541189631,GB 1541189888,1541190143,PL @@ -25510,7 +27717,6 @@ 1541195520,1541195775,GB 1541195776,1541196031,FR 1541196032,1541196287,CZ -1541196288,1541196543,RU 1541196800,1541197055,UA 1541197056,1541197311,PL 1541197312,1541197567,RU @@ -25592,7 +27798,6 @@ 1541228032,1541228543,RU 1541228544,1541229055,CZ 1541229056,1541229567,UA -1541229568,1541230079,RU 1541230080,1541230591,RO 1541230592,1541231103,RU 1541231104,1541231615,GB @@ -25729,7 +27934,7 @@ 1541338112,1541341183,UA 1541341184,1541341439,TR 1541341440,1541341695,RU -1541341696,1541341951,HU +1541341696,1541341951,DE 1541341952,1541342463,PL 1541342464,1541342719,FR 1541342720,1541342975,PL @@ -26004,8 +28209,8 @@ 1541426176,1541426687,RU 1541426688,1541427199,UA 1541427200,1541428223,RU -1541428224,1541428991,UA -1541428992,1541429247,RU +1541428224,1541428735,UA +1541428736,1541429247,RU 1541429248,1541429759,FI 1541429760,1541430271,CZ 1541430272,1541430783,LT @@ -26116,7 +28321,9 @@ 1541532672,1541533695,RU 1541533696,1541534719,PL 1541534720,1541535743,IT -1541535744,1541536767,US +1541535744,1541536255,US +1541536256,1541536511,IE +1541536512,1541536767,US 1541536768,1541537791,RU 1541537792,1541538303,GB 1541538304,1541538815,RO @@ -26145,15 +28352,14 @@ 1541552128,1541553151,UA 1541553152,1541555199,RU 1541555200,1541556223,PL -1541556224,1541556479,UA 1541556480,1541556735,RU 1541556736,1541557247,IT 1541557504,1541557759,SI -1541557760,1541558015,RU 1541558016,1541558271,HU 1541558272,1541559295,RU 1541560320,1541561343,DE -1541561344,1541562879,RU +1541561344,1541562367,RU +1541562624,1541562879,RU 1541562880,1541563135,FR 1541563136,1541563391,NL 1541563392,1541564415,PL @@ -26386,7 +28592,7 @@ 1541700864,1541701119,PL 1541701120,1541701631,IL 1541701632,1541702655,RO -1541702656,1541703679,RU +1541703424,1541703679,RU 1541703680,1541704703,PL 1541704704,1541706239,RO 1541706240,1541706751,UA @@ -26401,7 +28607,6 @@ 1541711872,1541712127,FR 1541712128,1541712383,TR 1541712384,1541712895,DE -1541712896,1541713919,RU 1541713920,1541714175,NL 1541714176,1541716223,RU 1541716224,1541716479,PL @@ -26454,7 +28659,6 @@ 1541740032,1541740287,PL 1541740288,1541740543,NL 1541740544,1541740799,CZ -1541740800,1541741055,RU 1541741056,1541741567,PL 1541741568,1541742079,SK 1541742080,1541742591,RO @@ -26467,7 +28671,6 @@ 1541746944,1541747199,NL 1541747200,1541747711,RU 1541747712,1541748735,UA -1541748736,1541748991,RU 1541748992,1541749247,AT 1541749248,1541749503,ES 1541749504,1541749759,RU @@ -26738,7 +28941,6 @@ 1541893632,1541894143,PL 1541894144,1541895167,RU 1541895168,1541897727,PL -1541897728,1541897983,RU 1541897984,1541898239,UA 1541898240,1541900799,RU 1541900800,1541901055,RO @@ -27558,7 +29760,7 @@ 1542392832,1542393087,RO 1542393088,1542393343,BG 1542393344,1542393599,IR -1542393600,1542394879,RU +1542393856,1542394879,RU 1542394880,1542395135,DE 1542395136,1542395391,ES 1542395392,1542395647,RU @@ -28035,8 +30237,8 @@ 1546000384,1546001407,UZ 1546001408,1546002943,RU 1546002944,1546003199,UA -1546003200,1546003455,RU -1546003456,1546004479,CZ +1546003200,1546003967,RU +1546003968,1546004479,CZ 1546004480,1546004735,UA 1546004736,1546005247,CZ 1546005248,1546006527,RU @@ -28056,7 +30258,7 @@ 1546088448,1546092543,GB 1546092544,1546096639,RU 1546096640,1546100735,IT -1546100736,1546104831,DE +1546100736,1546104831,AT 1546104832,1546108927,IE 1546108928,1546113023,IM 1546113024,1546121215,RU @@ -28067,7 +30269,9 @@ 1546122464,1546122479,DZ 1546122480,1546122649,FR 1546122650,1546122650,PT -1546122651,1546125311,FR +1546122651,1546122696,FR +1546122697,1546122697,ES +1546122698,1546125311,FR 1546125312,1546256383,GB 1546256384,1546264575,RU 1546264576,1546266623,TR @@ -28137,20 +30341,25 @@ 1546682368,1546698751,BE 1546698752,1546715135,NL 1546715136,1546731519,LV -1546731520,1546731775,RE -1546731776,1546735103,FR +1546731520,1546735103,FR 1546735104,1546735359,RE -1546735360,1546739711,FR -1546739712,1546739967,GP -1546739968,1546741503,FR -1546741504,1546742015,GP -1546742016,1546742527,FR -1546742528,1546743295,GF -1546743296,1546743551,FR -1546743552,1546743807,GF -1546743808,1546745087,FR -1546745088,1546745855,MQ -1546745856,1546747903,FR +1546735360,1546735871,FR +1546735872,1546736127,RE +1546736128,1546736639,FR +1546736640,1546736895,RE +1546736896,1546740223,FR +1546740224,1546740479,GP +1546740480,1546741503,FR +1546741504,1546741759,GP +1546741760,1546742527,FR +1546742528,1546743039,GF +1546743040,1546743295,FR +1546743296,1546743551,GF +1546743552,1546745599,FR +1546745600,1546745855,MQ +1546745856,1546746111,FR +1546746112,1546746367,MQ +1546746368,1546747903,FR 1546747904,1546764287,RU 1546764288,1546780671,UA 1546780672,1546797055,IR @@ -28162,7 +30371,9 @@ 1546911744,1546928127,SK 1546928128,1546944511,GB 1546944512,1546960895,UA -1546960896,1546977279,HU +1546960896,1546964991,HU +1546964992,1546966015,US +1546966016,1546977279,HU 1546977280,1546993663,MK 1546993664,1547010047,RU 1547010048,1547026431,SI @@ -28206,19 +30417,13 @@ 1547542528,1547546623,FR 1547546624,1547550719,IR 1547550720,1547554815,IE -1547554816,1547555071,AT -1547555072,1547555078,DE -1547555079,1547555079,AT -1547555080,1547555327,DE -1547555328,1547558911,AT +1547554816,1547558911,AT 1547558912,1547563007,IL 1547563008,1547565311,NL 1547565312,1547565823,US 1547565824,1547567103,NL 1547567104,1547571199,GB -1547571200,1547572991,AT -1547572992,1547573247,HU -1547573248,1547575295,AT +1547571200,1547575295,AT 1547575296,1547579391,NO 1547579392,1547583487,RU 1547583488,1547587583,KG @@ -28280,19 +30485,13 @@ 1547685888,1547689983,AT 1547689984,1547694079,IT 1547694080,1547698175,HU -1547698176,1547925783,NL -1547925784,1547925791,DE -1547925792,1548130303,NL -1548130304,1548130559,BE -1548130560,1548158599,NL +1547698176,1548158599,NL 1548158600,1548158607,GB 1548158608,1548159231,NL 1548159232,1548159235,ES 1548159236,1548159487,NL 1548159488,1548159999,GB -1548160000,1548160255,NL -1548160256,1548160511,PL -1548160512,1548162479,NL +1548160000,1548162479,NL 1548162480,1548162495,FR 1548162496,1548169215,NL 1548169216,1548171263,DE @@ -28322,10 +30521,14 @@ 1549795328,1550057471,AE 1550057472,1550188543,RU 1550188544,1550319615,FR -1550319616,1550581759,CH +1550319616,1550519551,CH +1550519552,1550519807,DE +1550519808,1550581759,CH 1550581760,1550843903,NL 1550843904,1550974975,UA -1550974976,1551007743,RO +1550974976,1550979071,RO +1550979072,1550983167,IR +1550983168,1551007743,RO 1551007744,1551106047,MD 1551106048,1551237119,DE 1551237120,1551368191,GR @@ -28346,101 +30549,28 @@ 1551577088,1551580159,NL 1551604480,1551604735,SE 1551630336,1551892479,RU -1551892480,1553989887,FR -1553989888,1553990911,MQ -1553990912,1553991167,FR -1553991168,1553992703,MQ -1553992704,1553993215,FR -1553993216,1553996031,MQ -1553996032,1553996543,FR -1553996544,1553997311,MQ -1553997312,1553997567,FR -1553997568,1554001407,MQ -1554001408,1554001663,FR -1554001664,1554001919,MQ -1554001920,1554002175,FR -1554002176,1554005247,MQ -1554005248,1554005503,FR -1554005504,1554006015,MQ -1554006016,1554006783,GP -1554006784,1554007295,FR -1554007296,1554007807,GP -1554007808,1554008063,FR -1554008064,1554009343,GP -1554009344,1554009855,FR -1554009856,1554011647,GP -1554011648,1554011903,FR -1554011904,1554013695,GP -1554013696,1554014207,FR -1554014208,1554015231,GP -1554015232,1554015487,FR -1554015488,1554016767,GP -1554016768,1554017279,FR -1554017280,1554018047,GP -1554018048,1554018303,FR -1554018304,1554019583,GP -1554019584,1554019839,FR -1554019840,1554021119,GP -1554021120,1554021375,FR -1554021376,1554021887,GP -1554021888,1554022399,FR -1554022400,1554023423,GP -1554023424,1554023679,FR -1554023680,1554024959,GP -1554024960,1554025215,FR -1554025216,1554025471,GP -1554025472,1554025727,FR -1554025728,1554026751,GP -1554026752,1554027007,FR -1554027008,1554027519,GP -1554027520,1554027775,FR -1554027776,1554029055,GP -1554029056,1554029311,FR -1554029312,1554030079,GP -1554030080,1554030335,FR -1554030336,1554030591,GP -1554030592,1554031615,MQ -1554031616,1554032127,FR -1554032128,1554032383,MQ -1554032384,1554032639,FR -1554032640,1554035455,MQ -1554035456,1554035967,FR -1554035968,1554037503,MQ -1554037504,1554037759,FR -1554037760,1554038271,MQ -1554038272,1554038783,FR -1554038784,1554039295,RE -1554039296,1554039807,FR -1554039808,1554040063,RE -1554040064,1554040319,FR -1554040320,1554041343,RE -1554041344,1554041599,FR -1554041600,1554042367,RE -1554042368,1554042879,FR -1554042880,1554043903,RE -1554043904,1554044159,FR -1554044160,1554046463,RE -1554046464,1554046719,FR -1554046720,1554047231,RE -1554047232,1554048255,FR -1554048256,1554048767,RE -1554048768,1554049279,FR -1554049280,1554049535,RE -1554049536,1554049791,FR -1554049792,1554052351,RE -1554052352,1554052607,FR -1554052608,1554053887,RE -1554053888,1554054143,FR -1554054144,1554054655,RE -1554054656,1556086783,FR +1551892480,1556086783,FR 1556086784,1557921791,DE 1557921792,1558052863,NO 1558052864,1558054399,FR 1558054400,1558054655,DE -1558054656,1558118399,FR +1558054656,1558079407,FR +1558079408,1558079415,PL +1558079416,1558079423,GB +1558079424,1558081175,FR +1558081176,1558081183,BE +1558081184,1558084655,FR +1558084656,1558084659,BE +1558084660,1558085055,FR +1558085056,1558085071,GB +1558085072,1558093531,FR +1558093532,1558093532,HR +1558093533,1558118399,FR 1558118400,1558119423,DE 1558119424,1558122495,RU -1558122496,1558151167,AT +1558122496,1558123519,AT +1558123520,1558124543,LU +1558124544,1558151167,AT 1558151168,1558183935,IT 1558183936,1558708223,DE 1558708224,1559236607,GB @@ -28493,7 +30623,7 @@ 1559633920,1559642111,IT 1559650304,1559658495,IT 1559658496,1559683071,RU -1559683072,1559691263,CH +1559683072,1559691263,NL 1559691264,1559756799,BG 1559756800,1559789567,AT 1559789568,1559822335,RU @@ -28502,7 +30632,9 @@ 1559887872,1559920639,PT 1559920640,1559924693,LU 1559924694,1559924694,GB -1559924695,1559932927,LU +1559924695,1559929599,LU +1559929600,1559929855,LV +1559929856,1559932927,LU 1559932928,1559943167,DE 1559943168,1559944191,LU 1559944192,1559945727,FR @@ -28528,17 +30660,7 @@ 1562378240,1564999679,IT 1564999680,1565523967,UA 1565523968,1565655039,RU -1565655040,1565673215,AT -1565673216,1565673471,DE -1565673472,1565675263,AT -1565675264,1565675391,DE -1565675392,1565713295,AT -1565713296,1565713299,CH -1565713300,1565718919,AT -1565718920,1565718927,DE -1565718928,1565723135,AT -1565723136,1565723391,HU -1565723392,1565786111,AT +1565655040,1565786111,AT 1565786112,1565917183,BY 1565917184,1566048255,RS 1566048256,1566056447,RU @@ -28661,7 +30783,6 @@ 1566425088,1566427135,RS 1566427136,1566429183,IT 1566429184,1566437375,GB -1566437376,1566439423,BE 1566439424,1566443519,DE 1566443520,1566445567,NO 1566445568,1566447615,PL @@ -28721,9 +30842,9 @@ 1566558208,1566560255,JO 1566560256,1566560767,IT 1566560768,1566561015,SM -1566561016,1566561017,IT -1566561018,1566561023,SM -1566561024,1566564351,IT +1566561016,1566561019,IT +1566561020,1566561279,SM +1566561280,1566564351,IT 1566564352,1566566399,IS 1566566400,1566568447,FR 1566568448,1566570495,KZ @@ -28746,11 +30867,7 @@ 1567621120,1567696383,RO 1567696384,1567696895,MD 1567696896,1567703039,RO -1567703040,1567707391,MD -1567707392,1567707647,RO -1567707648,1567707903,MD -1567707904,1567708671,RO -1567708672,1567709183,MD +1567703040,1567709183,MD 1567709184,1567710207,RO 1567710208,1567711231,MD 1567711232,1567713279,RO @@ -28761,7 +30878,9 @@ 1567727360,1567727615,GB 1567727616,1567742975,RO 1567742976,1567743487,MD -1567743488,1567749119,RO +1567743488,1567743999,RO +1567744000,1567748095,IR +1567748096,1567749119,RO 1567749120,1567750143,MD 1567750144,1567752191,RO 1567752192,1567756287,MD @@ -28789,7 +30908,8 @@ 1567988736,1567992831,MD 1567992832,1567993343,RO 1567993344,1567993599,GB -1567993600,1567997951,RO +1567993600,1567993855,RO +1567993856,1567997951,IR 1567997952,1568014335,NL 1568014336,1568022527,DE 1568022528,1568026623,RO @@ -28810,79 +30930,62 @@ 1568120832,1568122879,MD 1568122880,1568130047,RO 1568130048,1568133119,MD -1568133120,1568138239,RO +1568133120,1568137215,IR +1568137216,1568138239,RO 1568138240,1568141311,MD 1568141312,1568178175,RO 1568178176,1568210943,RU 1568210944,1568243711,GB -1568243712,1568243967,FR -1568243968,1568244735,GP -1568244736,1568244991,FR -1568244992,1568245759,GP -1568245760,1568246271,FR -1568246272,1568246527,GF -1568246528,1568247039,GP -1568247040,1568247295,FR +1568243712,1568245759,GP +1568245760,1568247295,FR 1568247296,1568247551,GF 1568247552,1568247807,MF 1568247808,1568248063,FR 1568248064,1568248831,GP -1568248832,1568249087,MQ -1568249088,1568249599,GP -1568249600,1568249855,MQ +1568248832,1568249087,FR +1568249088,1568249855,GP 1568249856,1568250111,FR 1568250112,1568250879,GP 1568250880,1568251135,FR 1568251136,1568251647,GP 1568251648,1568251903,MF -1568251904,1568252159,MQ -1568252160,1568252415,GP -1568252416,1568252671,MQ -1568252672,1568252927,GP +1568251904,1568252159,FR +1568252160,1568252927,GP 1568252928,1568253183,GF -1568253184,1568253951,GP -1568253952,1568255743,FR -1568255744,1568255999,GF -1568256000,1568256511,GP -1568256512,1568259071,FR -1568259072,1568259327,MQ +1568253184,1568254207,GP +1568254208,1568254975,FR +1568254976,1568255487,GP +1568255488,1568255999,FR +1568256000,1568256255,GP +1568256256,1568259327,FR 1568259328,1568260095,GP 1568260096,1568260351,FR -1568260352,1568260607,MF -1568260608,1568261119,GP +1568260352,1568260863,MF +1568260864,1568261119,GP 1568261120,1568261375,FR 1568261376,1568262143,GP -1568262144,1568262655,MQ -1568262656,1568262911,GP -1568262912,1568263167,MQ -1568263168,1568263423,FR -1568263424,1568263679,MQ -1568263680,1568264447,FR -1568264448,1568264703,GP -1568264704,1568265215,MF -1568265216,1568265471,FR -1568265472,1568266239,GP +1568262144,1568262399,MQ +1568262400,1568263167,GP +1568263168,1568264447,FR +1568264448,1568264959,GP +1568264960,1568265215,MF +1568265216,1568266239,GP 1568266240,1568266495,FR 1568266496,1568267263,GP -1568267264,1568268543,FR +1568267264,1568267775,MF +1568267776,1568268543,FR 1568268544,1568269311,GP -1568269312,1568269567,MQ +1568269312,1568269567,FR 1568269568,1568270079,GP 1568270080,1568270335,MQ -1568270336,1568271359,GP -1568271360,1568271615,FR -1568271616,1568272383,GP +1568270336,1568272383,GP 1568272384,1568273151,FR 1568273152,1568273407,GF -1568273408,1568274175,FR -1568274176,1568274687,MQ -1568274688,1568274943,GP -1568274944,1568275199,MQ -1568275200,1568275455,GP +1568273408,1568274687,FR +1568274688,1568275455,GP 1568275456,1568275711,FR 1568275712,1568275967,MQ -1568275968,1568276223,FR -1568276224,1568276479,MQ +1568275968,1568276479,FR 1568276480,1568309247,DE 1568309248,1568342015,RO 1568342016,1568374783,BG @@ -28895,9 +30998,7 @@ 1568571392,1568604159,LB 1568604160,1568636927,UA 1568636928,1569193983,DE -1569193984,1569438463,HR -1569438464,1569438719,BR -1569438720,1569718271,HR +1569193984,1569718271,HR 1569718272,1570242559,IT 1570242560,1570275327,GB 1570275328,1570308095,BG @@ -28919,14 +31020,13 @@ 1570586624,1570590719,PL 1570590720,1570592767,IL 1570592768,1570596863,PL -1570596864,1570598911,UA 1570598912,1570600959,PL 1570600960,1570603007,RU 1570603008,1570605055,CZ 1570605056,1570607103,NL 1570607104,1570609151,RU 1570609152,1570611199,PL -1570611200,1570619391,RU +1570611200,1570617343,RU 1570619392,1570621439,BA 1570621440,1570625535,RU 1570625536,1570627583,GB @@ -28936,7 +31036,9 @@ 1570644776,1570644991,FR 1570644992,1570645247,GB 1570645248,1570652159,FR -1570652160,1570668543,SE +1570652160,1570660863,SE +1570660864,1570661375,NO +1570661376,1570668543,SE 1570668544,1570686975,RU 1570686976,1570693119,NL 1570693120,1570695167,RU @@ -28991,7 +31093,7 @@ 1571443712,1571444991,CZ 1571444992,1571445247,UA 1571445248,1571446271,NL -1571446272,1571446783,CZ +1571446272,1571446783,RU 1571446784,1571447039,GB 1571447040,1571447295,CZ 1571447296,1571447807,RU @@ -29002,7 +31104,9 @@ 1571449344,1571449855,CZ 1571449856,1571450879,RU 1571450880,1571452927,UA -1571452928,1571453951,CZ +1571452928,1571453183,CZ +1571453184,1571453695,RU +1571453696,1571453951,CZ 1571453952,1571455999,RU 1571456000,1571456511,UA 1571456512,1571456767,CZ @@ -29018,10 +31122,14 @@ 1571471104,1571471359,CZ 1571471360,1571475455,RU 1571475456,1571476479,CZ -1571476480,1571478527,RU -1571478528,1571487743,CZ +1571476480,1571479551,RU +1571479552,1571483647,CZ +1571483648,1571484159,RU +1571484160,1571487743,CZ 1571487744,1571495935,SK -1571495936,1571504127,CZ +1571495936,1571499007,CZ +1571499008,1571500031,RU +1571500032,1571504127,BY 1571504128,1571508223,UA 1571508224,1571514367,CZ 1571514368,1571520511,BY @@ -29034,8 +31142,9 @@ 1571529216,1571529727,CZ 1571529728,1571530239,RU 1571530240,1571531263,CZ -1571531264,1571531775,UA -1571531776,1571534079,CZ +1571531264,1571532031,UA +1571532032,1571532287,RU +1571532288,1571534079,CZ 1571534080,1571534847,RU 1571534848,1571535103,LV 1571535104,1571535617,CZ @@ -29105,30 +31214,24 @@ 1571815424,1571815679,FR 1571815680,1571815935,RE 1571815936,1571816959,FR -1571816960,1571817727,RE -1571817728,1571818495,FR +1571816960,1571817215,RE +1571817216,1571818495,FR 1571818496,1571818751,RE 1571818752,1571819007,FR 1571819008,1571819263,RE 1571819264,1571819519,FR 1571819520,1571819775,RE -1571819776,1571820287,FR -1571820288,1571820543,RE -1571820544,1571820799,FR -1571820800,1571821055,RE -1571821056,1571822591,FR -1571822592,1571823103,RE -1571823104,1571823871,FR -1571823872,1571824127,RE -1571824128,1571824895,FR -1571824896,1571825151,RE -1571825152,1571826687,FR -1571826688,1571827199,RE -1571827200,1571827711,FR -1571827712,1571827967,RE -1571827968,1571828991,FR -1571828992,1571829247,RE -1571829248,1571831807,FR +1571819776,1571821055,FR +1571821056,1571821823,RE +1571821824,1571822847,FR +1571822848,1571823615,RE +1571823616,1571825407,FR +1571825408,1571825663,RE +1571825664,1571827455,FR +1571827456,1571827967,RE +1571827968,1571830783,FR +1571830784,1571831039,RE +1571831040,1571831807,FR 1571831808,1571848191,DK 1571848192,1571864575,RU 1571864576,1571880959,PL @@ -29231,8 +31334,7 @@ 1572538368,1572540415,NL 1572540416,1572542463,GB 1572542464,1572544511,IT -1572544512,1572544767,FR -1572544768,1572546559,IQ +1572544512,1572546559,IQ 1572546560,1572548607,FR 1572548608,1572550655,NL 1572550656,1572552703,DE @@ -29244,11 +31346,12 @@ 1572562944,1572564991,CZ 1572564992,1572567039,DE 1572567040,1572569087,RU -1572571136,1572573183,RO -1572573184,1572574463,GG -1572574464,1572574719,GB -1572574720,1572574975,GG -1572574976,1572575231,GB +1572571136,1572572159,RO +1572572160,1572573183,BG +1572573184,1572573951,GG +1572573952,1572574207,GB +1572574208,1572574463,GG +1572574464,1572575231,GB 1572575232,1572577279,RU 1572577280,1572579327,AM 1572579328,1572581375,GB @@ -29314,8 +31417,9 @@ 1572706304,1572708351,DE 1572708352,1572708607,GB 1572708608,1572709375,GG -1572709376,1572710143,GB -1572710144,1572710399,GG +1572709376,1572709887,GB +1572709888,1572710143,GG +1572710144,1572710399,GB 1572710400,1572712447,DE 1572712448,1572714495,ES 1572714496,1572714943,NG @@ -29406,15 +31510,49 @@ 1578585088,1578586111,PT 1578586112,1578588159,ES 1578588160,1578590207,PL -1578590208,1578590787,FR +1578590208,1578590223,FR +1578590224,1578590231,CH +1578590232,1578590347,FR +1578590348,1578590351,FI +1578590352,1578590367,IT +1578590368,1578590603,FR +1578590604,1578590607,GB +1578590608,1578590659,FR +1578590660,1578590663,PL +1578590664,1578590719,FR +1578590720,1578590727,ES +1578590728,1578590731,GB +1578590732,1578590767,FR +1578590768,1578590783,BE +1578590784,1578590787,FR 1578590788,1578590791,ES 1578590792,1578590851,FR 1578590852,1578590855,ES 1578590856,1578590863,FR 1578590864,1578590879,BE -1578590880,1578591695,FR +1578590880,1578590895,GB +1578590896,1578590975,FR +1578590976,1578590991,IT +1578590992,1578591087,FR +1578591088,1578591103,GB +1578591104,1578591231,FR +1578591232,1578591247,NL +1578591248,1578591263,GB +1578591264,1578591391,FR +1578591392,1578591399,BE +1578591400,1578591663,FR +1578591664,1578591679,GB +1578591680,1578591695,FR 1578591696,1578591699,ES -1578591700,1578592167,FR +1578591700,1578591799,FR +1578591800,1578591807,PL +1578591808,1578591823,ES +1578591824,1578591903,FR +1578591904,1578591919,PL +1578591920,1578591983,FR +1578591984,1578591999,ES +1578592000,1578592163,FR +1578592164,1578592167,DE 1578592168,1578592171,IT 1578592172,1578592175,FR 1578592176,1578592183,CZ @@ -29423,34 +31561,211 @@ 1578592200,1578592207,CH 1578592208,1578592295,FR 1578592296,1578592303,NL -1578592304,1578593023,FR +1578592304,1578592379,FR +1578592380,1578592383,GB +1578592384,1578592511,FR +1578592512,1578592519,ES +1578592520,1578592543,FR +1578592544,1578592559,GB +1578592560,1578592575,BE +1578592576,1578592687,FR +1578592688,1578592695,ES +1578592696,1578592735,FR +1578592736,1578592743,FI +1578592744,1578592799,FR +1578592800,1578592803,NL +1578592804,1578592811,FR +1578592812,1578592815,ES +1578592816,1578592855,FR +1578592856,1578592859,PL +1578592860,1578592863,FR +1578592864,1578592879,DE +1578592880,1578592883,GB +1578592884,1578592991,FR +1578592992,1578593007,NL +1578593008,1578593023,FR 1578593024,1578593279,DE -1578593280,1578593439,FR +1578593280,1578593323,FR +1578593324,1578593327,DE +1578593328,1578593415,FR +1578593416,1578593423,IT +1578593424,1578593439,FR 1578593440,1578593443,ES -1578593444,1578593551,FR +1578593444,1578593479,FR +1578593480,1578593483,ES +1578593484,1578593491,FR +1578593492,1578593495,GB +1578593496,1578593551,FR 1578593552,1578593559,NL -1578593560,1578593955,FR +1578593560,1578593587,FR +1578593588,1578593591,GB +1578593592,1578593671,FR +1578593672,1578593679,CH +1578593680,1578593703,FR +1578593704,1578593711,ES +1578593712,1578593807,FR +1578593808,1578593823,DE +1578593824,1578593939,FR +1578593940,1578593943,PL +1578593944,1578593955,FR 1578593956,1578593959,ES -1578593960,1578595367,FR +1578593960,1578594063,FR +1578594064,1578594079,PL +1578594080,1578594095,FR +1578594096,1578594111,PL +1578594112,1578594143,FR +1578594144,1578594147,ES +1578594148,1578594151,FR +1578594152,1578594159,ES +1578594160,1578594163,IT +1578594164,1578594239,FR +1578594240,1578594255,PT +1578594256,1578594271,IT +1578594272,1578594303,BE +1578594304,1578594359,FR +1578594360,1578594363,NL +1578594364,1578594367,FR +1578594368,1578594371,IT +1578594372,1578594383,FR +1578594384,1578594399,IT +1578594400,1578594523,FR +1578594524,1578594527,CH +1578594528,1578594547,FR +1578594548,1578594551,IT +1578594552,1578594559,FR +1578594560,1578594815,ES +1578594816,1578594879,FR +1578594880,1578594895,FI +1578594896,1578595203,FR +1578595204,1578595207,GB +1578595208,1578595215,FR +1578595216,1578595231,IE +1578595232,1578595367,FR 1578595368,1578595371,IT -1578595372,1578595419,FR +1578595372,1578595379,FR +1578595380,1578595383,ES +1578595384,1578595419,FR 1578595420,1578595423,GB -1578595424,1578595987,FR +1578595424,1578595439,FR +1578595440,1578595447,NL +1578595448,1578595535,FR +1578595536,1578595543,LT +1578595544,1578595551,FR +1578595552,1578595559,NL +1578595560,1578595583,FR +1578595584,1578595599,BE +1578595600,1578595607,FR +1578595608,1578595611,GB +1578595612,1578595615,FR +1578595616,1578595619,ES +1578595620,1578595627,FR +1578595628,1578595631,ES +1578595632,1578595663,FR +1578595664,1578595679,ES +1578595680,1578595747,FR +1578595748,1578595751,CH +1578595752,1578595767,FR +1578595768,1578595775,ES +1578595776,1578595871,FR +1578595872,1578595903,IT +1578595904,1578595911,GB +1578595912,1578595987,FR 1578595988,1578595991,ES -1578595992,1578602495,FR +1578595992,1578596119,FR +1578596120,1578596123,IT +1578596124,1578596143,FR +1578596144,1578596147,ES +1578596148,1578596159,FR +1578596160,1578596167,DE +1578596168,1578596239,FR +1578596240,1578596255,ES +1578596256,1578596351,FR +1578596352,1578596863,GB +1578596864,1578602495,FR 1578602496,1578604543,NL 1578604544,1578606591,GB 1578606592,1578607725,DE 1578607726,1578607726,FR 1578607727,1578608639,DE 1578608640,1578610687,CZ -1578610688,1578612907,FR +1578610688,1578610779,FR +1578610780,1578610783,DE +1578610784,1578610819,FR +1578610820,1578610823,ES +1578610824,1578610827,FR +1578610828,1578610831,IT +1578610832,1578610847,FR +1578610848,1578610851,DE +1578610852,1578610855,FR +1578610856,1578610859,IT +1578610860,1578610871,FR +1578610872,1578610879,PL +1578610880,1578611051,FR +1578611052,1578611055,NL +1578611056,1578611127,FR +1578611128,1578611135,NL +1578611136,1578611151,FR +1578611152,1578611167,GB +1578611168,1578611199,FR +1578611200,1578611215,BE +1578611216,1578611239,FR +1578611240,1578611243,DE +1578611244,1578611423,FR +1578611424,1578611439,PT +1578611440,1578611443,FR +1578611444,1578611447,IT +1578611448,1578611455,FI +1578611456,1578611583,IE +1578611584,1578611711,GB +1578611712,1578611907,FR +1578611908,1578611911,PT +1578611912,1578611919,FR +1578611920,1578611935,IT +1578611936,1578612255,FR +1578612256,1578612263,DE +1578612264,1578612271,FR +1578612272,1578612287,GB +1578612288,1578612303,FR +1578612304,1578612319,DE +1578612320,1578612523,FR +1578612524,1578612527,PL +1578612528,1578612579,FR +1578612580,1578612583,BE +1578612584,1578612591,FI +1578612592,1578612899,FR +1578612900,1578612903,ES +1578612904,1578612907,FR 1578612908,1578612911,ES -1578612912,1578613735,FR +1578612912,1578612943,FR +1578612944,1578612959,NL +1578612960,1578612979,FR +1578612980,1578612983,IE +1578612984,1578612991,FR +1578612992,1578613247,IT +1578613248,1578613279,ES +1578613280,1578613427,FR +1578613428,1578613431,BE +1578613432,1578613663,FR +1578613664,1578613679,IT +1578613680,1578613711,FR +1578613712,1578613719,BE +1578613720,1578613735,FR 1578613736,1578613739,ES -1578613740,1578613931,FR +1578613740,1578613759,FR +1578613760,1578613775,GB +1578613776,1578613787,FR +1578613788,1578613791,DE +1578613792,1578613823,FR +1578613824,1578613839,NL +1578613840,1578613847,GB +1578613848,1578613855,IT +1578613856,1578613931,FR 1578613932,1578613935,NL -1578613936,1578614271,FR +1578613936,1578614003,FR +1578614004,1578614007,CZ +1578614008,1578614047,FR +1578614048,1578614055,ES +1578614056,1578614271,FR 1578614272,1578614527,ES 1578614528,1578631167,FR 1578631168,1578663935,RO @@ -29475,7 +31790,7 @@ 1580007424,1580015615,RU 1580015616,1580048383,UA 1580048384,1580064767,RU -1580064768,1580072959,DE +1580064768,1580072959,GB 1580072960,1580134399,PT 1580134400,1580136447,ES 1580136448,1580138495,PT @@ -29485,19 +31800,7 @@ 1580466176,1580597247,RO 1580597248,1580728319,TR 1580728320,1580990463,AE -1580990464,1580999679,PT -1580999680,1580999935,RO -1580999936,1581001215,PT -1581001216,1581001471,RO -1581001472,1581118463,PT -1581118464,1581118719,RO -1581118720,1581126655,PT -1581126656,1581127167,RO -1581127168,1581132031,PT -1581132032,1581132287,RO -1581132288,1581208575,PT -1581208576,1581208831,RO -1581208832,1581252607,PT +1580990464,1581252607,PT 1581252608,1581776895,GR 1581776896,1581793279,RU 1581793280,1581809663,PL @@ -29548,7 +31851,9 @@ 1583616000,1583620095,NL 1583620096,1583624191,IT 1583624192,1583624447,XK -1583624448,1583628287,RS +1583624448,1583626751,RS +1583626752,1583627007,XK +1583627008,1583628287,RS 1583628288,1583632383,DE 1583632384,1583636479,RU 1583636480,1583640575,MK @@ -29559,7 +31864,9 @@ 1583656960,1583665151,RU 1583665152,1583669247,UA 1583669248,1583673343,GE -1583673344,1583677439,DE +1583673344,1583675647,DE +1583675648,1583675903,US +1583675904,1583677439,DE 1583677440,1583681535,FI 1583681536,1583685631,PL 1583685632,1583689727,DE @@ -29567,6 +31874,7 @@ 1583693824,1583697919,RU 1583697920,1583702015,TR 1583702016,1583706111,RU +1583706624,1583706879,RU 1583710208,1583714303,IR 1583714304,1583722495,GB 1583722496,1583726591,IR @@ -29583,7 +31891,9 @@ 1583767552,1583771647,AT 1583771648,1583775743,RU 1583775744,1583779839,IT -1583779840,1583780263,GB +1583779840,1583780047,GB +1583780048,1583780055,IT +1583780056,1583780263,GB 1583780264,1583780271,IT 1583780272,1583780335,GB 1583780336,1583780343,IT @@ -29630,9 +31940,7 @@ 1583861760,1583865855,LU 1583865856,1583869951,RU 1583869952,1583874047,KZ -1583874048,1584119935,BE -1584119936,1584120063,FR -1584120064,1584398335,BE +1583874048,1584398335,BE 1584398336,1584529407,CZ 1584529408,1584660479,DE 1584660480,1584857087,GB @@ -29655,9 +31963,8 @@ 1585219584,1585221631,NL 1585221632,1585223679,SK 1585223680,1585224959,FR -1585224960,1585225215,RE -1585225216,1585225471,FR -1585225472,1585225727,YT +1585224960,1585225471,RE +1585225472,1585225727,FR 1585225728,1585227007,UA 1585227008,1585227263,RU 1585227264,1585227775,UA @@ -29665,9 +31972,11 @@ 1585231872,1585233919,CZ 1585233920,1585238015,RU 1585238016,1585240063,DE -1585240064,1585240575,FR -1585240576,1585241855,MQ -1585241856,1585242111,GP +1585240064,1585240319,FR +1585240320,1585240575,GP +1585240576,1585240831,MQ +1585240832,1585241087,FR +1585241088,1585242111,MQ 1585242112,1585244159,RU 1585244160,1585246207,FR 1585246208,1585248255,RU @@ -29713,7 +32022,8 @@ 1585334272,1585336319,DE 1585336320,1585338367,SE 1585338368,1585340415,RU -1585340416,1585342463,AT +1585340416,1585340671,DE +1585340672,1585342463,AT 1585342464,1585344511,GB 1585344512,1585346559,FR 1585346560,1585348607,GB @@ -29791,9 +32101,7 @@ 1586151424,1586159615,TR 1586159616,1586167807,MT 1586167808,1586175999,DE -1586176000,1586177151,BE -1586177152,1586177279,DE -1586177280,1586184191,BE +1586176000,1586184191,BE 1586184192,1586192383,NO 1586192384,1586200575,RU 1586200576,1586208767,MD @@ -29934,11 +32242,17 @@ 1589608448,1589608703,SE 1589608704,1589608959,DK 1589608960,1589609215,SE -1589609216,1589611519,DK +1589609216,1589609983,DK +1589609984,1589610239,SE +1589610240,1589610495,DK +1589610496,1589611263,SE +1589611264,1589611519,DK 1589611520,1589611775,SE -1589611776,1589612287,DK -1589612288,1589620735,SE -1589620736,1589641215,DK +1589611776,1589612031,DK +1589612032,1589620991,SE +1589620992,1589621247,DK +1589621248,1589621503,SE +1589621504,1589641215,DK 1589641216,1590034431,GB 1590034432,1590036479,RU 1590036480,1590038527,GB @@ -30001,9 +32315,7 @@ 1590165504,1590689791,AE 1590689792,1591214079,NL 1591214080,1591738367,DE -1591738368,1591977471,BE -1591977472,1591977599,NL -1591977600,1592000511,BE +1591738368,1592000511,BE 1592000512,1592004607,ES 1592004608,1592008703,AM 1592008704,1592012799,GB @@ -30121,7 +32433,9 @@ 1593147392,1593163775,RU 1593163776,1593180159,AT 1593180160,1593196543,NO -1593196544,1593212927,SE +1593196544,1593203103,SE +1593203104,1593203135,FI +1593203136,1593212927,SE 1593212928,1593229311,PL 1593229312,1593245695,EE 1593245696,1593247743,NL @@ -30164,7 +32478,11 @@ 1593421568,1593421823,GB 1593421824,1593422591,DE 1593422592,1593422847,GB -1593422848,1593442303,DE +1593422848,1593431167,DE +1593431168,1593431295,GB +1593431296,1593440511,DE +1593440512,1593440767,GB +1593440768,1593442303,DE 1593442304,1593475071,BA 1593475072,1593491455,HR 1593491456,1593499647,DE @@ -30211,13 +32529,11 @@ 1596932096,1596940543,CZ 1596940544,1596940799,RU 1596940800,1596941055,UA -1596941056,1596941311,CZ +1596941056,1596941311,BY 1596941312,1596942335,RU 1596942336,1596945407,UA 1596945408,1596945919,CZ -1596945920,1596946175,RU -1596946176,1596946431,NL -1596946432,1596947455,RU +1596945920,1596947455,RU 1596947456,1596948479,UA 1596948480,1596950527,BY 1596950528,1596950783,UA @@ -30231,8 +32547,8 @@ 1596954624,1596954879,RU 1596954880,1596955391,CZ 1596955392,1596955647,RU -1596955648,1596956415,CZ -1596956416,1596956671,RU +1596955648,1596956159,CZ +1596956160,1596956671,RU 1596956672,1596956927,CZ 1596956928,1596956963,DE 1596956964,1596956964,RU @@ -30250,9 +32566,7 @@ 1596963328,1596963839,CZ 1596963840,1596964095,KZ 1596964096,1596964607,CZ -1596964608,1596965887,RU -1596965888,1596966911,KG -1596966912,1596967167,RU +1596964608,1596967167,RU 1596967168,1596967423,CZ 1596967424,1596967935,RU 1596967936,1596968959,UA @@ -30348,7 +32662,9 @@ 1602230271,1602230271,DE 1602230272,1602232319,DK 1602232320,1602234367,CH -1602234368,1602236415,FR +1602234368,1602235967,FR +1602235968,1602235999,ES +1602236000,1602236415,FR 1602236416,1602238463,GB 1602238464,1602240511,TR 1602240512,1602242559,BY @@ -30469,25 +32785,9 @@ 1602781184,1602813951,FR 1602813952,1602846719,RU 1602846720,1602879487,GE -1602879488,1602879488,MQ -1602879489,1602879743,RE -1602879744,1602882303,MQ -1602882304,1602882559,RE -1602882560,1602885631,MQ -1602885632,1602885887,RE -1602885888,1602891775,MQ -1602891776,1602892031,RE -1602892032,1602894847,MQ -1602894848,1602895103,RE -1602895104,1602896383,MQ -1602896384,1602896639,RE -1602896640,1602896924,MQ +1602879488,1602896924,MQ 1602896925,1602896925,RE -1602896926,1602897407,MQ -1602897408,1602897663,RE -1602897664,1602907135,MQ -1602907136,1602907391,RE -1602907392,1602912255,MQ +1602896926,1602912255,MQ 1602912256,1602928639,GB 1602928640,1602930687,HU 1602930688,1602932735,GB @@ -30520,8 +32820,7 @@ 1603081256,1603081263,FI 1603081264,1603081279,GB 1603081280,1603081295,US -1603081296,1603081407,GB -1603081408,1603081471,ES +1603081296,1603081471,ES 1603081472,1603082239,GB 1603082240,1603082495,DE 1603082496,1603082751,GT @@ -30570,9 +32869,8 @@ 1603207168,1603215359,RU 1603215360,1603219455,DE 1603219456,1603223551,CH -1603223552,1603225087,GB -1603225088,1603225343,FR -1603225344,1603227647,GB +1603223552,1603223807,FR +1603223808,1603227647,GB 1603227648,1603231743,AT 1603231744,1603235839,IT 1603235840,1603239935,RU @@ -30582,11 +32880,7 @@ 1603252224,1603256319,RU 1603256320,1603260415,SE 1603260416,1603264511,RU -1603264512,1603266559,AT -1603266560,1603266815,HU -1603266816,1603267711,AT -1603267712,1603267839,SK -1603267840,1603268607,AT +1603264512,1603268607,AT 1603268608,1603272703,PL 1603272704,1603796991,GB 1603796992,1603813375,RU @@ -30666,15 +32960,11 @@ 1605109432,1605109439,IT 1605109440,1605109495,GB 1605109496,1605109503,IT -1605109504,1605109599,GB -1605109600,1605109607,IT -1605109608,1605109639,GB +1605109504,1605109639,GB 1605109640,1605109647,IT 1605109648,1605110111,GB 1605110112,1605110119,IT -1605110120,1605110167,GB -1605110168,1605110175,IT -1605110176,1605110263,GB +1605110120,1605110263,GB 1605110264,1605110271,IT 1605110272,1605111023,GB 1605111024,1605111031,IT @@ -30686,13 +32976,9 @@ 1605111920,1605111927,IT 1605111928,1605111935,GB 1605111936,1605111943,IT -1605111944,1605112647,GB -1605112648,1605112655,IT -1605112656,1605112847,GB +1605111944,1605112847,GB 1605112848,1605112855,IT -1605112856,1605112983,GB -1605112984,1605112991,IT -1605112992,1605113087,GB +1605112856,1605113087,GB 1605113088,1605113095,IT 1605113096,1605113383,GB 1605113384,1605113391,IT @@ -30700,7 +32986,13 @@ 1605113408,1605113415,IT 1605113416,1605113503,GB 1605113504,1605113511,IT -1605113512,1605114199,GB +1605113512,1605113567,GB +1605113568,1605113575,IT +1605113576,1605113839,GB +1605113840,1605113847,IT +1605113848,1605114071,GB +1605114072,1605114079,IT +1605114080,1605114199,GB 1605114200,1605114207,IT 1605114208,1605114263,GB 1605114264,1605114271,IT @@ -30716,14 +33008,14 @@ 1605115600,1605115607,IT 1605115608,1605115863,GB 1605115864,1605115871,IT -1605115872,1605115879,GB -1605115880,1605115887,IT -1605115888,1605115903,GB +1605115872,1605115903,GB 1605115904,1605124095,RU 1605124096,1605125263,GB 1605125264,1605125267,DE 1605125268,1605125269,GB -1605125270,1605125279,DE +1605125270,1605125275,DE +1605125276,1605125276,GB +1605125277,1605125279,DE 1605125280,1605125903,GB 1605125904,1605125919,DE 1605125920,1605130239,GB @@ -30778,37 +33070,30 @@ 1605734537,1605735423,GB 1605735424,1605742591,RU 1605742592,1605744639,GB -1605744640,1605750783,RU -1605750784,1605751807,GB -1605751808,1605763071,RU -1605763072,1605765119,KZ -1605765120,1605795839,RU +1605744640,1605763071,RU +1605763072,1605767167,KZ +1605767168,1605795839,RU 1605795840,1605828607,BE 1605828608,1605828863,GB -1605828864,1605830399,IL +1605828864,1605829375,US +1605829376,1605830399,IL 1605830400,1605830655,US 1605830656,1605840895,RU 1605840896,1605844991,CH 1605844992,1605861375,RU 1605861376,1605894143,TR -1605894144,1606156287,RO +1605894144,1606156287,SA 1606156288,1606418431,RU 1606418432,1606636287,SE 1606636288,1606636543,GB 1606636544,1607467007,SE 1607467008,1607532543,DE -1607532544,1607562495,SE -1607562496,1607562751,DK -1607562752,1607569407,SE +1607532544,1607569407,SE 1607569408,1607572479,DK 1607572480,1607575551,SE 1607575552,1607577599,GB 1607577600,1607581695,SE -1607581696,1607584511,DK -1607584512,1607584767,SE -1607584768,1607585023,DK -1607585024,1607585279,SE -1607585280,1607595263,DK +1607581696,1607595263,DK 1607595264,1607595519,SE 1607595520,1607598079,DK 1607598080,1607601919,IT @@ -30835,14 +33120,13 @@ 1607640807,1607647231,IT 1607647232,1607651327,DE 1607651328,1607655423,FR -1607655424,1607660287,IT -1607660288,1607660543,PT -1607660544,1607663615,IT +1607655424,1607663615,IT 1607663616,1607729151,NL 1607729152,1607737343,SY -1607737344,1607761919,EG -1607761920,1607766015,SY -1607766016,1607794687,EG +1607737344,1607745535,EG +1607745536,1607766015,SY +1607766016,1607778303,EG +1607778304,1607794687,SY 1607794688,1607860223,RU 1607860224,1607892991,ES 1607892992,1607893055,GB @@ -30923,15 +33207,17 @@ 1611923456,1612185599,CA 1612185600,1612611327,US 1612611328,1612636159,CA -1612636160,1613405695,US -1613405696,1613405951,CA -1613405952,1613471743,US +1612636160,1613405183,US +1613405184,1613405311,CA +1613405312,1613471743,US 1613471744,1613479935,JM 1613479936,1613480191,CA 1613480192,1613488127,US 1613488128,1613492223,CA 1613492224,1613504511,US -1613504512,1613529087,CA +1613504512,1613522431,CA +1613522432,1613522687,US +1613522688,1613529087,CA 1613529088,1613545471,US 1613545472,1613565951,CA 1613565952,1613606911,US @@ -30951,15 +33237,13 @@ 1613742080,1613758463,US 1613758464,1614282751,CA 1614282752,1614741503,US -1614741504,1614743039,CA -1614743040,1614743295,US -1614743296,1614757887,CA +1614741504,1614743295,CA +1614743296,1614743551,US +1614743552,1614757887,CA 1614757888,1614774271,US 1614774272,1614786559,CA 1614786560,1618837503,US -1618837504,1618840319,CA -1618840320,1618840575,US -1618840576,1618841599,CA +1618837504,1618841599,CA 1618841600,1618849791,US 1618849792,1618850303,CA 1618850304,1618850559,US @@ -30974,9 +33258,9 @@ 1632354304,1632362495,CA 1632362496,1632978303,US 1632978304,1632978431,CA -1632978432,1632979583,US -1632979584,1632979711,CA -1632979712,1634414591,US +1632978432,1632979071,US +1632979072,1632979199,CA +1632979200,1634414591,US 1634414592,1634418687,CA 1634418688,1634447359,US 1634447360,1634451455,CA @@ -30986,9 +33270,11 @@ 1634467840,1634729983,CA 1634729984,1652293631,US 1652293632,1652310015,CA -1652310016,1652447849,US -1652447850,1652447850,CN -1652447851,1652481279,US +1652310016,1652447743,US +1652447744,1652447999,CN +1652448000,1652461823,US +1652461824,1652462079,CN +1652462080,1652481279,US 1652481280,1652481791,CN 1652481792,1653500927,US 1653500928,1653501439,IL @@ -31010,9 +33296,7 @@ 1654554624,1654558719,CA 1654558720,1654648831,US 1654648832,1654652927,CA -1654652928,1656731007,US -1656731008,1656731135,VI -1656731136,1673527295,US +1654652928,1673527295,US 1673527296,1673560063,CA 1673560064,1673580287,US 1673580288,1673580543,CA @@ -31024,7 +33308,35 @@ 1680535552,1680539647,CA 1680539648,1680564223,US 1680564224,1680572415,CA -1680572416,1681915903,US +1680572416,1680627199,US +1680627200,1680627263,CA +1680627264,1680646399,US +1680646400,1680646655,CA +1680646656,1680646911,US +1680646912,1680647423,CA +1680647424,1680651775,US +1680651776,1680652031,CA +1680652032,1680652351,US +1680652352,1680652543,CA +1680652544,1680732927,US +1680732928,1680733183,CA +1680733184,1680734719,US +1680734720,1680734975,CA +1680734976,1680749567,US +1680749568,1680749695,CA +1680749696,1680780927,US +1680780928,1680781055,CA +1680781056,1680781439,US +1680781440,1680781567,CA +1680781568,1680798591,US +1680798592,1680798719,CA +1680798720,1680801023,US +1680801024,1680801151,CA +1680801152,1680808703,US +1680808704,1680808831,CA +1680808832,1680814399,US +1680814400,1680814463,PR +1680814464,1681915903,US 1686110208,1694498815,US 1694498816,1694499839,CN 1694499840,1694500863,ID @@ -31091,8 +33403,8 @@ 1701003264,1701011455,MY 1701011456,1701019647,CN 1701019648,1701052415,GU -1701052416,1701101567,NZ -1701101568,1701117951,SG +1701052416,1701093375,NZ +1701093376,1701117951,SG 1701117952,1701134335,NC 1701134336,1701142527,CN 1701142528,1701143551,HK @@ -31127,8 +33439,13 @@ 1703411712,1703673855,TW 1703673856,1703935999,JP 1703936000,1704984575,CN -1704984576,1705498623,AU -1705498624,1705500671,GB +1704984576,1705488383,AU +1705488384,1705489407,HK +1705489408,1705490431,SG +1705490432,1705491455,GB +1705491456,1705494527,HK +1705494528,1705497599,SG +1705497600,1705500671,GB 1705500672,1707081727,AU 1707081728,1707737087,CN 1707737088,1707802623,KR @@ -31170,7 +33487,8 @@ 1728140288,1728141311,SG 1728141312,1728142335,CN 1728142336,1728143359,NP -1728143360,1728144383,MP +1728143360,1728143615,GU +1728143616,1728144383,MP 1728144384,1728145407,IN 1728145408,1728146431,MY 1728146432,1728147455,AU @@ -31270,7 +33588,6 @@ 1728316416,1728317439,MY 1728317440,1728319487,JP 1728319488,1728320511,AU -1728321536,1728322559,JP 1728322560,1728323583,MY 1728323584,1728324607,JP 1728324608,1728325631,SG @@ -31297,7 +33614,11 @@ 1728346112,1728346367,AU 1728346368,1728346623,NZ 1728346624,1728347135,AU -1728347136,1728348159,SG +1728347136,1728347391,SG +1728347392,1728347421,AU +1728347422,1728347422,SG +1728347423,1728347647,AU +1728347648,1728348159,SG 1728348160,1728349183,VN 1728349184,1728349951,AU 1728349952,1728350207,NP @@ -31633,19 +33954,17 @@ 1728673792,1728674815,JP 1728674816,1728675839,ID 1728675840,1728676863,KR -1728676864,1728677887,IN 1728677888,1728678911,BD +1728678912,1728679935,PG 1728679936,1728680959,ID 1728680960,1728681983,MY 1728681984,1728683007,CN -1728683008,1728684031,BD 1728684032,1728685055,AU 1728685056,1728686079,JP 1728686080,1728687103,AU 1728687104,1728689407,JP 1728689408,1728689663,BD 1728689664,1728689919,PK -1728689920,1728690175,SG 1728690176,1728691199,BD 1728691200,1728692223,KH 1728692224,1728693247,JP @@ -31726,7 +34045,6 @@ 1728762880,1728763903,VN 1728763904,1728764927,KR 1728764928,1728765439,SG -1728765440,1728765695,IN 1728765696,1728765951,ID 1728765952,1728766975,IN 1728766976,1728767999,TH @@ -31826,7 +34144,7 @@ 1728855040,1728856063,HK 1728856064,1728857087,MY 1728857088,1728858111,CN -1728858112,1728860159,BD +1728858112,1728859135,BD 1728860160,1728860671,ID 1728860672,1728861183,BD 1728861184,1728861439,ID @@ -31849,7 +34167,6 @@ 1728878592,1728879615,MY 1728879616,1728880127,IN 1728880128,1728880383,JP -1728880384,1728880639,MY 1728880640,1728881663,KH 1728881664,1728881919,ID 1728881920,1728882175,AU @@ -31879,7 +34196,6 @@ 1728901632,1728902143,ID 1728902144,1728902399,SG 1728902400,1728902655,IN -1728902656,1728902911,MY 1728902912,1728903167,BD 1728903168,1728905215,KR 1728905472,1728905727,PK @@ -31910,7 +34226,6 @@ 1728935936,1728936959,MY 1728936960,1728937983,CN 1728937984,1728939007,SG -1728939008,1728939519,MY 1728939520,1728939775,PH 1728939776,1728940031,IN 1728940032,1728942079,JP @@ -31952,7 +34267,6 @@ 1728974848,1728976383,ID 1728976384,1728976895,AU 1728976896,1728977151,AF -1728977664,1728977919,BD 1728977920,1728978943,MY 1728978944,1728979967,JP 1728979968,1728980991,MN @@ -31967,12 +34281,11 @@ 1728988160,1728988191,NZ 1728988192,1728988199,US 1728988200,1728989183,NZ -1728989184,1728990207,BD +1728989184,1728989695,BD 1728990208,1728990335,MY 1728990336,1728990463,ID 1728990464,1728990975,KR 1728990976,1728991231,SG -1728991232,1728992255,BD 1728992256,1728993279,CN 1728993280,1728994303,PG 1728994304,1728995327,AU @@ -32013,15 +34326,13 @@ 1729029120,1729029375,AU 1729029376,1729029631,ID 1729029632,1729029887,AU -1729029888,1729030143,PK 1729030144,1729031167,IN 1729031168,1729032191,SG 1729032192,1729033215,CN 1729033216,1729033727,SG 1729033728,1729034239,GB 1729034240,1729035263,KH -1729035264,1729035519,SG -1729035520,1729036287,AU +1729035264,1729036287,AU 1729036288,1729037311,JP 1729037312,1729039359,CN 1729039360,1729040383,JP @@ -32035,7 +34346,6 @@ 1729047552,1729048575,AU 1729048576,1729049599,VN 1729049600,1729050623,IN -1729050624,1729051647,JP 1729051648,1729053695,IN 1729053696,1729054719,JP 1729054720,1729055231,AU @@ -32045,7 +34355,6 @@ 1729056768,1729057791,IN 1729057792,1729058815,HK 1729058816,1729059839,TH -1729059840,1729060863,JP 1729060864,1729061887,CN 1729061888,1729062911,SG 1729062912,1729063935,MY @@ -32084,7 +34393,7 @@ 1729090560,1729091583,JP 1729091584,1729092607,HK 1729092608,1729094143,BD -1729094144,1729094655,IN +1729094400,1729094655,IN 1729094656,1729095167,AU 1729095680,1729096703,SG 1729096704,1729097215,AU @@ -32100,11 +34409,8 @@ 1729105664,1729105919,VU 1729105920,1729106943,SG 1729106944,1729107967,NZ -1729107968,1729108479,IN -1729108480,1729108616,KR -1729108617,1729108617,HK -1729108618,1729108735,KR -1729108736,1729108991,HK +1729108480,1729108607,KR +1729108608,1729108991,HK 1729108992,1729111039,IN 1729111040,1729112063,JP 1729112064,1729113087,MY @@ -32200,7 +34506,6 @@ 1729190912,1729191935,HK 1729191936,1729195007,IN 1729195008,1729195519,MN -1729195520,1729196031,BD 1729196032,1729197055,GU 1729197056,1729198079,HK 1729198080,1729199103,CN @@ -32259,7 +34564,7 @@ 1729248256,1729249279,JP 1729249280,1729252351,IN 1729254400,1729255423,AU -1729255424,1729256447,MY +1729255424,1729257471,MY 1729257472,1729258495,ID 1729258496,1729259519,JP 1729259520,1729260543,IN @@ -32375,7 +34680,7 @@ 1729376768,1729377023,SG 1729377024,1729377279,ID 1729377280,1729378303,BD -1729378304,1729378815,IN +1729378560,1729378815,IN 1729379072,1729379327,SG 1729379328,1729380351,HK 1729380352,1729381375,IN @@ -32388,14 +34693,13 @@ 1729387008,1729387519,ID 1729387520,1729388543,SG 1729388544,1729389567,HK -1729389568,1729389823,IN 1729390592,1729391103,IN 1729391104,1729391615,ID 1729391616,1729392639,JP 1729392640,1729393663,CN 1729393664,1729394687,KR 1729394688,1729395711,TH -1729395712,1729395967,NR +1729395712,1729395967,AU 1729395968,1729396735,IN 1729396736,1729397759,CN 1729397760,1729398783,PK @@ -32745,7 +35049,6 @@ 1729774592,1729775615,AU 1729775616,1729776127,IN 1729776128,1729776639,MY -1729776640,1729777663,IN 1729777664,1729779711,PK 1729779712,1729780735,AU 1729780736,1729781759,HK @@ -32754,7 +35057,6 @@ 1729783552,1729783807,NZ 1729783808,1729785855,IN 1729785856,1729786879,BD -1729786880,1729787903,JP 1729787904,1729789951,HK 1729789952,1729790975,ID 1729792000,1729793023,BD @@ -32803,13 +35105,11 @@ 1729832448,1729832959,AU 1729832960,1729833983,JP 1729833984,1729835007,SG -1729835008,1729836031,IN 1729836032,1729837055,NZ 1729837056,1729838079,CN 1729838080,1729840127,VN 1729840128,1729841151,JP 1729841152,1729842175,MY -1729842176,1729843199,HK 1729843200,1729844223,JP 1729844224,1729845247,IN 1729845248,1729846271,NZ @@ -32868,7 +35168,6 @@ 1729884160,1729885183,CN 1729885184,1729886207,JP 1729886208,1729887743,ID -1729887744,1729887999,VU 1729888000,1729888255,IN 1729888256,1729889279,KH 1729889280,1729891327,CN @@ -33059,9 +35358,7 @@ 1730082816,1730083839,PW 1730083840,1730084863,JP 1730084864,1730085887,CN -1730085888,1730086143,AU -1730086144,1730086399,ID -1730086400,1730086911,AU +1730085888,1730086911,AU 1730086912,1730087935,HK 1730087936,1730088959,JP 1730088960,1730091007,HK @@ -33118,6 +35415,328 @@ 1730147328,1730148351,JP 1730148352,1730149375,ID 1730149376,1730150399,JP +1730150400,1730360319,CN +1730412544,1730414591,AU +1730414592,1730415615,ID +1730415616,1730416127,AU +1730416128,1730416639,ID +1730416640,1730417663,PH +1730417664,1730418687,CN +1730418688,1730419711,BD +1730419712,1730420735,CN +1730420736,1730421759,ID +1730421760,1730422783,CN +1730422784,1730423807,ID +1730423808,1730425855,IN +1730425856,1730426879,HK +1730426880,1730429951,CN +1730429952,1730430207,ID +1730430208,1730430463,AU +1730430464,1730430719,HK +1730430720,1730430975,IN +1730430976,1730431999,CN +1730432000,1730435071,IN +1730435072,1730436095,HK +1730436096,1730437119,SG +1730437120,1730438143,CN +1730438144,1730439167,BD +1730439168,1730440191,IN +1730440192,1730442239,HK +1730442240,1730443263,TW +1730443264,1730445311,IN +1730445312,1730445567,NZ +1730445568,1730446335,AU +1730446336,1730448383,CN +1730448384,1730449407,JP +1730449408,1730450431,VU +1730450432,1730450687,AU +1730450688,1730450943,IN +1730450944,1730451455,PH +1730451456,1730452479,AU +1730452480,1730453503,ID +1730453504,1730476031,CN +1730476032,1730476543,AU +1730476544,1730476799,NZ +1730476800,1730477055,IN +1730477056,1730478079,AU +1730478080,1730479103,CN +1730479104,1730480127,HK +1730480128,1730480639,AU +1730480640,1730481151,JP +1730481152,1730483199,CN +1730483200,1730483711,IN +1730483712,1730484223,AU +1730484224,1730485247,CN +1730485248,1730487295,VN +1730487296,1730488319,TW +1730488320,1730489343,HK +1730489344,1730490367,CN +1730490368,1730491391,PH +1730491392,1730493439,CN +1730493440,1730494463,HK +1730494464,1730495487,JP +1730495488,1730496511,AU +1730496512,1730497535,CN +1730497536,1730499583,IN +1730499584,1730500607,HK +1730500608,1730501631,IN +1730501632,1730502655,JP +1730502656,1730503167,MY +1730503168,1730503423,ID +1730503424,1730503679,AU +1730503680,1730505727,CN +1730505728,1730508799,JP +1730508800,1730509823,AU +1730509824,1730510847,CN +1730510848,1730511871,AU +1730511872,1730512895,JP +1730512896,1730521087,CN +1730521088,1730522111,ID +1730522112,1730524159,CN +1730524160,1730525183,IN +1730525184,1730526207,HK +1730526208,1730528255,JP +1730528256,1730529279,SG +1730529280,1730529791,IN +1730529792,1730530303,AU +1730530304,1730531327,NZ +1730531328,1730535423,CN +1730535424,1730536447,ID +1730536448,1730536703,AU +1730536704,1730537471,ID +1730537472,1730538495,HK +1730538496,1730540543,JP +1730540544,1730541567,ID +1730541568,1730544639,CN +1730544640,1730545919,IN +1730545920,1730546687,AU +1730546688,1730547711,IN +1730547712,1730548735,BD +1730548736,1730549759,HK +1730549760,1730550783,KR +1730550784,1730551807,HK +1730551808,1730552831,CN +1730552832,1730553855,IN +1730553856,1730555903,CN +1730555904,1730556415,IN +1730556416,1730556927,HK +1730556928,1730557951,JP +1730557952,1730558975,CN +1730558976,1730559999,MY +1730560000,1730561023,HK +1730561024,1730562047,IN +1730562048,1730563071,SG +1730563072,1730564095,CN +1730564096,1730565119,HK +1730565120,1730566143,CN +1730566144,1730566655,IN +1730566656,1730567167,HK +1730567168,1730569215,CN +1730569216,1730570239,ID +1730570240,1730571263,HK +1730571264,1730572287,IN +1730572288,1730573311,KH +1730573312,1730574335,CN +1730574336,1730575359,AU +1730575360,1730577407,IN +1730577408,1730578431,CN +1730578432,1730579455,VN +1730579456,1730580479,CN +1730580480,1730580735,HK +1730580736,1730580991,AU +1730580992,1730581503,TW +1730581504,1730582015,AU +1730582016,1730582271,IN +1730582272,1730582527,PH +1730582528,1730585599,HK +1730585600,1730586623,NZ +1730586624,1730587647,HK +1730587648,1730588671,PH +1730588672,1730589695,IN +1730589696,1730590719,JP +1730590720,1730591743,SG +1730591744,1730591999,PH +1730592000,1730592767,IN +1730592768,1730593791,MY +1730593792,1730594815,NP +1730594816,1730596863,IN +1730596864,1730597887,JP +1730597888,1730598911,PH +1730598912,1730599423,AU +1730599424,1730599935,VU +1730599936,1730604031,CN +1730605056,1730607103,IN +1730607104,1730608127,JP +1730608128,1730609151,CN +1730609152,1730610687,IN +1730610688,1730610943,MY +1730610944,1730611199,SG +1730611200,1730612223,IN +1730612224,1730613247,ID +1730613248,1730614271,CN +1730614272,1730615295,NZ +1730615296,1730616319,HK +1730616320,1730617343,IN +1730617344,1730618367,TW +1730618368,1730619391,KR +1730619392,1730619903,HK +1730619904,1730620415,SG +1730620416,1730621439,NZ +1730621440,1730622719,ID +1730622720,1730622975,AU +1730622976,1730623231,IN +1730623232,1730623487,AU +1730623488,1730624511,HK +1730624512,1730625535,AU +1730625536,1730626559,CN +1730626560,1730629631,HK +1730629632,1730630655,PK +1730630656,1730631679,AU +1730631680,1730632703,CN +1730632704,1730634751,VN +1730634752,1730637823,CN +1730637824,1730638079,AU +1730638080,1730638335,JP +1730638336,1730638847,NZ +1730638848,1730639871,IN +1730639872,1730640383,AU +1730640384,1730640895,MY +1730640896,1730641919,JP +1730641920,1730643967,IN +1730643968,1730644735,AU +1730644736,1730644991,IN +1730644992,1730646015,MY +1730646016,1730647039,CN +1730647040,1730649087,HK +1730649088,1730650111,IN +1730650112,1730658303,CN +1730658304,1730660351,JP +1730660352,1730669567,CN +1730669568,1730670079,IN +1730670080,1730670591,AU +1730670592,1730672639,IN +1730672640,1730673407,AU +1730673408,1730673663,IN +1730673664,1730674687,FM +1730674688,1730675711,AU +1730675712,1730677759,HK +1730677760,1730686975,CN +1730686976,1730687999,IN +1730688000,1730688511,AU +1730688512,1730689023,ID +1730689024,1730692095,IN +1730692096,1730692607,ID +1730692608,1730693119,AU +1730693120,1730694143,IN +1730694144,1730695167,BD +1730695168,1730695423,IN +1730695424,1730695679,NZ +1730695680,1730696191,BD +1730696192,1730697215,HK +1730697216,1730698239,CN +1730698240,1730699263,ID +1730699264,1730700287,JP +1730700288,1730701311,CN +1730701312,1730702335,JP +1730702336,1730702591,ID +1730702592,1730702847,AU +1730702848,1730703359,HK +1730703360,1730704383,CN +1730704384,1730705407,TH +1730705408,1730706431,ID +1730706432,1730708479,JP +1730708480,1730713599,TH +1730713600,1730714623,HK +1730714624,1730715647,JP +1730715648,1730716671,HK +1730716672,1730717183,PH +1730717184,1730717695,AU +1730717696,1730718719,IN +1730718720,1730720767,HK +1730720768,1730723839,TH +1730723840,1730724863,CN +1730724864,1730727935,IN +1730727936,1730728959,HK +1730728960,1730729983,CN +1730729984,1730731007,JP +1730731008,1730732031,CN +1730732032,1730732287,AU +1730732288,1730732543,HK +1730732544,1730733055,BD +1730733056,1730741247,CN +1730741248,1730742271,HK +1730742272,1730742783,AF +1730742784,1730743295,IN +1730743296,1730744319,SG +1730744320,1730745343,CN +1730745344,1730752511,IN +1730752512,1730753535,HK +1730753536,1730754559,CN +1730754560,1730755071,IN +1730755072,1730755583,TH +1730755584,1730756607,JP +1730756608,1730757631,HK +1730757632,1730758655,SG +1730758656,1730759679,JP +1730759680,1730760703,SG +1730760704,1730761727,HK +1730761728,1730762751,TH +1730762752,1730766847,IN +1730766848,1730767871,HK +1730767872,1730768127,AU +1730768128,1730768639,ID +1730768640,1730768895,BD +1730768896,1730769919,JP +1730769920,1730770943,CN +1730770944,1730771967,ID +1730771968,1730772991,HK +1730772992,1730774015,SG +1730774016,1730775039,HK +1730775040,1730776063,JP +1730776064,1730777087,CN +1730777088,1730778111,IN +1730778112,1730780159,CN +1730780160,1730781183,AU +1730781184,1730783231,CN +1730783232,1730783487,IN +1730783488,1730783743,ID +1730783744,1730783999,IN +1730784000,1730784255,ID +1730784256,1730785279,HK +1730785280,1730786303,AU +1730786304,1730788351,HK +1730788352,1730790399,ID +1730790400,1730791423,IN +1730791424,1730794495,ID +1730794496,1730795007,BD +1730795008,1730795519,IN +1730795520,1730796543,AU +1730796544,1730800639,CN +1730800640,1730801663,IN +1730801664,1730802687,JP +1730802688,1730803199,BD +1730803200,1730803711,ID +1730803712,1730804735,HK +1730804736,1730805759,JP +1730805760,1730806783,AF +1730806784,1730807807,JP +1730807808,1730808831,CN +1730808832,1730809855,HK +1730809856,1730810623,IN +1730810624,1730811903,AU +1730811904,1730814975,CN +1730814976,1730815999,HK +1730816000,1730817023,ID +1730817024,1730818047,JP +1730818048,1730819071,AU +1730819072,1730820095,JP +1730820096,1730821119,VN +1730821120,1730822143,HK +1730822144,1730824191,CN +1730824192,1730825215,IN +1730825216,1730826239,CN +1730826240,1730827263,JP +1730827264,1730829311,IN 1742733312,1742734335,HK 1742734336,1742735359,IN 1742735360,1742736383,JP @@ -33404,7 +36023,7 @@ 1743026176,1743027199,BD 1743027200,1743028223,AU 1743028224,1743029247,CN -1743029248,1743030271,AU +1743029248,1743029503,AU 1743030272,1743031295,HK 1743031296,1743035391,IN 1743035392,1743036415,PK @@ -33544,7 +36163,7 @@ 1743163392,1743166463,IN 1743166464,1743167487,AU 1743167488,1743168511,HK -1743168512,1743169535,IN +1743169024,1743169535,IN 1743169536,1743170559,JP 1743170560,1743171583,KR 1743171584,1743172607,AU @@ -33871,7 +36490,7 @@ 1743506944,1743507455,IN 1743507456,1743509503,VN 1743509504,1743510527,HK -1743510528,1743545343,CN +1743510528,1743552511,CN 1743585280,1743589375,CN 1743589376,1743590399,AU 1743590400,1743591423,KR @@ -33931,7 +36550,9 @@ 1743681536,1743682559,AU 1743682560,1743683583,MY 1743683584,1743683839,JP -1743683840,1743684607,HK +1743683840,1743684095,AU +1743684096,1743684351,HK +1743684352,1743684607,AU 1743684608,1743685631,CN 1743685632,1743686655,ID 1743686656,1743688703,CN @@ -33982,6 +36603,38 @@ 1743740928,1743741951,CN 1743741952,1743742975,HK 1743742976,1743743487,NZ +1743743488,1743743999,AU +1743744000,1743745023,JP +1743745024,1743746047,KR +1743746048,1743748095,VN +1743748096,1743748607,IN +1743748608,1743748863,HK +1743748864,1743749119,MY +1743749120,1743751167,AU +1743751168,1743755263,IN +1743755264,1743757311,CN +1743757312,1743758335,TO +1743758336,1743758591,HK +1743758592,1743758847,ID +1743758848,1743759359,AU +1743759360,1743761407,IN +1743761408,1743764479,CN +1743764480,1743765503,ID +1743765504,1743767551,CN +1743767552,1743768575,PH +1743768576,1743770623,CN +1743770624,1743770879,AU +1743770880,1743771135,PH +1743771136,1743771647,NZ +1743771648,1743772671,JP +1743772672,1743773695,SG +1743773696,1743774719,CN +1743774720,1743775743,NZ +1743775744,1743776767,IN +1743776768,1743778815,KR +1743778816,1743779839,CN +1743779840,1743780863,MY +1743780864,1743781887,BD 1743781888,1743783935,JP 1743783936,1743784959,IN 1743784960,1743785983,JP @@ -34166,7 +36819,8 @@ 1743983616,1743984639,KR 1743984640,1743985663,CN 1743985664,1743994879,IN -1743994880,1743995903,AU +1743994880,1743995135,PG +1743995136,1743995903,AU 1743995904,1743997951,IN 1743997952,1743999999,BD 1744000000,1744001023,AU @@ -34231,15 +36885,15 @@ 1744056576,1744056831,MY 1744056832,1744057087,NZ 1744057088,1744057343,ID -1744057344,1744059391,HK -1744059392,1744066559,CN +1744057344,1744058879,HK +1744058880,1744066559,CN 1744066560,1744067583,HK 1744067584,1744068607,JP 1744068608,1744069631,ID 1744069632,1744070655,SG 1744070656,1744071679,JP 1744071680,1744072703,KR -1744072704,1744074751,JP +1744072704,1744073727,JP 1744074752,1744076799,IN 1744076800,1744077823,AU 1744077824,1744078847,PK @@ -34268,6 +36922,7 @@ 1744101376,1744102399,HK 1744102400,1744103423,FJ 1744103424,1744104447,CN +1744104448,1744105471,AU 1744105472,1744106751,IN 1744106752,1744107007,ID 1744107008,1744107519,SG @@ -34354,7 +37009,7 @@ 1744192512,1744194559,JP 1744194560,1744194815,ID 1744194816,1744195071,HK -1744195072,1744195327,AU +1744195072,1744195327,SG 1744195328,1744195583,HK 1744195584,1744196607,JP 1744196608,1744197631,IN @@ -34514,7 +37169,7 @@ 1744349184,1744350207,CN 1744350208,1744351231,IN 1744351232,1744352255,NZ -1744352256,1744354303,HK +1744353280,1744354303,HK 1744354304,1744355327,AU 1744355328,1744356351,CN 1744356352,1744357375,JP @@ -34535,7 +37190,6 @@ 1744370688,1744371711,HK 1744371712,1744372735,BD 1744372736,1744373759,IN -1744373760,1744374783,JP 1744374784,1744375807,CN 1744375808,1744376831,IN 1744376832,1744377855,VN @@ -34543,7 +37197,9 @@ 1744378880,1744379903,KR 1744379904,1744380927,HK 1744380928,1744383999,IN -1744384000,1744384039,AU +1744384000,1744384000,AU +1744384001,1744384031,GU +1744384032,1744384039,AU 1744384040,1744384047,GU 1744384048,1744385023,AU 1744385024,1744386047,CN @@ -34560,7 +37216,7 @@ 1744395264,1744396287,MY 1744396288,1744397311,IN 1744397312,1744398335,VN -1744398336,1744400383,HK +1744399360,1744400383,HK 1744400384,1744402431,JP 1744402432,1744403455,IN 1744403456,1744404479,AU @@ -34582,7 +37238,6 @@ 1744425472,1744425727,ID 1744425728,1744425983,IN 1744425984,1744427007,JP -1744427008,1744428031,PG 1744428032,1744429567,AU 1744429568,1744429823,IN 1744429824,1744430079,ID @@ -34591,7 +37246,7 @@ 1744434176,1744435199,CN 1744435200,1744436223,IN 1744436224,1744437247,CN -1744437248,1744439295,JP +1744438272,1744439295,JP 1744439296,1744439807,AU 1744439808,1744440319,IN 1744440320,1744441343,HK @@ -34600,7 +37255,6 @@ 1744443392,1744444415,VN 1744444416,1744445439,IN 1744445440,1744446463,CN -1744446464,1744447487,JP 1744447488,1744447743,IN 1744447744,1744447999,HK 1744448000,1744448511,BD @@ -34700,7 +37354,6 @@ 1744547840,1744548863,AF 1744548864,1744549887,ID 1744549888,1744551935,IN -1744551936,1744552959,JP 1744552960,1744553471,SG 1744553472,1744553983,HK 1744553984,1744555007,MY @@ -34877,7 +37530,8 @@ 1744733184,1744734207,NZ 1744734208,1744736255,AU 1744736256,1744737279,JP -1744737280,1744738303,CN +1744737280,1744738047,HK +1744738048,1744738303,CN 1744738304,1744739327,SG 1744739328,1744740351,NZ 1744740352,1744741375,IN @@ -34973,7 +37627,11 @@ 1747219456,1747220479,CA 1747220480,1747227647,US 1747227648,1747228671,CA -1747228672,1747256319,US +1747228672,1747235839,US +1747235840,1747236863,CA +1747236864,1747255807,US +1747255808,1747256063,CN +1747256064,1747256319,US 1747256320,1747256575,IE 1747256576,1747256831,AU 1747256832,1747257087,AE @@ -34989,6 +37647,7 @@ 1747276800,1747283967,US 1747283968,1747284991,CA 1747284992,1747293183,US +1747293184,1747294207,CA 1747294208,1747304447,US 1747304448,1747308543,CA 1747308544,1747316735,US @@ -35030,7 +37689,11 @@ 1754207488,1754207743,KI 1754207744,1754207999,MM 1754208000,1754208255,VU -1754208256,1754208511,NA +1754208256,1754208326,NA +1754208327,1754208327,AO +1754208328,1754208353,NA +1754208354,1754208354,AO +1754208355,1754208511,NA 1754208512,1754208767,DJ 1754208768,1754209023,BF 1754209024,1754209279,BW @@ -35067,18 +37730,19 @@ 1754258432,1754258687,MG 1754258688,1754258943,US 1754258944,1754259199,TN -1754259200,1754792959,US +1754259200,1754333183,US +1754333184,1754337279,CA +1754337280,1754792959,US 1754792960,1754793983,CA 1754793984,1754799103,US 1754799104,1754800127,CA -1754800128,1754804223,US -1754805248,1754822655,US +1754800128,1754822655,US 1754822656,1754823679,CA 1754823680,1754830847,US 1754830848,1754831871,CA 1754831872,1754832895,US -1754832896,1754836991,CA -1754836992,1754845183,US +1754832896,1754835967,CA +1754835968,1754845183,US 1754845184,1754846207,CA 1754846208,1754849279,US 1754849280,1754850303,CA @@ -35088,9 +37752,18 @@ 1754863616,1754864639,CA 1754864640,1754869759,US 1754869760,1754870783,CA +1754870784,1754871807,US +1754871808,1754872831,CA 1754872832,1754890239,US 1754890240,1754892287,BB -1754923008,1755062271,US +1754892288,1754894335,CA +1754894336,1754899455,US +1754899456,1754900479,CA +1754900480,1754911743,US +1754911744,1754912767,CA +1754912768,1754920959,US +1754920960,1754921983,DM +1754921984,1755062271,US 1755062272,1755066367,CA 1755066368,1755070463,US 1755070464,1755074559,CA @@ -35126,14 +37799,327 @@ 1755111168,1755111423,SD 1755111424,1755119615,US 1755119616,1755283455,CA -1755283456,1755324415,US -1755324416,1755328511,CA -1755340800,1755348991,US -1755357184,1755365375,US -1755381760,1755512831,US -1755512832,1755545599,CA -1755578368,1755709439,US -1762656256,1763704831,MU +1755283456,1755365375,US +1755365376,1755373567,CA +1755373568,1755512831,US +1755512832,1755578367,CA +1755578368,1755717631,US +1755717632,1755721727,BS +1755721728,1755734271,US +1755734272,1755734527,LB +1755734528,1755734783,BS +1755734784,1755735295,US +1755735296,1755735551,KE +1755735552,1755735807,MA +1755735808,1755736063,CN +1755736064,1755736319,US +1755736320,1755736575,MX +1755736576,1755736831,AW +1755736832,1755737087,US +1755737088,1755737343,GH +1755737344,1755737599,IN +1755737600,1755737855,MO +1755737856,1755738111,MT +1755738112,1755738367,QA +1755738368,1755738623,YE +1755738624,1755738879,GR +1755738880,1755739135,US +1755739136,1755739391,BH +1755739392,1755739647,CO +1755739648,1755739903,OM +1755739904,1755740159,BN +1755740160,1755740415,SC +1755740416,1755740671,SY +1755740672,1755741183,US +1755741184,1755741439,PA +1755741440,1755741695,BZ +1755741696,1755741951,IM +1755741952,1755742207,NG +1755742208,1755799551,US +1755799552,1755807743,CA +1755807744,1755824127,US +1755824128,1755824383,TV +1755824384,1755824639,SY +1755824640,1755824895,ZW +1755824896,1755825151,TG +1755825152,1755825407,GM +1755825408,1755825663,AO +1755825664,1755825919,LB +1755825920,1755826175,MW +1755826176,1755826431,CV +1755826432,1755826687,TZ +1755826688,1755826943,KM +1755826944,1755827199,MN +1755827200,1755827455,CG +1755827456,1755827711,FM +1755827712,1755827967,SB +1755827968,1755828223,BI +1755828224,1755828479,CD +1755828480,1755828735,NE +1755828736,1755828991,NP +1755828992,1755829247,PK +1755829248,1755829503,KZ +1755829504,1755829759,OM +1755829760,1755830015,CN +1755830016,1755830271,ST +1755830272,1755830527,LR +1755830528,1755830783,JP +1755830784,1755831039,SD +1755831040,1755831295,MU +1755831296,1755831551,GQ +1755831552,1755831807,MK +1755831808,1755832063,TL +1755832064,1755832319,ML +1755832320,1755832575,DZ +1755832576,1755832831,MM +1755832832,1755833087,NR +1755833088,1755833343,SA +1755833344,1755833599,IN +1755833600,1755833855,BY +1755833856,1755834111,SZ +1755834112,1755834367,CN +1755834368,1755834623,TN +1755834624,1755834879,US +1755834880,1755835135,PG +1755835136,1755835391,US +1755835392,1755835647,BA +1755835648,1755835903,LS +1755835904,1755836159,GN +1755836160,1755836415,FJ +1755836416,1755836671,MH +1755836672,1755836927,SL +1755836928,1755837183,LK +1755837184,1755837439,MG +1755837440,1755837695,ME +1755837696,1755837951,MR +1755837952,1755838207,SO +1755838208,1755838463,UA +1755838464,1755838719,LY +1755838720,1755838975,TO +1755838976,1755839231,TD +1755839232,1755839487,MZ +1755839488,1755839743,ZM +1755839744,1755839999,ER +1755840000,1755840255,AL +1755840256,1755840511,RU +1755840512,1756049407,US +1756049408,1756053503,CA +1756053504,1756086271,US +1756086272,1756090367,CA +1756090368,1757417471,US +1757417472,1757419519,CA +1757419520,1757424639,US +1757424640,1757425663,CA +1757425664,1757426687,US +1757426688,1757427711,CA +1757427712,1757443071,US +1757443072,1757446143,CA +1757446144,1757447167,US +1757447168,1757448191,CA +1757448192,1757450239,US +1757450240,1757451263,CA +1757451264,1757452287,US +1757452288,1757453311,CA +1757453312,1757457407,US +1757457408,1757458431,CA +1757458432,1757460479,US +1757460480,1757462527,VI +1757462528,1757472767,US +1757472768,1757473791,CA +1757473792,1757487103,US +1757487104,1757489151,CA +1757489152,1757491199,US +1757491200,1757497343,CA +1757497344,1757501439,US +1757502464,1757503487,CA +1757503488,1757505535,US +1757505536,1757506559,CA +1757506560,1757512703,US +1757512704,1757513727,CA +1757513728,1757522943,US +1757522944,1757523967,CA +1757523968,1757529087,US +1757529088,1757530111,AI +1757530112,1757532159,US +1757532160,1757534207,CA +1757534208,1757552639,US +1757552640,1757560831,CA +1757560832,1757642751,US +1757642752,1757675519,CA +1757675520,1757937663,US +1757937664,1757941759,CA +1757941760,1757958143,US +1757958144,1757962239,CA +1757962240,1757966335,BB +1757966336,1758035967,US +1758068736,1758265343,US +1758265344,1758330879,CA +1758330880,1758412799,US +1758412800,1758413055,BG +1758413056,1758413311,SE +1758413312,1758413567,PS +1758413568,1758414335,US +1758414336,1758414591,LV +1758414592,1758414847,IN +1758414848,1758415103,GD +1758415104,1758415359,GB +1758415360,1758415615,FR +1758415616,1758415871,CY +1758415872,1758416127,IT +1758416128,1758416383,US +1758416384,1758416639,CF +1758416640,1758416895,IL +1758416896,1758417151,VC +1758417152,1758417407,ID +1758417408,1758417663,CL +1758417664,1758417919,HK +1758417920,1758418175,DE +1758418176,1758418431,RU +1758418432,1758418687,CN +1758418688,1758418943,BL +1758418944,1758419199,US +1758419200,1758419455,CR +1758419456,1758419711,EG +1758419712,1758419967,VE +1758419968,1758420223,US +1758420224,1758420479,HU +1758420480,1758420735,CH +1758420736,1758420991,MM +1758420992,1759126527,US +1759127552,1759128575,US +1759128576,1759129599,CA +1759129600,1759131647,US +1759131648,1759133695,CA +1759133696,1759138815,US +1759138816,1759139839,CA +1759139840,1759140863,US +1759140864,1759141887,CA +1759141888,1759149055,US +1759149056,1759150079,CA +1759150080,1759160319,US +1759160320,1759162367,BM +1759162368,1759163391,BB +1759163392,1759166463,US +1759166464,1759167487,CA +1759167488,1759168511,US +1759170560,1759172607,US +1759172608,1759173631,VC +1759173632,1759178751,US +1759178752,1759179775,PR +1759179776,1759184895,US +1759184896,1759186943,CA +1759186944,1759188991,US +1759188992,1759190015,VC +1759190016,1759191039,PR +1759191040,1759201279,US +1759201280,1759202303,VG +1759203328,1759208447,US +1759208448,1759209471,CA +1759209472,1759213567,US +1759215616,1759217663,CA +1759217664,1759222783,US +1759222784,1759223807,CA +1759223808,1759230975,US +1759230976,1759233023,CA +1759233024,1759234047,US +1759234048,1759236095,CA +1759236096,1759239167,US +1759239168,1759240191,CA +1759240192,1759244287,US +1759248384,1759313919,US +1759313920,1759346687,CA +1759346688,1759395839,US +1759399936,1759408127,US +1759408128,1759412223,CA +1759412224,1759412991,US +1759412992,1759413247,AU +1759413248,1759414271,US +1759414272,1759414527,SE +1759414528,1759415295,US +1759415296,1759415551,SG +1759415552,1759416575,US +1759416576,1759416831,HK +1759416832,1759417599,US +1759417600,1759417855,FR +1759417856,1759419391,US +1759419392,1759419647,MX +1759419648,1759510527,US +1759510528,1759510783,VE +1759510784,1759511039,AG +1759511040,1759511295,GT +1759511296,1759511551,VC +1759511552,1759511807,PY +1759511808,1759512063,JM +1759512064,1759512319,MS +1759512320,1759512575,GD +1759512576,1759512831,LC +1759512832,1759513087,HT +1759513088,1759513343,EC +1759513344,1759513599,KN +1759513600,1759513855,SR +1759513856,1759514111,NI +1759514112,1759514367,BB +1759514368,1759514623,PE +1759514624,1759514879,KY +1759514880,1759515135,TT +1759515136,1759515391,GY +1759515392,1759515647,BO +1759515648,1759515903,CU +1759515904,1759516159,DM +1759516160,1759516415,SH +1759516416,1759516671,BM +1759516672,1759516927,FJ +1759516928,1759517183,HN +1759517184,1759517439,GL +1759517440,1759517695,MQ +1759517696,1759517951,GF +1759517952,1759518207,MF +1759518208,1759518463,BZ +1759518464,1759518719,GP +1759518720,1759518975,AW +1759518976,1759519231,AI +1759519232,1759519487,BL +1759519488,1759519743,CO +1759519744,1759519999,TC +1759520000,1759520255,VG +1759520256,1759520511,AX +1759520512,1759520767,UM +1759520768,1759521023,SV +1759521024,1759521279,TK +1759521280,1759521535,SJ +1759521536,1759521791,PM +1759521792,1759522047,GS +1759522048,1759522303,DO +1759522304,1759522559,RE +1759522560,1759522815,PN +1759522816,1759523071,MP +1759523072,1759523327,NF +1759523328,1759523583,US +1759523584,1759523839,NU +1759523840,1759524095,NC +1759524096,1759524351,NL +1759524352,1759524607,CX +1759524608,1759524863,BS +1759524864,1759525119,PF +1759525120,1759525375,CK +1759525376,1759525631,TF +1759525632,1759525887,FK +1759525888,1759526143,GG +1759526144,1759526399,CC +1759526400,1759526655,JE +1759526656,1759526911,FO +1759526912,1759535103,US +1759535104,1759543295,CA +1759543296,1759544319,US +1759544320,1759559679,CA +1759559680,1759608831,US +1759641600,1760100351,US +1760165888,1760231423,CA +1760231424,1760362495,US +1761607680,1762656255,ZA +1762656256,1763000335,MU +1763000336,1763000339,UG +1763000340,1763704831,MU 1763704832,1764753407,EG 1764753408,1765801983,KE 1765801984,1766850559,MA @@ -35194,8 +38180,8 @@ 1793064960,1794113535,CN 1794113536,1795162111,KR 1795162112,1795387903,US -1795387904,1795388159,CA -1795388160,1795555839,US +1795387904,1795388287,CA +1795388288,1795555839,US 1795555840,1795555855,CA 1795555856,1795556351,US 1795556352,1795556607,CA @@ -35229,7 +38215,27 @@ 1795593728,1795595775,NL 1795595776,1795596287,US 1795596288,1795603455,NL -1795603456,1805049855,US +1795603456,1796253695,US +1796253696,1796253951,CA +1796253952,1796257919,US +1796257920,1796258047,PR +1796258048,1796262911,US +1796262912,1796263167,PR +1796263168,1796325375,US +1796325376,1796325631,PR +1796325632,1796402431,US +1796402432,1796402559,CA +1796402560,1796403199,US +1796403200,1796403327,CA +1796403328,1796404095,US +1796404096,1796404223,CA +1796404224,1796404735,US +1796404736,1796404863,CA +1796404864,1796406655,US +1796406656,1796406783,CA +1796406784,1805000058,US +1805000059,1805000059,CA +1805000060,1805049855,US 1805049856,1805058047,CA 1805058048,1805144063,US 1805144064,1805148159,CA @@ -35243,7 +38249,20 @@ 1805190400,1805190655,ES 1805190656,1805210623,US 1805210624,1805210879,EG -1805210880,1805582335,US +1805210880,1805251583,US +1805251584,1805251839,DE +1805251840,1805252095,GB +1805252096,1805252351,DE +1805252352,1805252607,GB +1805252608,1805252863,DE +1805252864,1805253119,GB +1805253120,1805253375,DE +1805253376,1805253631,GB +1805253632,1805253887,DE +1805253888,1805254143,GB +1805254144,1805254399,DE +1805254400,1805254655,GB +1805254656,1805582335,US 1805582336,1805647871,CA 1805647872,1805713407,US 1805713408,1805717503,CA @@ -35257,7 +38276,12 @@ 1805752576,1805753087,CA 1805753088,1805754111,US 1805754112,1805754367,CA -1805754368,1806174207,US +1805754368,1806172159,US +1806172160,1806172415,DE +1806172416,1806172671,GB +1806172672,1806172927,DE +1806172928,1806173183,GB +1806173184,1806174207,US 1806174208,1806174463,BR 1806174464,1806205183,US 1806205184,1806205439,CA @@ -35275,8 +38299,7 @@ 1807597568,1807646719,CA 1807646720,1807655679,US 1807655680,1807655935,IE -1807655936,1807656191,LR -1807656192,1807656447,CZ +1807655936,1807656447,US 1807656448,1807656703,NL 1807656704,1807657983,US 1807657984,1807658239,SG @@ -35312,12 +38335,17 @@ 1815966976,1815967231,US 1815967232,1815967487,CA 1815967488,1815968255,US -1815968256,1815968511,FR -1815968512,1815968639,US -1815968640,1815968767,FR +1815968256,1815968767,FR 1815968768,1815969279,US 1815969280,1815969791,JP -1815969792,1815987199,US +1815969792,1815977983,US +1815977984,1815979007,JP +1815979008,1815980031,NL +1815980032,1815980543,AU +1815980544,1815981055,DE +1815981056,1815982079,GB +1815982080,1815982591,FR +1815982592,1815987199,US 1815987200,1815987711,GB 1815987712,1815988223,NL 1815988224,1815988735,JP @@ -35336,7 +38364,9 @@ 1815996160,1815996415,CA 1815996416,1815997695,US 1815997696,1815997951,FR -1815997952,1816001791,US +1815997952,1816001279,US +1816001280,1816001535,AU +1816001536,1816001791,US 1816001792,1816002559,NL 1816002560,1816068095,US 1816068096,1816133631,CA @@ -35360,23 +38390,26 @@ 1822553856,1822554111,HK 1822554112,1822572543,US 1822572544,1822605311,CA -1822605312,1822609407,US -1822609408,1822609535,SG -1822609536,1822611487,US -1822611488,1822611551,CA -1822611552,1822611967,US -1822611968,1822612479,CA -1822612480,1822614015,US +1822605312,1822611514,US +1822611515,1822611515,CA +1822611516,1822614015,US 1822614016,1822614271,JP 1822614272,1822614783,US 1822614784,1822615039,FR -1822615040,1822617855,US +1822615040,1822615295,NO +1822615296,1822617855,US 1822617856,1822618367,CA -1822618368,1822618879,US -1822618880,1822619391,CA -1822619392,1822619903,US -1822619904,1822620415,AU -1822620416,1822654463,US +1822618368,1822619135,US +1822619136,1822619391,CA +1822619392,1822619647,US +1822619648,1822620415,AU +1822620416,1822620927,US +1822620928,1822621247,NO +1822621248,1822621249,US +1822621250,1822621250,NO +1822621251,1822621263,US +1822621264,1822621264,NO +1822621265,1822654463,US 1822654464,1822662143,CA 1822662144,1822662399,US 1822662400,1822670847,CA @@ -35422,9 +38455,7 @@ 1831862272,1832124415,PT 1832124416,1832386559,IT 1832386560,1832517631,DK -1832517632,1832582655,SE -1832582656,1832582911,DK -1832582912,1832583167,SE +1832517632,1832583167,SE 1832583168,1832648703,DK 1832648704,1832681471,HR 1832681472,1832714239,RU @@ -35433,26 +38464,12 @@ 1832779776,1832780031,FR 1832780032,1832780287,MQ 1832780288,1832780799,FR -1832780800,1832781567,MQ -1832781568,1832782335,FR -1832782336,1832783103,MQ -1832783104,1832783359,FR -1832783360,1832783615,MQ -1832783616,1832783871,FR +1832780800,1832781311,MQ +1832781312,1832783871,FR 1832783872,1832784639,GP -1832784640,1832785151,FR -1832785152,1832785407,GP -1832785408,1832785663,FR -1832785664,1832785919,GP -1832785920,1832787199,FR -1832787200,1832787455,GF -1832787456,1832788735,FR -1832788736,1832788991,RE -1832788992,1832789503,FR -1832789504,1832790015,RE -1832790016,1832791039,FR -1832791040,1832791295,YT -1832791296,1832791551,FR +1832784640,1832786943,FR +1832786944,1832787455,GF +1832787456,1832791551,FR 1832791552,1832791807,YT 1832791808,1832794879,FR 1832794880,1832795135,GP @@ -35460,15 +38477,17 @@ 1832796416,1832796671,RE 1832796672,1832796927,FR 1832796928,1832797183,GP -1832797184,1832798975,FR -1832798976,1832799743,GP -1832799744,1832801535,FR -1832801536,1832802047,MQ -1832802048,1832802559,FR +1832797184,1832798463,FR +1832798464,1832798719,GP +1832798720,1832798975,FR +1832798976,1832799231,GP +1832799232,1832799743,FR +1832799744,1832799999,GP +1832800000,1832802559,FR 1832802560,1832802815,MQ -1832802816,1832803839,FR -1832803840,1832804351,MQ -1832804352,1832812543,FR +1832802816,1832803327,FR +1832803328,1832803839,MQ +1832803840,1832812543,FR 1832812544,1832845311,RU 1832845312,1832878079,BH 1832878080,1832878412,RU @@ -35561,8 +38580,8 @@ 1833357312,1833357587,GB 1833357588,1833357631,IE 1833357632,1833357823,GB -1833357824,1833358079,IE -1833358080,1833359359,GB +1833357824,1833357903,IE +1833357904,1833359359,GB 1833359360,1833361407,DE 1833361408,1833363455,GB 1833363456,1833365503,RU @@ -35583,9 +38602,7 @@ 1833398272,1833400319,DE 1833400320,1833402367,GB 1833402368,1833406463,FR -1833406464,1833406719,GB -1833406720,1833406975,LV -1833406976,1833408511,GB +1833406464,1833408511,GB 1833410560,1833412607,LU 1833412608,1833414655,GB 1833414656,1833416703,RU @@ -35635,7 +38652,7 @@ 1833545728,1833549823,IT 1833549824,1833553919,RU 1833553920,1833558015,CZ -1833558016,1833562111,RO +1833558016,1833562111,BG 1833562112,1833566207,PS 1833566208,1833570303,SE 1833570304,1833571583,NL @@ -35766,9 +38783,7 @@ 1835918440,1835918447,IT 1835918448,1835918519,GB 1835918520,1835918527,IT -1835918528,1835918599,GB -1835918600,1835918607,IT -1835918608,1835918711,GB +1835918528,1835918711,GB 1835918712,1835918719,IT 1835918720,1835918735,GB 1835918736,1835918743,IT @@ -35776,51 +38791,41 @@ 1835918824,1835918831,IT 1835918832,1835918847,GB 1835918848,1835918855,IT -1835918856,1835919095,GB -1835919096,1835919103,IT -1835919104,1835919127,GB +1835918856,1835919127,GB 1835919128,1835919135,IT 1835919136,1835919151,GB 1835919152,1835919159,IT -1835919160,1835919751,GB +1835919160,1835919327,GB +1835919328,1835919335,IT +1835919336,1835919751,GB 1835919752,1835919759,IT 1835919760,1835920479,GB 1835920480,1835920487,IT -1835920488,1835921047,GB -1835921048,1835921055,IT -1835921056,1835921119,GB +1835920488,1835920991,GB +1835920992,1835920999,IT +1835921000,1835921119,GB 1835921120,1835921127,IT 1835921128,1835921343,GB 1835921344,1835921351,IT -1835921352,1835921463,GB -1835921464,1835921471,IT -1835921472,1835921711,GB +1835921352,1835921711,GB 1835921712,1835921719,IT 1835921720,1835922415,GB 1835922416,1835922423,IT -1835922424,1835922455,GB -1835922456,1835922463,IT -1835922464,1835922559,GB +1835922424,1835922559,GB 1835922560,1835922567,IT 1835922568,1835922647,GB 1835922648,1835922655,IT 1835922656,1835923351,GB 1835923352,1835923359,IT -1835923360,1835923487,GB -1835923488,1835923495,IT -1835923496,1835923863,GB -1835923864,1835923871,IT -1835923872,1835924375,GB +1835923360,1835924375,GB 1835924376,1835924383,IT -1835924384,1835925503,GB +1835924384,1835925159,GB +1835925160,1835925167,IT +1835925168,1835925503,GB 1835925504,1835933695,LV 1835933696,1835942399,RU 1835942400,1835942655,UA -1835942656,1835947775,RU -1835947776,1835948031,UA -1835948032,1835949055,RU -1835949056,1835949311,UA -1835949312,1835950079,RU +1835942656,1835950079,RU 1835950080,1835958271,LB 1835958272,1835966463,HU 1835966464,1835974655,IR @@ -35837,8 +38842,8 @@ 1836580864,1836597247,RU 1836597248,1836598271,LU 1836598272,1836605439,FR -1836605440,1836612607,LU -1836612608,1836613631,DE +1836605440,1836611583,LU +1836611584,1836613631,DE 1836613632,1836626943,RU 1836626944,1836627967,NL 1836627968,1836630015,RU @@ -35849,39 +38854,44 @@ 1836687360,1836711935,BG 1836711936,1836728319,UA 1836728320,1836744703,RS -1836744704,1836746495,FR +1836744704,1836745983,FR +1836745984,1836746239,RE +1836746240,1836746495,FR 1836746496,1836747007,RE -1836747008,1836747263,FR -1836747264,1836748031,RE -1836748032,1836748543,FR -1836748544,1836748799,RE -1836748800,1836749055,FR -1836749056,1836749567,RE -1836749568,1836750079,FR -1836750080,1836750591,RE +1836747008,1836750335,FR +1836750336,1836750591,RE 1836750592,1836751103,FR -1836751104,1836751615,RE -1836751616,1836753151,FR -1836753152,1836753407,RE -1836753408,1836753919,FR -1836753920,1836754687,RE -1836754688,1836755455,FR -1836755456,1836755711,RE +1836751104,1836751359,RE +1836751360,1836751871,FR +1836751872,1836752127,RE +1836752128,1836752639,FR +1836752640,1836753151,RE +1836753152,1836754175,FR +1836754176,1836754431,RE +1836754432,1836755199,FR +1836755200,1836755711,RE 1836755712,1836755967,FR 1836755968,1836756223,RE -1836756224,1836756479,FR -1836756480,1836756991,RE -1836756992,1836758015,FR -1836758016,1836758527,RE -1836758528,1836758783,FR +1836756224,1836756735,FR +1836756736,1836756991,RE +1836756992,1836758783,FR 1836758784,1836759039,RE 1836759040,1836759551,FR -1836759552,1836760575,RE -1836760576,1836760831,FR -1836760832,1836761087,RE +1836759552,1836759807,RE +1836759808,1836760063,FR +1836760064,1836760831,RE +1836760832,1836761087,FR 1836761088,1836777471,IR 1836777472,1836793855,SI -1836793856,1836810239,GB +1836793856,1836794567,GB +1836794568,1836794587,FR +1836794588,1836794588,GB +1836794589,1836794592,FR +1836794593,1836794594,GB +1836794595,1836794595,FR +1836794596,1836797951,GB +1836797952,1836798207,DE +1836798208,1836810239,GB 1836810240,1836826623,RU 1836826624,1836843007,CZ 1836843008,1836875775,RU @@ -35940,8 +38950,12 @@ 1840119808,1840152575,RU 1840152576,1840185343,GB 1840185344,1840218111,BA -1840218112,1840316415,GB -1840316416,1840381951,RO +1840218112,1840232447,GB +1840232448,1840232703,US +1840232704,1840247007,GB +1840247008,1840247023,NL +1840247024,1840316415,GB +1840316416,1840381951,AE 1840381952,1840447487,GR 1840447488,1840513023,NO 1840513024,1840644095,GB @@ -35984,8 +38998,7 @@ 1841669120,1841669375,PL 1841669376,1841669631,BE 1841669632,1841670143,UA -1841670144,1841671935,PL -1841671936,1841672191,GB +1841670144,1841672191,PL 1841672192,1841674239,FR 1841674240,1841676287,PL 1841676288,1841680383,RU @@ -36003,8 +39016,7 @@ 1841758208,1841766399,PL 1841766400,1841774591,HU 1841774592,1841782783,PL -1841782784,1841790975,RO -1841790976,1841799167,BG +1841782784,1841799167,BG 1841799168,1841807359,DE 1841807360,1841815551,NO 1841815552,1841823743,BG @@ -36025,7 +39037,7 @@ 1841897472,1841905663,RO 1841905664,1841922047,RU 1841922048,1841924351,NL -1841924352,1841924607,DE +1841924352,1841924607,GB 1841924608,1841925887,NL 1841925888,1841926143,DE 1841926144,1841930239,NL @@ -36050,22 +39062,15 @@ 1842044928,1842053119,GB 1842053120,1842069503,IR 1842069504,1842077695,RU -1842077696,1842077951,FR -1842077952,1842078207,MQ -1842078208,1842078719,FR -1842078720,1842078975,MQ -1842078976,1842079487,FR -1842079488,1842080767,MQ +1842077696,1842078207,MQ +1842078208,1842078463,FR +1842078464,1842078975,MQ +1842078976,1842079743,FR +1842079744,1842080767,MQ 1842080768,1842081023,GP -1842081024,1842081279,MQ -1842081280,1842081535,GP -1842081536,1842081791,MQ -1842081792,1842082047,GP -1842082048,1842082559,MQ -1842082560,1842082815,GP -1842082816,1842083071,MQ -1842083072,1842083583,GP -1842083584,1842084607,MQ +1842081024,1842083071,MQ +1842083072,1842083327,GP +1842083328,1842084607,MQ 1842084608,1842084863,GP 1842084864,1842085887,MQ 1842085888,1842118655,GB @@ -36102,7 +39107,9 @@ 1842206720,1842208767,SE 1842208768,1842210815,GB 1842210816,1842212863,LT -1842212864,1842214911,CZ +1842212864,1842213631,CZ +1842213632,1842213887,SK +1842213888,1842214911,CZ 1842214912,1842216959,RU 1842216960,1842225151,RO 1842225152,1842233343,UA @@ -36133,9 +39140,7 @@ 1843478528,1843494911,SE 1843494912,1843511295,IR 1843511296,1843527679,RU -1843527680,1843539199,IL -1843539200,1843539455,FR -1843539456,1843544063,IL +1843527680,1843544063,IL 1843544064,1843560447,RU 1843560448,1843576831,DE 1843576832,1843593215,RU @@ -36179,7 +39184,6 @@ 1843955712,1843957759,IT 1843957760,1843959807,CZ 1843959808,1843961855,GB -1843961856,1843962111,DE 1843963904,1843965951,DE 1843965952,1843967999,GB 1843968000,1843970047,RU @@ -36224,9 +39228,7 @@ 1844068352,1844070399,ES 1844070400,1844072447,LU 1844072448,1844076543,ES -1844076544,1844077055,GB -1844077056,1844077567,IE -1844077568,1844078591,GB +1844076544,1844078591,GB 1844078592,1844080639,DE 1844080640,1844082687,GE 1844082688,1844084735,DE @@ -36282,9 +39284,7 @@ 1844174848,1844178943,DE 1844178944,1844180991,EE 1844180992,1844183039,TR -1844183040,1844185087,IT -1844185088,1844187135,CH -1844187136,1844191231,IT +1844183040,1844191231,IT 1844191232,1844195327,AL 1844199424,1844203519,RU 1844203520,1844207615,NL @@ -36348,7 +39348,8 @@ 1844772864,1844838399,RS 1844838400,1844903935,GB 1844903936,1844969471,NO -1844969472,1845035007,RU +1844969472,1845034751,RU +1845034752,1845035007,BY 1845035008,1845100543,GB 1845100544,1845166079,DE 1845166080,1845231615,UA @@ -36387,9 +39388,7 @@ 1847757824,1847758847,CN 1847758848,1847770111,TH 1847770112,1847771135,SG -1847771136,1847780351,TH -1847780352,1847780607,CN -1847780608,1847783423,TH +1847771136,1847783423,TH 1847783424,1847787519,US 1847787520,1847803903,KR 1847803904,1847807999,VN @@ -36584,8 +39583,7 @@ 1868300288,1868333055,IN 1868333056,1868341247,PK 1868341248,1868345343,ID -1868345344,1868346111,GU -1868346112,1868346367,AU +1868345344,1868346367,GU 1868346368,1868347391,TH 1868347392,1868348415,AU 1868348416,1868349439,KR @@ -36725,9 +39723,7 @@ 1888031232,1888034815,HK 1888034816,1888038911,JP 1888038912,1888040959,CN -1888040960,1888041471,JP -1888041472,1888041727,NZ -1888041728,1888059391,JP +1888040960,1888059391,JP 1888059392,1888063487,VN 1888063488,1888067583,JP 1888067584,1888071679,MY @@ -36813,11 +39809,7 @@ 1897267200,1897365503,VN 1897365504,1897398271,MY 1897398272,1897660415,CN -1897660416,1897663487,HK -1897663488,1897663743,GB -1897663744,1897697279,HK -1897697280,1897697535,AU -1897697536,1897725951,HK +1897660416,1897725951,HK 1897725952,1897730047,JP 1897730048,1897734143,AU 1897734144,1897738239,HK @@ -36852,7 +39844,7 @@ 1899273216,1899274239,JP 1899274240,1899282431,CN 1899282432,1899290623,KR -1899290624,1899294719,AU +1899292672,1899294719,AU 1899294720,1899298815,JP 1899298816,1899364351,TH 1899364352,1899724799,CN @@ -36869,9 +39861,7 @@ 1899850752,1899851775,VN 1899851776,1899855871,JP 1899855872,1899888639,TW -1899888640,1902210559,CN -1902210560,1902210815,MO -1902210816,1904345087,CN +1899888640,1904345087,CN 1904345088,1904361471,JP 1904361472,1904369663,KR 1904369664,1904375807,CN @@ -36953,7 +39943,6 @@ 1914601472,1914634239,KR 1914634240,1914642431,BD 1914642432,1914650623,KR -1914652160,1914652415,MN 1914652672,1914654719,AU 1914654720,1914658815,JP 1914658816,1914660863,AU @@ -37000,7 +39989,9 @@ 1919918080,1919926271,CN 1919926272,1919942655,KR 1919942656,1919999999,CN -1920000000,1920008191,HK +1920000000,1920002047,HK +1920002048,1920003071,CN +1920003072,1920008191,HK 1920008192,1920057343,CN 1920057344,1920058111,HK 1920058112,1920072703,CN @@ -37073,7 +40064,10 @@ 1925640192,1925642239,ID 1925642240,1925644287,CN 1925644288,1925660671,KR -1925660672,1925664767,HK +1925660672,1925661439,TW +1925661440,1925662207,HK +1925662208,1925663743,TW +1925663744,1925664767,HK 1925664768,1925677055,ID 1925677056,1926234111,KR 1926234112,1929379839,CN @@ -37211,7 +40205,6 @@ 1941438464,1941569535,IN 1941569536,1941618687,PK 1941618688,1941635071,AU -1941635072,1941639167,IN 1941639168,1941643263,NP 1941643264,1941651455,IN 1941651456,1941655551,JP @@ -37382,9 +40375,7 @@ 1959104512,1959106559,AU 1959106560,1959108607,JP 1959110656,1959112703,JP -1959112704,1959113215,HK -1959113216,1959113471,IN -1959113472,1959114751,HK +1959112704,1959114751,HK 1959114752,1959115007,IN 1959115008,1959116799,HK 1959116800,1959133183,SG @@ -37462,7 +40453,11 @@ 1964120064,1964122111,JP 1964122112,1964122367,SG 1964122368,1964122879,JP -1964122880,1964126207,SG +1964122880,1964123135,HK +1964123136,1964123391,GB +1964123392,1964123647,US +1964123648,1964123903,CN +1964123904,1964126207,SG 1964126208,1964126463,HK 1964126464,1964130303,SG 1964130304,1964134399,HK @@ -37694,7 +40689,7 @@ 1991442432,1991499775,BD 1991499776,1991507967,NC 1991507968,1991835647,CN -1991835648,1991901183,SG +1991835648,1991901183,IN 1991901184,1992097791,CN 1992097792,1992163327,SG 1992163328,1992818687,CN @@ -37718,7 +40713,9 @@ 1996634112,1996636159,AU 1996636160,1996644351,ID 1996644352,1996652543,BT -1996652544,1997078527,CN +1996652544,1996685311,CN +1996685312,1996750847,HK +1996750848,1997078527,CN 1997078528,1997094911,AU 1997094912,1997144063,HK 1997144064,1997176831,CN @@ -37789,9 +40786,14 @@ 1998569472,1998577663,CN 1998577664,1998579711,AU 1998579712,1998581759,SG -1998581760,1998584319,KR +1998581760,1998584063,KR +1998584064,1998584319,IN 1998584320,1998584575,OM -1998584576,1998585855,KR +1998584576,1998584831,IN +1998584832,1998585087,ZA +1998585088,1998585343,KR +1998585344,1998585599,JP +1998585600,1998585855,KR 1998585856,1999130623,CN 1999130624,1999134719,BD 1999134720,1999136767,MN @@ -37849,13 +40851,15 @@ 2001559552,2001567743,KR 2001567744,2001600511,TW 2001600512,2001797119,CN -2001797120,2001798047,SG +2001797120,2001797647,SG +2001797648,2001797663,US +2001797664,2001798047,SG 2001798048,2001798079,US 2001798080,2001798087,SG 2001798088,2001798095,US -2001798096,2001798787,SG -2001798788,2001798791,AU -2001798792,2001799687,SG +2001798096,2001798407,SG +2001798408,2001798415,US +2001798416,2001799687,SG 2001799688,2001799695,US 2001799696,2001799711,SG 2001799712,2001799743,US @@ -37875,11 +40879,9 @@ 2001801136,2001801151,US 2001801152,2001801339,SG 2001801340,2001801343,US -2001801344,2001801615,SG -2001801616,2001801623,NL -2001801624,2001801663,SG -2001801664,2001801703,US -2001801704,2001801711,SG +2001801344,2001801663,SG +2001801664,2001801695,US +2001801696,2001801711,SG 2001801712,2001801727,US 2001801728,2001801775,SG 2001801776,2001801807,US @@ -37905,13 +40907,23 @@ 2001803920,2001803935,US 2001803936,2001804015,SG 2001804016,2001804023,US -2001804024,2001805943,SG +2001804024,2001804295,SG +2001804296,2001804303,US +2001804304,2001805943,SG 2001805944,2001805951,US -2001805952,2001809383,SG +2001805952,2001806527,SG +2001806528,2001806559,SA +2001806560,2001807959,SG +2001807960,2001807967,US +2001807968,2001809039,SG +2001809040,2001809047,US +2001809048,2001809127,SG +2001809128,2001809135,US +2001809136,2001809383,SG 2001809384,2001809391,US -2001809392,2001810495,SG -2001810496,2001810527,MY -2001810528,2001810559,SG +2001809392,2001810111,SG +2001810112,2001810143,US +2001810144,2001810559,SG 2001810560,2001810623,MY 2001810624,2001812127,SG 2001812128,2001812159,SA @@ -37919,9 +40931,7 @@ 2001812256,2001812263,US 2001812264,2001812671,SG 2001812672,2001812675,GB -2001812676,2001813655,SG -2001813656,2001813663,AU -2001813664,2001813783,SG +2001812676,2001813783,SG 2001813784,2001813791,IN 2001813792,2001814431,SG 2001814432,2001814439,US @@ -37929,25 +40939,27 @@ 2001814576,2001814583,US 2001814584,2001815191,SG 2001815192,2001815199,US -2001815200,2001817079,SG -2001817080,2001817087,US -2001817088,2001818639,SG +2001815200,2001816071,SG +2001816072,2001816079,US +2001816080,2001816407,SG +2001816408,2001816415,US +2001816416,2001818063,SG +2001818064,2001818071,US +2001818072,2001818615,SG +2001818616,2001818623,IN +2001818624,2001818639,SG 2001818640,2001818647,US -2001818648,2001818847,SG -2001818848,2001818851,AU -2001818852,2001819495,SG -2001819496,2001819503,US -2001819504,2001819887,SG +2001818648,2001819703,SG +2001819704,2001819711,US +2001819712,2001819887,SG 2001819888,2001819895,IE 2001819896,2001819999,SG 2001820000,2001820031,IE 2001820032,2001820719,SG 2001820720,2001820727,CA -2001820728,2001820991,SG -2001820992,2001820999,US -2001821000,2001821191,SG -2001821192,2001821199,US -2001821200,2001821335,SG +2001820728,2001820871,SG +2001820872,2001820879,US +2001820880,2001821335,SG 2001821336,2001821343,US 2001821344,2001821367,SG 2001821368,2001821375,US @@ -37955,234 +40967,57 @@ 2001821424,2001821431,US 2001821432,2001821439,SG 2001821440,2001821447,US -2001821448,2001821623,SG -2001821624,2001821631,US -2001821632,2001823007,SG +2001821448,2001822263,SG +2001822264,2001822271,US +2001822272,2001823007,SG 2001823008,2001823015,US -2001823016,2001823447,SG +2001823016,2001823215,SG +2001823216,2001823223,US +2001823224,2001823303,SG +2001823304,2001823311,US +2001823312,2001823447,SG 2001823448,2001823455,US 2001823456,2001824175,SG 2001824176,2001824183,US -2001824184,2001824287,SG -2001824288,2001824295,US -2001824296,2001824479,SG -2001824480,2001824487,US -2001824488,2001824495,SG -2001824496,2001824503,KR -2001824504,2001825183,SG -2001825184,2001825215,US -2001825216,2001825647,SG -2001825648,2001825655,US -2001825656,2001829891,SG -2001829892,2001829903,US -2001829904,2001830091,SG -2001830092,2001830095,US -2001830096,2001830175,SG -2001830176,2001830191,US -2001830192,2001830207,SG -2001830208,2001830223,US -2001830224,2001830335,SG -2001830336,2001830351,US -2001830352,2001830479,SG -2001830480,2001830495,US -2001830496,2001830567,SG -2001830568,2001830575,US -2001830576,2001830673,SG -2001830674,2001830674,HK -2001830675,2001830719,SG -2001830720,2001830783,US -2001830784,2001830927,SG -2001830928,2001830935,US -2001830936,2001830943,NL -2001830944,2001830975,SG -2001830976,2001830983,US -2001830984,2001831007,SG -2001831008,2001831015,US -2001831016,2001831027,SG -2001831028,2001831031,US -2001831032,2001831163,SG -2001831164,2001831167,US -2001831168,2001831287,SG -2001831288,2001831295,US -2001831296,2001831331,SG -2001831332,2001831335,US -2001831336,2001831683,SG -2001831684,2001831687,US -2001831688,2001831691,SG -2001831692,2001831703,US -2001831704,2001831915,SG -2001831916,2001831919,US -2001831920,2001831943,SG -2001831944,2001831951,US -2001831952,2001831963,SG -2001831964,2001831967,US -2001831968,2001831992,SG -2001831993,2001831993,US -2001831994,2001832135,SG -2001832136,2001832139,US -2001832140,2001832147,SG -2001832148,2001832151,US -2001832152,2001832315,SG -2001832316,2001832319,US -2001832320,2001832443,SG -2001832444,2001832447,US -2001832448,2001832615,SG -2001832616,2001832623,AZ -2001832624,2001832751,SG -2001832752,2001832759,IE -2001832760,2001832879,SG -2001832880,2001832887,US -2001832888,2001832903,SG -2001832904,2001832911,US -2001832912,2001832951,SG -2001832952,2001832955,US -2001832956,2001833007,SG +2001824184,2001824335,SG +2001824336,2001824343,US +2001824344,2001824543,SG +2001824544,2001824551,PH +2001824552,2001825247,SG +2001825248,2001825255,US +2001825256,2001825511,SG +2001825512,2001825519,US +2001825520,2001825623,SG +2001825624,2001825631,US +2001825632,2001826199,SG +2001826200,2001826207,US +2001826208,2001826639,SG +2001826640,2001826671,US +2001826672,2001826847,SG +2001826848,2001826863,US +2001826864,2001826911,SG +2001826912,2001826943,US +2001826944,2001827103,SG +2001827104,2001827111,CA +2001827112,2001827199,SG +2001827200,2001827215,US +2001827216,2001827551,SG +2001827552,2001827567,PH +2001827568,2001828351,SG +2001828352,2001828367,US +2001828368,2001828383,SG +2001828384,2001828399,AU +2001828400,2001828799,SG +2001828800,2001828863,US +2001828864,2001828927,SG +2001828928,2001828991,US +2001828992,2001829087,SG +2001829088,2001829439,US +2001829440,2001829887,SG +2001829888,2001833007,HK 2001833008,2001833015,CN -2001833016,2001833071,SG -2001833072,2001833079,US -2001833080,2001833099,SG -2001833100,2001833103,US -2001833104,2001833255,SG -2001833256,2001833263,US -2001833264,2001833419,SG -2001833420,2001833421,US -2001833422,2001833439,SG -2001833440,2001833447,US -2001833448,2001833487,SG -2001833488,2001833495,US -2001833496,2001833655,SG -2001833656,2001833663,GB -2001833664,2001833679,SG -2001833680,2001833687,GB -2001833688,2001833727,SG -2001833728,2001833791,US -2001833792,2001834096,SG -2001834097,2001834097,US -2001834098,2001834239,SG -2001834240,2001834495,HK -2001834496,2001834751,SG -2001834752,2001834815,US -2001834816,2001834935,SG -2001834936,2001834943,JP -2001834944,2001834947,US -2001834948,2001835035,SG -2001835036,2001835039,US -2001835040,2001835103,SG -2001835104,2001835135,US -2001835136,2001835147,SG -2001835148,2001835151,US -2001835152,2001835231,SG -2001835232,2001835239,US -2001835240,2001835247,SG -2001835248,2001835263,US -2001835264,2001835515,SG -2001835516,2001835519,US -2001835520,2001835587,SG -2001835588,2001835591,US -2001835592,2001835711,SG -2001835712,2001835719,US -2001835720,2001835793,SG -2001835794,2001835794,US -2001835795,2001835795,SG -2001835796,2001835799,US -2001835800,2001835959,SG -2001835960,2001835983,US -2001835984,2001836107,SG -2001836108,2001836111,US -2001836112,2001836267,SG -2001836268,2001836271,US -2001836272,2001836291,SG -2001836292,2001836295,US -2001836296,2001836419,SG -2001836420,2001836423,US -2001836424,2001836427,SG -2001836428,2001836431,US -2001836432,2001836435,SG -2001836436,2001836439,US -2001836440,2001836451,SG -2001836452,2001836455,US -2001836456,2001836471,SG -2001836472,2001836487,US -2001836488,2001836506,SG -2001836507,2001836507,US -2001836508,2001836543,SG -2001836544,2001838079,US -2001838080,2001838627,SG -2001838628,2001838631,US -2001838632,2001838633,SG -2001838634,2001838634,HK -2001838635,2001838755,SG -2001838756,2001838759,US -2001838760,2001838763,SG -2001838764,2001838767,US -2001838768,2001838847,SG -2001838848,2001839103,HK -2001839104,2001839111,SG -2001839112,2001839115,US -2001839116,2001839535,SG -2001839536,2001839543,US -2001839544,2001839595,SG -2001839596,2001839599,SA -2001839600,2001839739,SG -2001839740,2001839743,US -2001839744,2001839775,SG -2001839776,2001839783,US -2001839784,2001839803,SG -2001839804,2001839807,US -2001839808,2001840057,SG -2001840058,2001840059,SA -2001840060,2001840071,SG -2001840072,2001840079,US -2001840080,2001840175,SG -2001840176,2001840183,US -2001840184,2001840767,SG -2001840768,2001840799,US -2001840800,2001841159,SG -2001841160,2001841167,US -2001841168,2001841175,SG -2001841176,2001841176,US -2001841177,2001841177,SA -2001841178,2001841179,SG -2001841180,2001841247,US -2001841248,2001841279,SA -2001841280,2001841311,SG -2001841312,2001841319,US -2001841320,2001841343,SG -2001841344,2001841407,US -2001841408,2001841639,SG -2001841640,2001841647,US -2001841648,2001842047,SG -2001842048,2001842111,US -2001842112,2001842175,SG -2001842176,2001842271,US -2001842272,2001842319,SG -2001842320,2001842327,US -2001842328,2001842343,SG -2001842344,2001842351,US -2001842352,2001842687,SG -2001842688,2001842751,US -2001842752,2001842783,SG -2001842784,2001842815,US -2001842816,2001843249,SG -2001843250,2001843251,US -2001843252,2001843471,SG -2001843472,2001843475,US -2001843476,2001843839,SG -2001843840,2001843967,US -2001843968,2001844127,SG -2001844128,2001845247,US -2001845248,2001845335,SG -2001845336,2001845343,US -2001845344,2001845359,SG -2001845360,2001845375,US -2001845376,2001845391,SG -2001845392,2001845503,US -2001845504,2001845695,SG -2001845696,2001845703,US -2001845704,2001845799,SG -2001845800,2001845807,US -2001845808,2001846015,SG -2001846016,2001846311,US +2001833016,2001846271,HK +2001846272,2001846311,US 2001846312,2001846335,SG 2001846336,2001846359,US 2001846360,2001846479,SG @@ -38731,7 +41566,9 @@ 2019049472,2019078143,AU 2019078144,2019082239,IN 2019082240,2019098623,HK -2019098624,2019115007,PH +2019098624,2019106815,PH +2019106816,2019107071,NO +2019107072,2019115007,PH 2019115008,2019117055,US 2019117056,2019119103,IN 2019119104,2019121151,NZ @@ -38915,7 +41752,7 @@ 2047508480,2047574015,CN 2047574016,2047606783,SG 2047606784,2047803391,CN -2047803392,2047868927,SG +2047803392,2047868927,IN 2047868928,2048917503,JP 2048917504,2049966079,KR 2049966080,2050047999,CN @@ -38928,8 +41765,7 @@ 2050091008,2050097151,JP 2050097152,2050101247,SG 2050101248,2050113535,JP -2050113536,2050129663,SG -2050129664,2050129919,JP +2050113536,2050129919,SG 2050129920,2050162687,IN 2050162688,2050228223,CN 2050228224,2050490367,PH @@ -39064,18 +41900,13 @@ 2060451840,2061500415,JP 2061500416,2063073279,CN 2063073280,2063077375,BD -2063077376,2063077377,PH -2063077378,2063077378,HK -2063077379,2063077631,PH -2063077632,2063079423,HK +2063077376,2063079423,HK 2063079424,2063081471,CN 2063081472,2063085567,ID 2063085568,2063089663,CN 2063089664,2063097855,JP 2063097856,2063106047,MM -2063106048,2063106559,SG -2063106560,2063106815,AU -2063106816,2063107071,SG +2063106048,2063107071,SG 2063107072,2063107327,JP 2063107328,2063107623,SG 2063107624,2063107631,AU @@ -39084,19 +41915,18 @@ 2063110144,2063111167,JP 2063111168,2063114239,AU 2063114240,2063115263,IN -2063115264,2063117311,JP -2063117312,2063117567,NZ -2063117568,2063117823,JP +2063115264,2063117823,JP 2063117824,2063117839,PH 2063117840,2063117951,JP 2063117952,2063118079,PH -2063118080,2063118335,JP +2063118080,2063118159,JP +2063118160,2063118191,PH +2063118192,2063118335,JP 2063118336,2063118591,IN 2063118592,2063119871,JP 2063119872,2063120383,IN -2063120384,2063120895,JP -2063120896,2063121151,AU -2063121152,2063122431,JP +2063120384,2063121919,JP +2063121920,2063122431,IN 2063122432,2063138815,SG 2063138816,2063335423,JP 2063335424,2063341567,AU @@ -39320,7 +42150,11 @@ 2083389440,2083454975,KR 2083454976,2083471359,CN 2083471360,2083487743,JP -2083487744,2083504127,AU +2083487744,2083491583,AU +2083491584,2083491839,US +2083491840,2083492863,AU +2083492864,2083493375,US +2083493376,2083504127,AU 2083504128,2083520511,JP 2083520512,2083966719,KR 2083966720,2083966975,JP @@ -39345,7 +42179,6 @@ 2087452672,2087453695,AU 2087453696,2087454719,KH 2087454720,2087456767,CN -2087456768,2087457791,MY 2087458816,2087460863,FJ 2087460864,2087462911,JP 2087462912,2087464959,CN @@ -39481,7 +42314,9 @@ 2099216384,2099232767,KR 2099232768,2100297727,CN 2100297728,2100854783,JP -2100854784,2100887551,US +2100854784,2100874495,US +2100874496,2100874751,AU +2100874752,2100887551,US 2100887552,2100953087,KR 2100953088,2100969471,VN 2100969472,2100985855,JP @@ -39543,13 +42378,9 @@ 2112487424,2112618495,VN 2112618496,2112880639,NZ 2112880640,2113683455,KR -2113683456,2113685759,JP -2113685760,2113686015,MY -2113686016,2113687807,JP -2113687808,2113688063,AU -2113688064,2113688319,JP -2113688320,2113688575,SG -2113688576,2113693599,JP +2113683456,2113687999,JP +2113688000,2113688031,AU +2113688032,2113693599,JP 2113693600,2113693615,HK 2113693616,2113716223,JP 2113716224,2113724927,SG @@ -39571,7 +42402,11 @@ 2147489792,2147491839,RU 2147491840,2147494911,DE 2147494912,2147495167,RO -2147495168,2147498239,DE +2147495168,2147495423,DE +2147495424,2147495935,RO +2147495936,2147497215,DE +2147497216,2147497471,RO +2147497472,2147498239,DE 2147498240,2147498495,RO 2147498496,2147500031,DE 2147500032,2147501055,FR @@ -39614,7 +42449,9 @@ 2151778304,2151780351,RU 2151780352,2151782399,DE 2151782400,2151784447,ES -2151784448,2151792639,IR +2151784448,2151788479,IR +2151788480,2151788495,IQ +2151788496,2151792639,IR 2151792640,2151794687,CH 2151794688,2151796735,IT 2151796736,2151797759,DE @@ -39683,9 +42520,7 @@ 2155827200,2155831295,PL 2155831296,2155833343,RU 2155833344,2155833855,SE -2155833856,2155834084,NL -2155834085,2155834111,SE -2155834112,2155834367,NL +2155833856,2155834367,NL 2155834368,2155834464,SE 2155834465,2155834512,NL 2155834513,2155834532,SE @@ -39731,7 +42566,9 @@ 2159673344,2159869951,US 2159869952,2159935487,CA 2159935488,2160525311,US -2160525312,2160590847,SG +2160525312,2160533503,SG +2160533504,2160541695,NL +2160541696,2160590847,SG 2160590848,2160656383,US 2160721920,2160852991,US 2160852992,2160885759,RU @@ -39744,9 +42581,7 @@ 2160914432,2160918527,SA 2160918528,2161508351,US 2161508352,2161573887,FI -2161573888,2162228223,US -2162228224,2162228479,CA -2162228480,2162687999,US +2161573888,2162687999,US 2162688000,2162753535,GB 2162753536,2162819071,CA 2162819072,2162884607,RO @@ -39780,10 +42615,11 @@ 2166571008,2166575103,GB 2166575104,2166575359,US 2166575360,2166575615,GB -2166575616,2166607009,US +2166575616,2166606847,US +2166606848,2166607009,GB 2166607010,2166607010,DE -2166607011,2166607011,GB -2166607012,2166613759,US +2166607011,2166607103,GB +2166607104,2166613759,US 2166613760,2166614015,DE 2166614016,2167209983,US 2167275520,2167930879,US @@ -39855,7 +42691,9 @@ 2178351104,2178416639,GB 2178416640,2178482175,US 2178482176,2178547711,DE -2178547712,2179391487,US +2178547712,2178900223,US +2178900224,2178900479,NZ +2178900480,2179391487,US 2179391488,2179391999,GB 2179392000,2179397632,US 2179397633,2179397633,GB @@ -39993,15 +42831,21 @@ 2188718582,2188718582,DE 2188718583,2188724463,US 2188724464,2188724464,NL -2188724465,2188726783,US +2188724465,2188724991,US +2188724992,2188725247,RS +2188725248,2188726783,US 2188726784,2188727039,GB 2188727040,2188728319,US 2188728320,2188728575,GB 2188728576,2188734463,US 2188734464,2188734719,FR -2188734720,2188738306,US +2188734720,2188736511,US +2188736512,2188736767,GB +2188736768,2188738306,US 2188738307,2188738307,GB -2188738308,2188768767,US +2188738308,2188749055,US +2188749056,2188749311,SL +2188749312,2188768767,US 2188768768,2188769279,YT 2188769280,2188902399,US 2188902400,2188967935,FR @@ -40074,15 +42918,15 @@ 2193707408,2193707415,IT 2193707416,2193707559,GB 2193707560,2193707567,IT -2193707568,2193707615,GB -2193707616,2193707623,IT -2193707624,2193707751,GB +2193707568,2193707655,GB +2193707656,2193707663,IT +2193707664,2193707751,GB 2193707752,2193707759,IT -2193707760,2193707831,GB -2193707832,2193707839,IT -2193707840,2193708511,GB -2193708512,2193708519,IT -2193708520,2193708735,GB +2193707760,2193708423,GB +2193708424,2193708431,IT +2193708432,2193708647,GB +2193708648,2193708655,IT +2193708656,2193708735,GB 2193708736,2193708743,IT 2193708744,2193709087,GB 2193709088,2193709095,IT @@ -40140,9 +42984,7 @@ 2197780480,2197782527,DE 2197782528,2197782685,RU 2197782686,2197782686,UA -2197782687,2197782783,RU -2197782784,2197783039,UA -2197783040,2197786623,RU +2197782687,2197786623,RU 2197786624,2197788671,IT 2197788672,2197790719,PL 2197790720,2197792767,SE @@ -40168,7 +43010,7 @@ 2197859328,2197860351,CL 2197860352,2197865471,BR 2197865472,2197866495,AR -2197867520,2197869567,BR +2197866496,2197869567,BR 2197869568,2197870591,UY 2197870592,2197874687,BR 2197874688,2197875711,AR @@ -40180,24 +43022,83 @@ 2202534912,2202540031,BR 2202540032,2202541055,PY 2202541056,2202542079,AR -2202542080,2202550271,BR +2202542080,2202552319,BR 2202552320,2202553343,AR -2202554368,2202559487,BR +2202553344,2202554367,TT +2202554368,2202562559,BR 2202562560,2202563583,CW -2202565632,2202566655,BR +2202563584,2202567679,BR 2202567680,2202568703,AR -2202569728,2202570751,BR +2202568704,2202569727,NL +2202569728,2202573823,BR 2202573824,2202574847,AR -2202574848,2202578943,BR +2202574848,2202576895,BR +2202576896,2202577919,VE +2202577920,2202586111,BR +2202586112,2202587135,AR +2202587136,2202588159,HN +2202588160,2202589183,MX +2202589184,2202591231,BR +2202591232,2202592255,PA +2202592256,2202593279,MX +2202593280,2202595327,CL +2202595328,2202596351,AR +2202596352,2202599423,BR 2202599424,2204172287,US 2204172288,2204237823,SE 2204237824,2204303359,US 2204303360,2204368895,DE +2204368896,2204369919,PA +2204369920,2204376063,BR +2204376064,2204377087,CL +2204377088,2204378111,BR +2204378112,2204379135,TT +2204379136,2204385279,BR +2204385280,2204386303,AR +2204386304,2204391423,BR +2204391424,2204392447,AR +2204392448,2204394495,BR +2204394496,2204395519,AR +2204395520,2204396543,BR +2204396544,2204397567,AR +2204397568,2204404735,BR +2204404736,2204405759,SV +2204405760,2204409855,BR +2204409856,2204410879,TT +2204410880,2204414975,BR +2204414976,2204415999,AR +2204416000,2204417023,PY +2204417024,2204420095,BR +2204420096,2204421119,BO +2204421120,2204434431,BR 2204434432,2204499967,US 2204499968,2204565503,CH 2204565504,2204631039,US 2204631040,2204696575,CA 2204696576,2204893183,US +2204893184,2204894207,AR +2204894208,2204895231,PA +2204895232,2204897279,BR +2204897280,2204898303,HN +2204898304,2204899327,PA +2204899328,2204902399,BR +2204902400,2204903423,CR +2204903424,2204904447,AR +2204904448,2204910591,BR +2204910592,2204911615,CL +2204911616,2204913663,BR +2204913664,2204914687,AR +2204914688,2204929023,BR +2204929024,2204930047,AR +2204930048,2204936191,BR +2204936192,2204937215,CO +2204937216,2204942335,BR +2204942336,2204943359,PY +2204943360,2204946431,BR +2204946432,2204947455,CL +2204947456,2204952575,BR +2204952576,2204953599,HN +2204953600,2204958719,BR 2204958720,2205089791,US 2205089792,2205155327,GB 2205155328,2205286399,JP @@ -40216,12 +43117,13 @@ 2205538304,2205540351,RU 2205540352,2205548543,IQ 2205548544,2206269439,US -2206269440,2206334975,CA +2206269440,2206334975,HK 2206334976,2206400511,AT 2206400512,2206466047,US 2206466048,2207121407,CA 2207121408,2207449087,US -2207449088,2207647487,CA +2207449088,2207514623,HK +2207514624,2207647487,CA 2207647488,2207647743,US 2207647744,2207648511,CA 2207648512,2207649791,US @@ -40248,6 +43150,28 @@ 2208038912,2208235519,US 2208235520,2208301055,DE 2208301056,2208366591,FI +2208366592,2208379903,BR +2208379904,2208380927,HN +2208380928,2208381951,CL +2208381952,2208387071,BR +2208387072,2208388095,HN +2208388096,2208389119,SX +2208389120,2208390143,AR +2208390144,2208392191,BR +2208392192,2208393215,PE +2208393216,2208404479,BR +2208404480,2208405503,BZ +2208405504,2208406527,AR +2208406528,2208413695,BR +2208413696,2208414719,AR +2208414720,2208417791,BR +2208417792,2208418815,CL +2208418816,2208425983,BR +2208425984,2208428031,AR +2208428032,2208429055,BR +2208429056,2208430079,MX +2208430080,2208431103,BR +2208431104,2208432127,PY 2208432128,2208563199,CA 2208563200,2208759807,DK 2208759808,2208890879,US @@ -40280,11 +43204,30 @@ 2211446784,2211643391,US 2211643392,2211708927,NL 2211708928,2211774463,US -2211774464,2211839999,CA +2211774464,2211839999,HK 2211840000,2212036607,US 2212036608,2212102143,AU 2212102144,2212233215,US 2212233216,2212298751,DE +2212298752,2212299775,AR +2212299776,2212300799,DO +2212300800,2212301823,HN +2212301824,2212302847,BR +2212302848,2212303871,AR +2212303872,2212304895,BR +2212304896,2212305919,PA +2212305920,2212306943,TT +2212307968,2212308991,BR +2212308992,2212310015,CO +2212310016,2212315135,BR +2212315136,2212316159,AR +2212316160,2212335615,BR +2212335616,2212336639,CW +2212336640,2212337663,BR +2212337664,2212338687,PE +2212338688,2212340735,BR +2212340736,2212341759,CL +2212341760,2212364287,BR 2212364288,2212495359,US 2212495360,2212560895,NL 2212560896,2212691967,US @@ -40321,13 +43264,16 @@ 2214264832,2214330367,GB 2214330368,2214461439,US 2214461440,2214526975,FR +2214526976,2214527999,BR +2214528000,2214529023,AR +2214529024,2214530047,BR +2214530048,2214531071,AR +2214531072,2214540287,BR +2214541312,2214542335,BR +2214542336,2214543359,AR 2214592512,2218786815,US 2218786816,2219769855,IL -2219769856,2222521855,US -2222521856,2222522111,PR -2222522112,2223111679,US -2223111680,2223111935,VI -2223111936,2224160767,US +2219769856,2224160767,US 2224160768,2224226303,GB 2224226304,2224242687,US 2224242688,2224259071,SG @@ -40394,6 +43340,10 @@ 2231107584,2231173119,DE 2231173120,2231238655,US 2231238656,2231304191,MX +2231305216,2231306239,AR +2231307264,2231309311,BR +2231309312,2231310335,CO +2231310336,2231311359,BR 2231369728,2248146943,JP 2248146944,2248148991,IT 2248148992,2248151039,ES @@ -40438,7 +43388,9 @@ 2250047488,2250113023,US 2250113024,2250178559,DE 2250178560,2250244095,CA -2250244096,2250375167,US +2250244096,2250282239,US +2250282240,2250282495,GB +2250282496,2250375167,US 2250375168,2250440703,DE 2250440704,2250506239,US 2250506240,2250571775,GB @@ -40532,22 +43484,8 @@ 2258580032,2258582783,TW 2258582784,2258582791,GB 2258582792,2258583551,TW -2258583552,2258583575,GB -2258583576,2258583583,TW -2258583584,2258583775,GB -2258583776,2258583807,TW -2258583808,2258583935,GB -2258583936,2258583967,TW -2258583968,2258584007,GB -2258584008,2258584351,TW -2258584352,2258584383,GB -2258584384,2258584574,TW -2258584575,2258584575,GB -2258584576,2258591575,TW -2258591576,2258591579,GB -2258591580,2258591631,TW -2258591632,2258591639,GB -2258591640,2258591935,TW +2258583552,2258591743,GB +2258591744,2258591935,TW 2258591936,2258591967,HK 2258591968,2258592271,TW 2258592272,2258592279,JP @@ -40559,9 +43497,8 @@ 2258592480,2258592495,AU 2258592496,2258592511,TW 2258592512,2258592767,AU -2258592768,2258592791,TW -2258592792,2258592803,HK -2258592804,2258593279,TW +2258592768,2258593023,HK +2258593024,2258593279,TW 2258593280,2258593535,HK 2258593536,2258594047,TW 2258594048,2258594111,HK @@ -40586,13 +43523,9 @@ 2258596104,2258596159,TW 2258596160,2258596255,HK 2258596256,2258596351,TW -2258596352,2258596863,HK -2258596864,2258596887,TW -2258596888,2258596903,HK -2258596904,2258596991,TW -2258596992,2258597023,HK -2258597024,2258597115,TW -2258597116,2258597215,HK +2258596352,2258597071,HK +2258597072,2258597079,TW +2258597080,2258597215,HK 2258597216,2258597263,TW 2258597264,2258597293,HK 2258597294,2258597294,PG @@ -40647,9 +43580,11 @@ 2258599676,2258599679,JP 2258599680,2258599743,TW 2258599744,2258599747,AU -2258599748,2258600263,TW -2258600264,2258600267,HK -2258600268,2258600515,TW +2258599748,2258599935,TW +2258599936,2258599971,HK +2258599972,2258599975,AU +2258599976,2258600447,HK +2258600448,2258600515,TW 2258600516,2258600519,IN 2258600520,2258600523,TW 2258600524,2258600527,IN @@ -40674,18 +43609,10 @@ 2258601408,2258601423,AU 2258601424,2258601471,TW 2258601472,2258601983,JP -2258601984,2258602303,TW -2258602304,2258602327,HK -2258602328,2258602335,TW -2258602336,2258602367,HK -2258602368,2258602399,TW -2258602400,2258602447,HK -2258602448,2258602479,TW -2258602480,2258602495,HK -2258602496,2258602815,TW -2258602816,2258602879,HK -2258602880,2258603007,TW -2258603008,2258603071,HK +2258601984,2258602239,TW +2258602240,2258602495,HK +2258602496,2258602751,TW +2258602752,2258603071,HK 2258603072,2258603087,TW 2258603088,2258603089,HK 2258603090,2258603090,PG @@ -40705,12 +43632,11 @@ 2258603944,2258603951,TW 2258603952,2258603967,HK 2258603968,2258604031,TW -2258604032,2258604287,HK -2258604288,2258604671,TW +2258604032,2258604543,HK +2258604544,2258604671,TW 2258604672,2258604735,SG 2258604736,2258604799,AU -2258604800,2258605055,HK -2258605056,2258605311,TW +2258604800,2258605311,HK 2258605312,2258605439,SG 2258605440,2258605823,TW 2258605824,2258605951,AU @@ -40718,12 +43644,7 @@ 2258606000,2258606015,AU 2258606016,2258606047,TW 2258606048,2258606079,AU -2258606080,2258606143,TW -2258606144,2258606147,HK -2258606148,2258606151,TW -2258606152,2258606191,HK -2258606192,2258606199,TW -2258606200,2258606367,HK +2258606080,2258606367,HK 2258606368,2258606415,TW 2258606416,2258606423,HK 2258606424,2258606463,TW @@ -40743,17 +43664,17 @@ 2258607088,2258607091,AU 2258607092,2258607095,NZ 2258607096,2258607103,AU -2258607104,2258607263,TW +2258607104,2258607171,TW +2258607172,2258607172,AU +2258607173,2258607263,TW 2258607264,2258607279,AU 2258607280,2258607351,TW 2258607352,2258607359,NZ 2258607360,2258607519,AU 2258607520,2258607543,TW 2258607544,2258607551,AU -2258607552,2258607819,TW -2258607820,2258607823,HK -2258607824,2258607871,TW -2258607872,2258607879,HK +2258607552,2258607615,TW +2258607616,2258607879,HK 2258607880,2258607903,TW 2258607904,2258607999,HK 2258608000,2258608063,TW @@ -40762,7 +43683,8 @@ 2258608256,2258608259,JP 2258608260,2258608279,TW 2258608280,2258608283,JP -2258608284,2258608639,TW +2258608284,2258608383,TW +2258608384,2258608639,HK 2258608640,2258608647,AU 2258608648,2258608655,TW 2258608656,2258608663,JP @@ -40774,12 +43696,8 @@ 2258608896,2258609087,TW 2258609088,2258609119,AU 2258609120,2258609151,TW -2258609152,2258609407,AU -2258609408,2258609423,TW -2258609424,2258609471,AU -2258609472,2258609567,TW -2258609568,2258609575,AU -2258609576,2258609919,TW +2258609152,2258609663,AU +2258609664,2258609919,TW 2258609920,2258609967,AU 2258609968,2258610179,TW 2258610180,2258610183,IN @@ -40795,35 +43713,32 @@ 2258611216,2258611223,NZ 2258611224,2258611567,TW 2258611568,2258611583,AU -2258611584,2258612223,TW +2258611584,2258611967,TW +2258611968,2258612223,HK 2258612224,2258612303,AU 2258612304,2258612351,TW 2258612352,2258612367,AU 2258612368,2258612383,TW 2258612384,2258612743,AU -2258612744,2258613503,TW +2258612744,2258612767,TW +2258612768,2258612799,AU +2258612800,2258613503,TW 2258613504,2258613567,AU 2258613568,2258614783,TW 2258614784,2258614815,IN 2258614816,2258615039,TW 2258615040,2258615055,IN -2258615056,2258615347,TW -2258615348,2258615355,AU -2258615356,2258615391,TW -2258615392,2258615395,AU -2258615396,2258616191,TW +2258615056,2258615295,TW +2258615296,2258615551,AU +2258615552,2258616191,TW 2258616192,2258616203,AU 2258616204,2258616207,TW 2258616208,2258616303,AU 2258616304,2258616311,TW 2258616312,2258616319,AU -2258616320,2258620447,TW -2258620448,2258620455,HK -2258620456,2258620463,TW -2258620464,2258620467,HK -2258620468,2258620471,TW -2258620472,2258620475,HK -2258620476,2258632703,TW +2258616320,2258620415,TW +2258620416,2258621951,HK +2258621952,2258632703,TW 2258632704,2258698239,JP 2258698240,2259222527,US 2259222528,2259288063,DE @@ -40842,23 +43757,21 @@ 2260467712,2260533247,NL 2260533248,2260598783,US 2260598784,2260664319,CA -2260664320,2260720895,GB -2260720896,2260721151,DE -2260721152,2260723711,GB +2260664320,2260720639,GB +2260720640,2260720895,DE +2260720896,2260723711,GB 2260723712,2260723967,IL 2260723968,2260729343,GB 2260729344,2260729599,IL 2260729600,2260729855,GB 2260729856,2260926463,US -2260992000,2261057535,CN +2260992000,2261057535,TH 2261057536,2261188607,US 2261188608,2261254143,CA 2261254144,2261385215,US 2261385216,2261450751,PR 2261450752,2261516287,NL -2261516288,2261569535,US -2261569536,2261569791,TH -2261569792,2261647359,US +2261516288,2261647359,US 2261647360,2261712895,FR 2261712896,2261778431,US 2261778432,2261843967,TW @@ -40907,15 +43820,19 @@ 2276786176,2276851711,CA 2276851712,2277769215,US 2277769216,2277834751,GB -2277834752,2281007103,US +2277834752,2280998911,US +2280998912,2280999167,FR +2280999168,2281007103,US 2281007104,2281007359,IN -2281007360,2281023487,US +2281007360,2281010159,US +2281010160,2281010175,SG +2281010176,2281023487,US 2281023488,2281023743,IN 2281023744,2281029631,US 2281029632,2281029887,FR 2281029888,2281037823,US -2281037824,2281038079,FR -2281038080,2281701375,US +2281037824,2281037951,FR +2281037952,2281701375,US 2281701376,2281705471,CH 2281705472,2282226175,US 2282226176,2282226243,AU @@ -40945,9 +43862,7 @@ 2292973568,2293039103,DE 2293039104,2293080575,LU 2293080576,2293080831,BE -2293080832,2293085183,LU -2293085184,2293085439,BE -2293085440,2293104639,LU +2293080832,2293104639,LU 2293104640,2293825535,US 2293825536,2293891071,IN 2293891072,2293956607,AU @@ -40970,7 +43885,11 @@ 2297298944,2297364479,CH 2297364480,2297626623,US 2297626624,2297692159,DE -2297692160,2299461631,US +2297692160,2298144255,US +2298144256,2298144511,GB +2298144512,2298371071,US +2298371072,2298371327,GB +2298371328,2299461631,US 2299461632,2299527167,CA 2299527168,2299592703,US 2299592704,2299658239,NL @@ -40997,7 +43916,7 @@ 2303189558,2303189558,IE 2303189559,2303262719,US 2303262720,2303328255,GB -2303328256,2303393791,CA +2303328256,2303393791,HK 2303393792,2303459327,US 2303459328,2303524863,AU 2303524864,2303852543,US @@ -41158,17 +44077,18 @@ 2321874944,2321940479,JP 2321940480,2322006015,FR 2322006016,2322071551,US -2322071552,2322137087,GB +2322071552,2322130431,GB +2322130432,2322130687,SG +2322130688,2322137087,GB 2322137088,2322202623,US 2322202624,2322268159,SE 2322268160,2322333695,JP 2322333696,2322923519,US 2323054592,2323120127,CA 2323316736,2323382271,US -2323382272,2323406847,NO -2323406848,2323407103,DK -2323407104,2323447807,NO -2323447808,2323775487,US +2323382272,2323447807,NO +2323447808,2323693567,US +2323709952,2323775487,US 2323775488,2323841023,AU 2323841024,2323906559,CH 2323906560,2323972095,IT @@ -41214,7 +44134,13 @@ 2330525696,2330591231,SE 2330591232,2330656767,US 2330656768,2330722303,NZ -2330722304,2331181055,US +2330722304,2330956287,US +2330956288,2330956543,GB +2330956544,2330956799,US +2330956800,2330957311,NZ +2330957312,2330968063,US +2330968064,2330968319,IN +2330968320,2331181055,US 2331181056,2331246591,JP 2331246592,2331443199,DE 2331443200,2331508735,US @@ -41224,7 +44150,9 @@ 2331836416,2331901951,GB 2331901952,2331967487,US 2332033024,2332098559,ID -2332098560,2332360703,DE +2332098560,2332298751,DE +2332298752,2332298879,GB +2332298880,2332360703,DE 2332426240,2332622847,DE 2332622848,2332688383,CN 2332688384,2332753919,NL @@ -41348,7 +44276,6 @@ 2344353792,2344419327,AU 2344419328,2344484863,CN 2344484864,2344550399,PK -2344609024,2344609279,IT 2344615936,2344878079,ID 2344878080,2346188799,CN 2346188800,2346254335,AU @@ -41513,12 +44440,17 @@ 2372075520,2372206591,DE 2372206592,2372214783,UA 2372214784,2372218879,DE -2372218880,2372222975,FR +2372218880,2372222463,FR +2372222464,2372222975,CH 2372224512,2372224767,GB -2372227072,2372227583,NO -2372230400,2372230655,AT -2372231424,2372231679,HU +2372227072,2372227327,NO +2372227500,2372227510,NO +2372227520,2372227522,NO +2372227571,2372227571,NO +2372228352,2372228607,KR +2372230400,2372230655,RU 2372231680,2372232191,GB +2372233472,2372233727,NO 2372238730,2372238730,US 2372239360,2372240383,SK 2372240384,2372240895,NL @@ -41540,7 +44472,8 @@ 2372493312,2372497407,ES 2372497408,2372499455,IE 2372499456,2372501503,NL -2372501504,2372505599,UA +2372501504,2372503551,BG +2372503552,2372505599,UA 2372505600,2372507647,NL 2372507648,2372509695,IT 2372509696,2372510207,AE @@ -41548,7 +44481,9 @@ 2372510336,2372510336,ES 2372510337,2372510463,AO 2372510464,2372511743,AE -2372511744,2372513791,SI +2372511744,2372512815,SI +2372512816,2372512816,BA +2372512817,2372513791,SI 2372513792,2372534271,GB 2372534272,2372665343,US 2372665344,2372730879,IT @@ -41573,11 +44508,7 @@ 2373911042,2373911042,US 2373911043,2373976063,FI 2373976064,2374107135,US -2374107136,2374171135,DE -2374171136,2374171206,CH -2374171207,2374171207,DE -2374171208,2374171391,CH -2374171392,2374172671,DE +2374107136,2374172671,DE 2374172672,2374238207,US 2374238208,2374303743,AU 2374303744,2374369279,US @@ -41620,7 +44551,9 @@ 2375155712,2375221247,US 2375221248,2375286783,SE 2375286784,2375352319,CH -2375352320,2376269823,US +2375352320,2376079615,US +2376079616,2376079871,GB +2376079872,2376269823,US 2376269824,2376335359,GB 2376335360,2376597503,US 2376597504,2376663039,AU @@ -41647,7 +44580,11 @@ 2378026240,2378026495,US 2378026496,2378027007,FR 2378027008,2378170367,US -2378170368,2378235903,FI +2378170368,2378203135,FI +2378203136,2378203647,NO +2378203648,2378210559,FI +2378210560,2378211071,NO +2378211072,2378235903,FI 2378235904,2378301439,US 2378301440,2378366975,FR 2378366976,2378432511,US @@ -41674,9 +44611,7 @@ 2380558848,2380559103,ZA 2380559104,2380578815,GB 2380578816,2380579071,JP -2380579072,2380579327,GB -2380579328,2380579583,HK -2380579584,2380595199,GB +2380579072,2380595199,GB 2380660736,2380726271,US 2380726272,2380791807,GB 2380791808,2381119487,US @@ -41695,8 +44630,10 @@ 2382168064,2382233599,BE 2382233600,2382299135,US 2382299136,2382331903,GR -2382331904,2382335999,FR -2382336000,2382340095,NL +2382331904,2382336255,FR +2382336256,2382337791,NL +2382337792,2382338047,FR +2382338048,2382340095,NL 2382340096,2382342143,CH 2382342144,2382344191,AT 2382344192,2382346239,NL @@ -41723,7 +44660,9 @@ 2382659072,2382676479,US 2382676480,2382676991,CA 2382676992,2382677503,US -2382677504,2382677987,CA +2382677504,2382677507,CA +2382677508,2382677511,BY +2382677512,2382677987,CA 2382677988,2382677991,US 2382677992,2382678015,CA 2382678016,2382678527,US @@ -41746,15 +44685,13 @@ 2386690048,2386988287,CA 2386988288,2386988543,CH 2386988544,2386989055,CA -2386989056,2386989311,GB +2386989056,2386989311,CH 2386989312,2387003391,CA -2387003392,2387003647,GB +2387003392,2387003647,CH 2387003648,2387003903,CA -2387003904,2387004159,GB +2387003904,2387004159,CH 2387004160,2387344127,CA -2387344128,2387344895,US -2387344896,2387345151,CA -2387345152,2387345407,US +2387344128,2387345407,US 2387345408,2387410943,CA 2387410944,2387476479,US 2387476480,2387542015,CA @@ -41773,23 +44710,21 @@ 2390818816,2390884351,US 2390884352,2390995455,CA 2390995456,2391015423,US -2391015424,2391277567,CA +2391015424,2391165439,CA +2391165440,2391165695,US +2391165696,2391277567,CA 2391277568,2391343103,US -2391343104,2393044095,CA -2393044096,2393044223,US -2393044224,2394947583,CA +2391343104,2393313407,CA +2393313408,2393313535,US +2393313536,2394947583,CA 2394947584,2395013119,US 2395013120,2395209727,CA 2395209728,2395340799,US -2395340800,2395804159,CA -2395804160,2395804415,GB -2395804416,2395814911,CA +2395340800,2395814911,CA 2395814912,2395815167,US 2395815168,2395841023,CA 2395841024,2395841535,GB -2395841536,2395854079,CA -2395854080,2395854335,US -2395854336,2397700095,CA +2395841536,2397700095,CA 2397700096,2397765631,US 2397765632,2398748671,CA 2398748672,2398945279,US @@ -41987,7 +44922,9 @@ 2427322368,2427453439,US 2427453440,2427536895,NO 2427536896,2427537151,US -2427537152,2427584511,NO +2427537152,2427544319,NO +2427544320,2427544575,MY +2427544576,2427584511,NO 2427584512,2427650047,GB 2427650048,2427846655,NO 2427846656,2428174335,US @@ -42014,9 +44951,7 @@ 2432172032,2432237567,BE 2432237568,2432568575,US 2432568576,2432568831,BE -2432568832,2432577535,US -2432577536,2432577791,GB -2432577792,2432587263,US +2432568832,2432587263,US 2432587264,2432587519,IE 2432587520,2432616447,US 2432616448,2432617471,NL @@ -42098,7 +45033,8 @@ 2449477632,2449479679,AL 2449479680,2449481727,FR 2449481728,2449485823,DE -2449485824,2449489919,RO +2449485824,2449487871,IE +2449487872,2449489919,RO 2449489920,2449490943,FR 2449490944,2449491199,DE 2449491200,2449491967,FR @@ -42119,7 +45055,9 @@ 2450849792,2450915327,SE 2450915328,2451026431,US 2451026432,2451026687,AU -2451026688,2451042815,US +2451026688,2451031807,US +2451031808,2451032063,SG +2451032064,2451042815,US 2451042816,2451043071,ZA 2451043072,2451986959,US 2451986960,2451986960,GB @@ -42143,7 +45081,7 @@ 2453803008,2453805055,KZ 2453805056,2453807103,FI 2453807104,2453815295,GB -2453815296,2453831679,RO +2453815296,2453831679,BG 2453831680,2453833727,IQ 2453833728,2453835775,ES 2453835776,2453837823,FR @@ -42164,11 +45102,14 @@ 2454585344,2454716415,US 2454716416,2454781951,GB 2454781952,2454847487,FI -2454847488,2454851583,US +2454847488,2454851327,US +2454851328,2454851583,DE 2454851584,2454851839,DK 2454851840,2454853119,US 2454853120,2454853375,DK -2454853376,2454885503,US +2454853376,2454864895,US +2454864896,2454865151,FR +2454865152,2454885503,US 2454885504,2454885631,GB 2454885632,2454887423,US 2454887424,2454887679,DK @@ -42178,9 +45119,9 @@ 2454905920,2454905951,AR 2454905952,2454906943,US 2454906944,2454906951,CL -2454906952,2454907265,US -2454907266,2454907266,CL -2454907267,2454907903,US +2454906952,2454907263,US +2454907264,2454907391,CL +2454907392,2454907903,US 2454907904,2454908159,VE 2454908160,2454913023,US 2454913024,2454978559,CL @@ -42194,9 +45135,10 @@ 2455247872,2455248895,US 2455248896,2455257087,TH 2455257088,2455261183,PH -2455261184,2455262207,US +2455261184,2455262207,MY 2455262208,2455263231,KR -2455263232,2455273471,US +2455263232,2455265279,PH +2455265280,2455273471,US 2455273472,2455275519,AU 2455275520,2455371775,US 2455371776,2455437311,GB @@ -42258,9 +45200,7 @@ 2459893760,2459959295,CH 2459959296,2460024831,US 2460024832,2460090367,FI -2460090368,2460152319,GB -2460152320,2460152575,FR -2460152576,2460155903,GB +2460090368,2460155903,GB 2460155904,2460221439,US 2460221440,2460286975,BR 2460286976,2460549119,US @@ -42269,7 +45209,9 @@ 2460680192,2460745727,NZ 2460745728,2460811263,NO 2460811264,2460876799,SE -2460876800,2460942335,US +2460876800,2460920319,US +2460920320,2460920575,GB +2460920576,2460942335,US 2460942336,2461007871,BE 2461007872,2461138943,GB 2461138944,2461204479,AU @@ -42371,7 +45313,9 @@ 2466242560,2466250751,GE 2466250752,2466318335,US 2466318336,2466318591,SG -2466318592,2466323455,US +2466318592,2466319103,US +2466319104,2466319359,AU +2466319360,2466323455,US 2466323456,2466323711,SG 2466323712,2466326015,US 2466326016,2466326271,SG @@ -42409,11 +45353,15 @@ 2470248448,2470510591,US 2470510592,2470576127,BR 2470576128,2470641663,AU -2470641664,2470707199,LU +2470641664,2470703359,LU +2470703360,2470703615,BE +2470703616,2470707199,LU 2470707200,2470772735,GB 2470772736,2470838271,AU 2470838272,2471165951,US -2471165952,2471231487,CH +2471165952,2471198719,CH +2471198720,2471211007,US +2471211008,2471231487,CH 2471231488,2471297023,AU 2471297024,2471362559,GB 2471428096,2471690239,US @@ -42538,7 +45486,13 @@ 2486697984,2486763519,AT 2486763520,2486960127,US 2486960128,2487025663,FR -2487025664,2488205311,US +2487025664,2487369727,US +2487369728,2487369983,PF +2487369984,2487370495,US +2487370496,2487384319,PF +2487384320,2487384575,US +2487384576,2487386111,PF +2487386112,2488205311,US 2488205312,2488270847,GB 2488270848,2488336383,US 2488336384,2488401919,PL @@ -42550,11 +45504,7 @@ 2489712640,2489745407,PE 2489745408,2489778175,HT 2489778176,2489843711,DO -2489843712,2489995519,US -2489995520,2489995544,SG -2489995545,2489995545,US -2489995546,2489995775,SG -2489995776,2490013695,US +2489843712,2490013695,US 2490013696,2490015743,GB 2490015744,2490043391,US 2490043392,2490043647,GB @@ -42580,23 +45530,17 @@ 2492989440,2493513727,US 2493513728,2493579263,SE 2493579264,2493644799,JP -2493644800,2493755391,US -2493755904,2493756415,US -2493759488,2494103551,US +2493644800,2494103551,US 2494103552,2494169087,FR 2494169088,2494562303,US 2494562304,2494627839,GB 2494627840,2494650623,US 2494650624,2494650879,BR -2494650880,2494657535,US -2494657536,2494657791,CO -2494657792,2494677247,US +2494650880,2494677247,US 2494677248,2494677503,AU 2494677504,2494677759,US 2494677760,2494678015,AU -2494678016,2494683135,US -2494683136,2494683391,SG -2494683392,2494689791,US +2494678016,2494689791,US 2494689792,2494690047,IN 2494690048,2494889983,US 2494889984,2494955519,GB @@ -42604,13 +45548,13 @@ 2495021056,2495152127,US 2495217664,2495283199,US 2495283200,2495348735,CH -2495348736,2495410943,US -2495410944,2495411199,AU -2495411200,2495807487,US +2495348736,2495807487,US 2495807488,2495873023,AU 2495873024,2495938559,CH 2495938560,2496004095,GB -2496004096,2496069631,AT +2496004096,2496015103,AT +2496015104,2496015359,PL +2496015360,2496069631,AT 2496069632,2496135167,US 2496135168,2496200703,NL 2496200704,2497682431,MX @@ -42650,29 +45594,37 @@ 2500149504,2500149759,GB 2500149760,2500150527,US 2500150528,2500150783,GB -2500150784,2500158463,US -2500158464,2500158719,GB -2500158720,2500161023,US +2500150784,2500161023,US 2500161024,2500161535,GB -2500161536,2500162175,US -2500162176,2500162815,GB -2500162816,2500166207,US -2500166208,2500166223,GB -2500166224,2500175871,US +2500161536,2500162559,US +2500162560,2500162815,GB +2500162816,2500166143,US +2500166144,2500166399,GB +2500166400,2500175871,US 2500175872,2500175879,RO -2500175880,2500188159,US -2500188160,2500188415,CH -2500188416,2500198911,US +2500175880,2500188679,US +2500188680,2500188687,CH +2500188688,2500196351,US +2500196352,2500198399,FI +2500198400,2500198911,US 2500198912,2500199167,GB 2500199168,2500199423,US 2500199424,2500199679,IE -2500199680,2500201535,US +2500199680,2500200703,US +2500200704,2500200959,GB +2500200960,2500201535,US 2500201536,2500201543,GB 2500201544,2500202879,US 2500202880,2500203007,ES -2500203008,2500219135,US +2500203008,2500212415,US +2500212416,2500212423,CH +2500212424,2500212991,US +2500212992,2500213247,ES +2500213248,2500219135,US 2500219136,2500219391,DE -2500219392,2500225551,US +2500219392,2500221455,US +2500221456,2500221459,FR +2500221460,2500225551,US 2500225552,2500225559,ES 2500225560,2500228607,US 2500228608,2500228863,FR @@ -42694,23 +45646,23 @@ 2500245504,2500245759,GB 2500245760,2500246015,US 2500246016,2500246527,GB -2500246528,2500272127,US +2500246528,2500247551,US +2500247552,2500248063,ES +2500248064,2500272127,US 2500272128,2500272639,GB -2500272640,2500274431,US -2500274432,2500274687,GB -2500274688,2500275199,US -2500275200,2500275711,GB -2500275712,2500276223,US +2500272640,2500276223,US 2500276224,2500276735,GB 2500276736,2500276991,US 2500276992,2500277247,GB 2500277248,2500289023,US -2500289024,2500289279,FR -2500289280,2500292607,US +2500289024,2500289151,FR +2500289152,2500292607,US 2500292608,2500292863,DE 2500292864,2500293375,US 2500293376,2500293631,DE -2500293632,2500319231,US +2500293632,2500313855,US +2500313856,2500314111,AT +2500314112,2500319231,US 2500319232,2500319743,ES 2500319744,2500392959,US 2500392960,2500393215,IN @@ -42720,9 +45672,13 @@ 2500532750,2500532750,GR 2500532751,2500535295,US 2500535296,2500535551,IE -2500535552,2500537687,US +2500535552,2500537343,US +2500537344,2500537599,GB +2500537600,2500537687,US 2500537688,2500537695,GB -2500537696,2500551679,US +2500537696,2500542751,US +2500542752,2500542755,NL +2500542756,2500551679,US 2500551680,2500551935,FR 2500551936,2500553759,US 2500553760,2500553767,GB @@ -42730,9 +45686,7 @@ 2500554380,2500554487,DE 2500554488,2500555263,US 2500555264,2500555519,FR -2500555520,2500558847,US -2500558848,2500559103,FR -2500559104,2500591615,US +2500555520,2500591615,US 2500591616,2500595711,GB 2500595712,2500608511,US 2500608512,2500608767,ES @@ -42742,19 +45696,27 @@ 2500616192,2500616703,IT 2500616704,2500636735,US 2500636736,2500636799,GB -2500636800,2500638719,US +2500636800,2500637727,US +2500637728,2500637759,GB +2500637760,2500638719,US 2500638720,2500639743,GB -2500639744,2500644863,US -2500644864,2500645119,FR -2500645120,2500646911,US +2500639744,2500646911,US 2500646912,2500647935,ES -2500647936,2500687871,US +2500647936,2500666111,US +2500666112,2500666367,LU +2500666368,2500666463,US +2500666464,2500666471,LU +2500666472,2500687871,US 2500687872,2500689919,FR 2500689920,2500694271,US 2500694272,2500694527,IT 2500694528,2500719103,US 2500719104,2500720639,IE -2500720640,2501574655,US +2500720640,2500720652,US +2500720653,2500720653,IE +2500720654,2500723799,US +2500723800,2500723807,ES +2500723808,2501574655,US 2501574656,2501640191,KZ 2501640192,2503016447,US 2503016448,2503081983,IL @@ -42774,17 +45736,28 @@ 2503917568,2503933951,BG 2503933952,2504470527,US 2504470528,2504470783,ES -2504470784,2504474623,US +2504470784,2504472831,US +2504472832,2504473599,ES +2504473600,2504474623,US 2504474624,2504482815,HR -2504482816,2504491007,US +2504482816,2504486911,ES +2504486912,2504491007,US 2504491008,2504499199,IT 2504499200,2504916991,US 2504916992,2504982527,IL -2504982528,2505793535,US +2504982528,2505457663,US +2505457664,2505459711,IE +2505459712,2505469951,US +2505469952,2505474047,NL +2505474048,2505572351,US +2505572352,2505637887,IL +2505637888,2505793535,US 2505793536,2505801727,ES 2505801728,2506293247,US 2506293248,2506358783,CA -2506358784,2506360831,US +2506358784,2506359039,US +2506359040,2506359295,ES +2506359296,2506360831,US 2506360832,2506361087,ES 2506361088,2507124735,US 2507124736,2507124991,IN @@ -42816,7 +45789,9 @@ 2508324864,2508455935,US 2508455936,2508521471,IT 2508521472,2508587007,CH -2508587008,2508652543,BE +2508587008,2508631295,BE +2508631296,2508631551,US +2508631552,2508652543,BE 2508652544,2508718079,AU 2508718080,2508914687,US 2508914688,2508980223,IT @@ -43143,7 +46118,7 @@ 2545090560,2545156095,US 2545156096,2545221631,GB 2545221632,2545287167,US -2545287168,2545352703,GB +2545287168,2545352703,ES 2545352704,2545352959,SE 2545352960,2545418239,CH 2545418240,2545483775,NL @@ -43154,7 +46129,8 @@ 2545811456,2547187711,US 2547187712,2547318783,GB 2547318784,2547515391,US -2547515392,2547523583,GB +2547523584,2547535871,GB +2547540480,2547540735,SE 2547553024,2547553279,RU 2548039680,2548563967,GB 2548563968,2548826111,IR @@ -43198,7 +46174,8 @@ 2549612544,2549614591,SE 2549614592,2549616639,IT 2549616640,2549618687,BE -2549618688,2549620735,DE +2549618688,2549618943,US +2549618944,2549620735,DE 2549620736,2549624831,PL 2549624832,2549626879,BE 2549626880,2549628927,PL @@ -43208,7 +46185,8 @@ 2549645312,2549678079,CH 2549678080,2549698559,GB 2549698560,2549700607,PL -2549700608,2549701375,DE +2549700608,2549700863,FR +2549700864,2549701375,DE 2549701376,2549701631,SE 2549701632,2549701887,PL 2549701888,2549702143,FR @@ -43236,7 +46214,8 @@ 2549927936,2549929983,HR 2549929984,2549932031,DE 2549932032,2549940223,HR -2549940224,2550136831,RO +2549940224,2550005759,AE +2550005760,2550136831,RO 2550136832,2550202367,DO 2550202368,2553544703,US 2553544704,2553610239,IN @@ -43282,7 +46261,8 @@ 2556780032,2556780799,SG 2556780800,2556821503,HK 2556821504,2556887039,SG -2556887040,2557018111,HK +2556887040,2556985343,HK +2556985344,2557018111,CN 2557018112,2557083647,GB 2557083648,2557542399,ZA 2557542400,2557607935,US @@ -43392,7 +46372,86 @@ 2584412160,2584477695,CA 2584477696,2584608767,US 2584608768,2584739839,CH -2584739840,2584805375,MU +2584739840,2584739903,SG +2584739904,2584740351,MU +2584740352,2584740415,HK +2584740416,2584740863,MU +2584740864,2584740927,SG +2584740928,2584741375,MU +2584741376,2584741439,HK +2584741440,2584741887,MU +2584741888,2584741951,SG +2584741952,2584742399,MU +2584742400,2584742463,HK +2584742464,2584742911,MU +2584742912,2584742975,SG +2584742976,2584743423,MU +2584743424,2584743487,HK +2584743488,2584743935,MU +2584743936,2584743999,SG +2584744000,2584744447,MU +2584744448,2584744511,HK +2584744512,2584744959,MU +2584744960,2584745023,SG +2584745024,2584745471,MU +2584745472,2584745535,HK +2584745536,2584745983,MU +2584745984,2584746047,SG +2584746048,2584746495,MU +2584746496,2584746559,HK +2584746560,2584747007,MU +2584747008,2584747071,SG +2584747072,2584747519,MU +2584747520,2584747583,HK +2584747584,2584748031,MU +2584748032,2584748095,SG +2584748096,2584748543,MU +2584748544,2584748607,HK +2584748608,2584749055,MU +2584749056,2584749119,SG +2584749120,2584749567,MU +2584749568,2584749631,HK +2584749632,2584750079,MU +2584750080,2584750143,SG +2584750144,2584750591,MU +2584750592,2584750655,HK +2584750656,2584751103,MU +2584751104,2584751167,SG +2584751168,2584751615,MU +2584751616,2584751679,HK +2584751680,2584752127,MU +2584752128,2584752191,SG +2584752192,2584752639,MU +2584752640,2584752703,HK +2584752704,2584753151,MU +2584753152,2584753215,SG +2584753216,2584753663,MU +2584753664,2584753727,HK +2584753728,2584754175,MU +2584754176,2584754239,SG +2584754240,2584754687,MU +2584754688,2584754751,HK +2584754752,2584755199,MU +2584755200,2584755263,SG +2584755264,2584755711,MU +2584755712,2584755775,HK +2584755776,2584756223,MU +2584756224,2584756287,SG +2584756288,2584756735,MU +2584756736,2584756799,HK +2584756800,2584757247,MU +2584757248,2584757311,SG +2584757312,2584757759,MU +2584757760,2584757823,HK +2584757824,2584758271,MU +2584758272,2584758335,SG +2584758336,2584758783,MU +2584758784,2584758847,HK +2584758848,2584759295,MU +2584759296,2584759359,SG +2584759360,2584759807,MU +2584759808,2584759871,HK +2584759872,2584805375,MU 2584805376,2585001983,US 2585001984,2585067519,CA 2585067520,2585788415,US @@ -43409,18 +46468,27 @@ 2586610176,2586610431,ES 2586610432,2586610687,US 2586610688,2586611711,ES -2586611712,2586611967,GB -2586611968,2586619903,US +2586611712,2586619903,US 2586619904,2586620415,FR 2586620416,2586622463,US 2586622464,2586622975,ES -2586622976,2586640895,US +2586622976,2586640383,US +2586640384,2586640399,MC +2586640400,2586640895,US 2586640896,2586641407,FR 2586641408,2586650687,US 2586650688,2586650703,DE -2586650704,2586733567,US +2586650704,2586650879,US +2586650880,2586651135,NL +2586651136,2586714879,US +2586714880,2586715135,NL +2586715136,2586733567,US 2586733568,2586733823,LT -2586733824,2586804223,US +2586733824,2586734591,US +2586734592,2586735615,LT +2586735616,2586788607,US +2586788608,2586788863,GB +2586788864,2586804223,US 2586804224,2586804479,ES 2586804480,2586828799,US 2586828800,2586829055,CH @@ -43429,8 +46497,8 @@ 2586874880,2586875135,US 2586875136,2586875903,ES 2586875904,2586876927,US -2586876928,2586877951,ES -2586877952,2586952191,US +2586876928,2586879999,ES +2586880000,2586952191,US 2586952192,2586952447,FR 2586952448,2587017215,US 2587017216,2587017471,IE @@ -43440,8 +46508,8 @@ 2587021824,2587022335,IE 2587022336,2587066879,US 2587066880,2587067135,GB -2587067136,2587067647,US -2587067648,2587067903,GB +2587067136,2587067391,US +2587067392,2587067903,GB 2587067904,2587068415,US 2587068416,2587068479,GB 2587068480,2587071759,US @@ -43454,27 +46522,43 @@ 2587240390,2587240390,FR 2587240391,2587249417,US 2587249418,2587249418,FR -2587249419,2587394047,US +2587249419,2587378175,US +2587378176,2587378431,IT +2587378432,2587379967,US +2587379968,2587380223,IT +2587380224,2587394047,US 2587394048,2587394559,ES -2587394560,2587396095,US +2587394560,2587394815,US +2587394816,2587395071,ES +2587395072,2587396095,US 2587396096,2587399167,ES 2587399168,2587443199,US 2587443200,2587447295,CH 2587447296,2587476760,US 2587476761,2587476761,LB -2587476762,2587479119,US +2587476762,2587477759,US +2587477760,2587478015,LB +2587478016,2587479119,US 2587479120,2587479120,LB -2587479121,2587481969,US +2587479121,2587481087,US +2587481088,2587481343,LB +2587481344,2587481969,US 2587481970,2587481970,LB 2587481971,2587492351,US 2587492352,2587493375,ES 2587493376,2587508735,US 2587508736,2587525119,GB 2587525120,2587542527,US -2587542528,2587543551,ES -2587543552,2587926527,US +2587542528,2587544063,ES +2587544064,2587582463,US +2587582464,2587586559,NL +2587586560,2587926527,US 2587926528,2587930623,BG -2587930624,2587951103,US +2587930624,2587939071,US +2587939072,2587939583,PR +2587939584,2587940607,US +2587940608,2587940863,PR +2587940864,2587951103,US 2587951104,2587952127,ZA 2587952128,2587953151,NG 2587953152,2587954175,MU @@ -43483,7 +46567,9 @@ 2587959296,2587961343,SN 2587961344,2587962367,ZA 2587962368,2587963391,SS -2587963392,2587964415,SD +2587963392,2587964027,SD +2587964028,2587964028,SS +2587964029,2587964415,SD 2587964416,2587965439,ZA 2587965440,2587966463,KE 2587966464,2587967487,BF @@ -43550,7 +46636,7 @@ 2588442624,2588459007,CM 2588459008,2588467199,UG 2588467200,2588471295,TN -2588471296,2588476415,ZA +2588471296,2588477439,ZA 2588477440,2588478463,NG 2588478464,2588479487,UG 2588479488,2588480511,ZA @@ -43576,7 +46662,7 @@ 2588494848,2588495871,SO 2588495872,2588496895,ZW 2588496896,2588497919,BW -2588497920,2588498943,SD +2588497920,2588498943,SS 2588498944,2588499967,DZ 2588499968,2588500991,ZA 2588500992,2588502015,CI @@ -43588,21 +46674,31 @@ 2588507136,2588508159,SO 2588508160,2588510207,LY 2588510208,2588512255,ZA -2588522496,2588526591,ZA +2588512256,2588514303,TZ +2588514304,2588516351,ZA +2588516352,2588518399,TD +2588519424,2588520447,SN +2588520448,2588521471,SL +2588521472,2588526591,ZA 2588526592,2588528639,CM -2588528640,2588530687,ZA -2588532736,2588534783,ZA -2588536832,2588538879,ZA +2588528640,2588534783,ZA +2588534784,2588535807,ZM +2588535808,2588536831,NG +2588536832,2588540927,ZA 2588672000,2588934143,KE 2588934144,2589982719,SC 2589982720,2590507007,SD 2590507008,2591031295,TN 2591031296,2591096831,GA 2591293440,2591326207,GA +2591326208,2591358975,AO +2591490048,2591498239,BI +2591498240,2591510527,ZA +2591514624,2591522815,SZ 2591522816,2591526911,LR -2591531008,2591539199,ZA +2591526912,2591539199,ZA 2591539200,2591547391,GA -2591547392,2591555583,ZA +2591547392,2591571967,ZA 2591571968,2591588351,NG 2591588352,2591604735,MG 2591604736,2591612927,MU @@ -43615,21 +46711,20 @@ 2592006144,2592022527,TZ 2592022528,2592026623,BJ 2592026624,2592026879,US -2592026880,2592027391,MU +2592026880,2592027391,ZA 2592027392,2592027647,GB -2592027648,2592028159,MU +2592027648,2592028159,ZA 2592028160,2592028415,CA -2592028416,2592028671,MU +2592028416,2592028671,ZA 2592028672,2592028799,NG 2592028800,2592028927,KE -2592028928,2592029183,MU +2592028928,2592029183,ZA 2592029184,2592029311,CI -2592029312,2592029695,MU -2592029696,2592030207,ZA +2592029312,2592030207,ZA 2592030208,2592030335,GH 2592030336,2592030463,CM 2592030464,2592030591,UG -2592030592,2592030719,MU +2592030592,2592030719,ZA 2592030720,2592034815,LY 2592034816,2592038911,NE 2592038912,2592043007,DZ @@ -43678,9 +46773,7 @@ 2609119232,2609184767,FR 2609184768,2609250303,PL 2609250304,2609381375,US -2609381376,2609428479,GB -2609428480,2609428735,IN -2609428736,2609446911,GB +2609381376,2609446911,GB 2609446912,2609512447,DK 2609512448,2609643519,US 2609643520,2609709055,GB @@ -43717,9 +46810,7 @@ 2614165504,2614231039,NO 2614231040,2614296575,ES 2614296576,2614362111,BR -2614362112,2614386431,US -2614386432,2614386559,PR -2614386560,2615083007,US +2614362112,2615083007,US 2615083008,2615148543,TR 2615148544,2615345151,US 2615345152,2615410687,NO @@ -43773,7 +46864,7 @@ 2617146624,2617146879,GY 2617146880,2617147135,DE 2617147136,2617147391,AO -2617147392,2617148159,US +2617147392,2617148415,US 2617151488,2617155583,CA 2617155584,2617163775,US 2617163776,2617164031,SK @@ -43909,6 +47000,7 @@ 2627010560,2627076095,NZ 2627076096,2627141631,NL 2627141632,2627403775,US +2627469312,2627731455,TZ 2634022912,2634088447,CN 2634088448,2634350591,JP 2634416128,2635005951,JP @@ -44005,7 +47097,9 @@ 2647326720,2647392255,GB 2647392256,2647457791,US 2647457792,2647523327,JP -2647523328,2647687167,US +2647523328,2647605503,US +2647605504,2647605759,GB +2647605760,2647687167,US 2647687168,2647687423,CA 2647687424,2647851007,US 2647851008,2647916543,AU @@ -44064,7 +47158,9 @@ 2655125504,2655191039,PL 2655256576,2655715327,US 2655715328,2655780863,PL -2655780864,2656632831,US +2655780864,2656387071,US +2656387072,2656403455,CA +2656403456,2656632831,US 2656632832,2656698367,AU 2656698368,2656763903,FI 2656763904,2656829439,US @@ -44087,7 +47183,9 @@ 2658009088,2658074623,IT 2658074624,2658140159,US 2658140160,2658205695,NO -2658205696,2658598911,US +2658205696,2658451455,US +2658451456,2658451711,MY +2658451712,2658598911,US 2658598912,2658664447,GB 2658664448,2658926591,US 2658926592,2659057663,GB @@ -44119,9 +47217,7 @@ 2661548032,2661679103,US 2661679104,2661885951,LU 2661885952,2661886207,BE -2661886208,2661909247,LU -2661909248,2661909503,BE -2661909504,2661914111,LU +2661886208,2661914111,LU 2661914112,2661914367,BE 2661914368,2661941247,LU 2661941248,2662006783,CL @@ -44155,7 +47251,9 @@ 2665545728,2665611263,DE 2665611264,2665676799,CH 2665676800,2665742335,ES -2665742336,2665873407,US +2665742336,2665783551,US +2665783552,2665783807,GB +2665783808,2665873407,US 2665873408,2665938943,GB 2665938944,2666004479,FR 2666004480,2666070015,CH @@ -44178,8 +47276,7 @@ 2667528192,2667532287,FR 2667532288,2667534335,RU 2667534336,2667536383,PL -2667536384,2667536639,FR -2667536640,2667537087,AT +2667536384,2667537087,AT 2667537088,2667537119,FR 2667537120,2667537151,AT 2667537152,2667541503,FR @@ -44225,7 +47322,10 @@ 2668102648,2668102655,US 2668102656,2668102991,NL 2668102992,2668102999,US -2668103000,2668103743,NL +2668103000,2668103719,NL +2668103720,2668103727,US +2668103728,2668103735,NL +2668103736,2668103743,US 2668103744,2668103775,KE 2668103776,2668104127,NL 2668104128,2668104135,GB @@ -44233,8 +47333,84 @@ 2668104192,2668104207,KE 2668104208,2668104247,NL 2668104248,2668104255,US -2668104256,2668167167,NL -2668167168,2668363775,US +2668104256,2668104999,NL +2668105000,2668105015,US +2668105016,2668105063,NL +2668105064,2668105071,US +2668105072,2668105135,NL +2668105136,2668105151,US +2668105152,2668105223,NL +2668105224,2668105239,US +2668105240,2668105255,NL +2668105256,2668105271,US +2668105272,2668105287,NL +2668105288,2668105351,US +2668105352,2668105383,NL +2668105384,2668105391,US +2668105392,2668105399,NL +2668105400,2668105439,US +2668105440,2668105471,NL +2668105472,2668105479,US +2668105480,2668105727,NL +2668105728,2668105791,US +2668105792,2668106935,NL +2668106936,2668106943,US +2668106944,2668106951,NL +2668106952,2668106959,US +2668106960,2668107599,NL +2668107600,2668107607,US +2668107608,2668107679,NL +2668107680,2668107687,US +2668107688,2668107711,NL +2668107712,2668107759,US +2668107760,2668107767,NL +2668107768,2668107775,US +2668107776,2668108303,NL +2668108304,2668108335,US +2668108336,2668108343,CA +2668108344,2668108359,US +2668108360,2668108383,NL +2668108384,2668108391,US +2668108392,2668108399,NL +2668108400,2668108415,US +2668108416,2668108799,NL +2668108800,2668108807,US +2668108808,2668108823,NL +2668108824,2668108831,US +2668108832,2668108855,NL +2668108856,2668108863,US +2668108864,2668108887,NL +2668108888,2668108903,US +2668108904,2668108919,NL +2668108920,2668108927,US +2668108928,2668108935,NL +2668108936,2668108951,GB +2668108952,2668108967,NL +2668108968,2668108983,US +2668108984,2668108999,NL +2668109000,2668109023,US +2668109024,2668109031,NL +2668109032,2668109047,US +2668109048,2668109063,NL +2668109064,2668109071,US +2668109072,2668109615,NL +2668109616,2668109623,US +2668109624,2668109639,NL +2668109640,2668109663,US +2668109664,2668109671,NL +2668109672,2668109687,US +2668109688,2668109695,NL +2668109696,2668109743,US +2668109744,2668109751,NL +2668109752,2668109759,US +2668109760,2668109951,NL +2668109952,2668110047,US +2668110048,2668134399,NL +2668134400,2668150783,GB +2668150784,2668167167,NL +2668167168,2668286463,US +2668286464,2668286719,GB +2668286720,2668363775,US 2668363776,2668429311,CH 2668429312,2668494847,AU 2668494848,2668560383,US @@ -44253,9 +47429,14 @@ 2668916736,2668918783,TR 2668918784,2668920831,ES 2668920832,2668953599,IT -2668953600,2668989951,US +2668953600,2668969983,US +2668969984,2668971007,GB +2668971008,2668987135,US +2668987136,2668987391,AU +2668987392,2668989951,US 2668989952,2668990463,NZ -2668990464,2669019135,US +2668990464,2668991487,IN +2668991488,2669019135,US 2669019136,2669084671,CH 2669084672,2669150207,ES 2669150208,2669215743,US @@ -44280,9 +47461,9 @@ 2671378432,2671443967,NO 2671443968,2671509503,US 2671509504,2671575039,NL -2671575040,2671720191,US -2671720192,2671720447,VE -2671720448,2671749119,US +2671575040,2671711479,US +2671711480,2671711483,DE +2671711484,2671749119,US 2671749120,2671750143,CA 2671750144,2672295935,US 2672295936,2672361471,SE @@ -44303,9 +47484,7 @@ 2673737728,2673803263,US 2673803264,2673868799,FR 2673868800,2674130943,US -2674130944,2674163711,GB -2674163712,2674171903,CA -2674171904,2674175999,GB +2674130944,2674175999,GB 2674176000,2674192383,US 2674192384,2674196479,CH 2674196480,2674249727,GB @@ -44337,23 +47516,25 @@ 2677080064,2677145599,US 2677145600,2677178367,TR 2677178368,2677211135,UA -2677211136,2677276671,GB +2677211136,2677276671,ES 2677276672,2677342207,LV 2677342208,2677407743,IT 2677407744,2677473279,US 2677473280,2677538815,FR 2677538816,2677604351,FI -2677604352,2677622783,US -2677622784,2677623039,IE -2677623040,2677635071,US +2677604352,2677635071,US 2677635072,2677636095,CN 2677636096,2677639679,US 2677639680,2677639935,CA 2677639936,2677642239,US 2677642240,2677642495,ES -2677642496,2677642751,US +2677642496,2677642751,CA 2677642752,2677643007,SE -2677643008,2677648383,US +2677643008,2677644287,US +2677644288,2677644347,GB +2677644348,2677644348,US +2677644349,2677644543,GB +2677644544,2677648383,US 2677648384,2677649407,JP 2677649408,2677650431,US 2677650432,2677650943,RO @@ -44368,7 +47549,9 @@ 2677669888,2677735423,DE 2677735424,2677800959,US 2677800960,2677866495,CH -2677866496,2677997567,US +2677866496,2677924863,US +2677924864,2677925119,GB +2677925120,2677997567,US 2677997568,2678063103,CA 2678063104,2678128639,UA 2678128640,2678194175,US @@ -44411,7 +47594,10 @@ 2679242752,2679308287,US 2679308288,2679373823,CH 2679373824,2679406591,GB -2679406592,2679422975,BR +2679406592,2679414783,US +2679414784,2679418879,BR +2679418880,2679420927,SG +2679420928,2679422975,BR 2679422976,2679431167,US 2679431168,2679439359,FR 2679439360,2679523327,US @@ -44448,7 +47634,9 @@ 2682014208,2682014719,GB 2682014720,2682015231,US 2682015232,2682015487,IN -2682015488,2682123263,US +2682015488,2682107903,US +2682107904,2682108159,GB +2682108160,2682123263,US 2682123264,2682123519,AU 2682123520,2682257407,US 2682257408,2682322943,UA @@ -44467,8 +47655,9 @@ 2683371520,2683437055,CH 2683437056,2683568127,US 2683568128,2683633663,GB -2683637760,2683637859,NL -2683637861,2683641855,NL +2683637760,2683637859,FR +2683637861,2683638015,FR +2683638016,2683641855,NL 2683641856,2683645951,US 2683646208,2683650047,SG 2683650048,2683651071,US @@ -44508,13 +47697,17 @@ 2684191988,2684191999,US 2684192000,2684192103,NL 2684192104,2684192107,US -2684192108,2684192303,NL +2684192108,2684192151,NL +2684192152,2684192159,US +2684192160,2684192303,NL 2684192304,2684192311,US 2684192312,2684192387,NL 2684192388,2684192391,US 2684192392,2684192459,NL 2684192460,2684192463,US -2684192464,2684192511,NL +2684192464,2684192495,NL +2684192496,2684192503,US +2684192504,2684192511,NL 2684192512,2684192519,US 2684192520,2684192523,NL 2684192524,2684192535,US @@ -44530,7 +47723,9 @@ 2684192980,2684192983,US 2684192984,2684193147,NL 2684193148,2684193151,US -2684193152,2684193275,NL +2684193152,2684193175,NL +2684193176,2684193183,US +2684193184,2684193275,NL 2684193276,2684193279,US 2684193280,2684193447,NL 2684193448,2684193455,AZ @@ -44538,7 +47733,9 @@ 2684193584,2684193591,IE 2684193592,2684193735,NL 2684193736,2684193743,US -2684193744,2684193887,NL +2684193744,2684193751,NL +2684193752,2684193759,US +2684193760,2684193887,NL 2684193888,2684193911,US 2684193912,2684193931,NL 2684193932,2684193935,US @@ -44551,7 +47748,9 @@ 2684194144,2684194151,US 2684194152,2684194167,NL 2684194168,2684194171,US -2684194172,2684194351,NL +2684194172,2684194319,NL +2684194320,2684194327,SA +2684194328,2684194351,NL 2684194352,2684194359,US 2684194360,2684194487,NL 2684194488,2684194495,GB @@ -44563,7 +47762,9 @@ 2684194560,2684194623,US 2684194624,2684194723,NL 2684194724,2684194727,US -2684194728,2684195119,NL +2684194728,2684194815,NL +2684194816,2684194823,US +2684194824,2684195119,NL 2684195120,2684195123,US 2684195124,2684195199,NL 2684195200,2684195263,US @@ -44573,7 +47774,9 @@ 2684195336,2684195339,US 2684195340,2684195663,NL 2684195664,2684195667,US -2684195668,2684195867,NL +2684195668,2684195695,NL +2684195696,2684195703,US +2684195704,2684195867,NL 2684195868,2684195871,US 2684195872,2684195927,NL 2684195928,2684195935,JP @@ -44581,7 +47784,9 @@ 2684195980,2684195983,US 2684195984,2684196095,NL 2684196096,2684196159,US -2684196160,2684196343,NL +2684196160,2684196215,NL +2684196216,2684196223,US +2684196224,2684196343,NL 2684196344,2684196351,US 2684196352,2684196391,NL 2684196392,2684196399,US @@ -44595,7 +47800,9 @@ 2684196940,2684196943,US 2684196944,2684196959,NL 2684196960,2684196963,US -2684196964,2684197099,NL +2684196964,2684197031,NL +2684197032,2684197039,IT +2684197040,2684197099,NL 2684197100,2684197103,US 2684197104,2684197115,NL 2684197116,2684197119,US @@ -44660,9 +47867,8 @@ 2687041536,2687238143,US 2687238144,2687297231,DE 2687297232,2687297239,GB -2687297240,2687301375,DE -2687301376,2687301631,NL -2687301632,2687560191,DE +2687297240,2687297247,SE +2687297248,2687560191,DE 2687560192,2687560447,ZA 2687560448,2687762431,DE 2687762432,2687827967,AT @@ -44744,8 +47950,8 @@ 2697854976,2697889791,AU 2697889792,2697891839,US 2697891840,2697892863,AU -2697892864,2697894143,US -2697894144,2697920511,AU +2697892864,2697894399,US +2697894400,2697920511,AU 2697920512,2698117119,US 2698117120,2698182655,IS 2698182656,2698248191,DE @@ -44759,6 +47965,7 @@ 2698838016,2698903551,BE 2698903552,2698969087,AU 2698969088,2699034623,CA +2699034624,2699165695,AO 2699231232,2699296767,US 2699296768,2699362303,FR 2699362304,2699624447,US @@ -44826,9 +48033,7 @@ 2704343040,2704408575,US 2704408576,2704474111,AU 2704474112,2704476927,US -2704476928,2704476929,GB -2704476930,2704476930,US -2704476931,2704477183,GB +2704476928,2704477183,GB 2704477184,2704485119,US 2704485120,2704485375,AU 2704485376,2704539647,US @@ -44847,9 +48052,7 @@ 2705522688,2705588223,ES 2705588224,2705596159,US 2705596160,2705596415,CA -2705596416,2705621247,US -2705621248,2705621503,CH -2705621504,2705691647,US +2705596416,2705691647,US 2705691648,2705692671,GB 2705692672,2705710079,US 2705710080,2705711103,IN @@ -44911,7 +48114,8 @@ 2713583616,2713649151,AR 2713649152,2713946367,US 2713946368,2713946623,CA -2713946624,2713976831,US +2713946624,2713946879,GB +2713946880,2713976831,US 2713976832,2714042367,VE 2714042368,2714238975,US 2714238976,2714304511,TH @@ -45003,7 +48207,9 @@ 2731674624,2731679743,US 2731679744,2731680767,CA 2731680768,2731681791,US -2731681792,2731682815,PR +2731681792,2731682047,PR +2731682048,2731682303,VI +2731682304,2731682815,PR 2731682816,2731685887,US 2731685888,2731686911,CA 2731686912,2731688959,US @@ -45087,9 +48293,7 @@ 2732220416,2732227583,US 2732227584,2732228607,CA 2732228608,2732261375,US -2732261376,2732262399,CA -2732262400,2732263423,US -2732263424,2732265471,CA +2732261376,2732265471,CA 2732265472,2732273663,US 2732273664,2732275711,CA 2732275712,2732278783,US @@ -45112,7 +48316,8 @@ 2732351488,2732353535,PR 2732353536,2732361727,US 2732361728,2732363775,BB -2732363776,2732375039,US +2732363776,2732371967,US +2732372992,2732375039,US 2732375040,2732376063,CA 2732376064,2732379135,US 2732379136,2732380159,CA @@ -45352,12 +48557,15 @@ 2737769472,2737770495,IN 2737770496,2737771263,AU 2737771264,2737771519,JP -2737771520,2737772031,AU -2737772544,2737774591,JP +2737771520,2737771775,AU +2737771776,2737772031,NZ +2737772288,2737774591,JP 2737774592,2737776639,BD 2737776640,2737777663,AU 2737777664,2737778175,HK -2737778432,2737785855,AU +2737778432,2737781759,AU +2737781760,2737782783,US +2737782784,2737785855,AU 2737785856,2737788927,BD 2737788928,2737789951,MY 2737789952,2737793023,AU @@ -45471,7 +48679,9 @@ 2746482688,2746548223,KR 2746548224,2746824703,US 2746824704,2746824959,CA -2746824960,2747072511,US +2746824960,2746839295,US +2746839296,2746839551,CA +2746839552,2747072511,US 2747072512,2747138047,AU 2747138048,2747465727,US 2747465728,2748055551,ZA @@ -45495,7 +48705,9 @@ 2750873600,2750939135,CL 2750939136,2751070207,US 2751070208,2751135743,CL -2751135744,2751397887,US +2751135744,2751176703,US +2751176704,2751176959,GU +2751176960,2751397887,US 2751397888,2751463423,KR 2751463424,2751528959,KZ 2751528960,2751660031,FR @@ -45637,9 +48849,7 @@ 2765568000,2765570047,IR 2765570048,2765578239,RU 2765578240,2765580287,AZ -2765580288,2765581567,GB -2765581568,2765581823,ZA -2765581824,2765582335,GB +2765580288,2765582335,GB 2765582336,2765586431,CZ 2765586432,2765619199,IR 2765619200,2768240639,US @@ -45661,7 +48871,9 @@ 2770337792,2770993151,US 2770993152,2771124223,IN 2771124224,2771451903,US +2771517440,2771648511,TN 2771648512,2771910655,ZA +2771910656,2772434943,ZM 2772434944,2772631551,US 2772697088,2772762623,US 2772762624,2772828159,AU @@ -45717,8 +48929,8 @@ 2780561408,2780758015,US 2780758016,2780823551,AU 2780823552,2780925951,US -2780925952,2780926207,GB -2780926208,2780926975,US +2780925952,2780926463,GB +2780926464,2780926975,US 2780926976,2780927487,GB 2780927488,2780927743,US 2780927744,2780927999,GB @@ -45768,11 +48980,12 @@ 2784165888,2784296959,KR 2784296960,2784362495,US 2784362496,2784428031,KR -2784428032,2784952319,US -2785017856,2785300735,US -2785300736,2785300991,PR -2785300992,2785542143,US -2785542144,2786066431,CH +2784428032,2784952063,US +2784952064,2784952319,NL +2785017856,2785542143,US +2785542144,2785673215,CH +2785673216,2785738751,NL +2785738752,2786066431,CH 2786066432,2788163583,US 2788163584,2788229119,CA 2788229120,2788261887,US @@ -45832,13 +49045,13 @@ 2803826688,2803892223,US 2803892224,2805465087,CA 2805465088,2805989375,UY -2805989376,2806012927,US -2806012928,2806013183,HK -2806013184,2806644735,US +2805989376,2806644735,US 2806644736,2806710271,CA 2806710272,2807103487,US 2807103488,2807169023,NL -2807169024,2807566335,US +2807169024,2807271679,US +2807271680,2807271935,AU +2807271936,2807566335,US 2807566336,2807574527,CA 2807574528,2807587071,US 2807587072,2807587327,IT @@ -45867,7 +49080,11 @@ 2808872960,2808938495,UY 2808938496,2809069567,US 2809069568,2809135103,SA -2809135104,2809397247,US +2809135104,2809266175,US +2809266176,2809286975,CA +2809286976,2809286991,US +2809286992,2809331711,CA +2809331712,2809397247,US 2809397248,2809462783,UY 2809462784,2809855999,US 2809856000,2809921535,AU @@ -45943,9 +49160,11 @@ 2816264704,2816270335,US 2816270336,2816271615,SG 2816271616,2816271871,JP -2816271872,2816272383,IN +2816271872,2816272127,IN +2816272128,2816272383,AU 2816272384,2816273407,JP -2816273408,2816275455,IN +2816273408,2816274431,IN +2816274432,2816275455,AU 2816275456,2816278527,SG 2816278528,2816671743,US 2816671744,2816737279,CA @@ -45955,8 +49174,7 @@ 2817277952,2817294335,NL 2817294336,2817933055,US 2817933056,2817933311,CA -2817933312,2817933567,PR -2817933568,2818002943,US +2817933312,2818002943,US 2818002944,2818003722,GB 2818003723,2818003723,US 2818003724,2818004991,GB @@ -45964,7 +49182,9 @@ 2818244608,2818310143,US 2818310144,2818375679,AR 2818375680,2818572287,US -2818637824,2818703359,NL +2818637824,2818654207,NL +2818654208,2818670591,AU +2818670592,2818703359,NL 2818703360,2822731894,US 2822731895,2822731895,GB 2822731896,2823159807,US @@ -46050,7 +49270,9 @@ 2829844480,2829910015,ZA 2829910016,2830066431,US 2830066432,2830066687,HK -2830066688,2830106623,US +2830066688,2830085887,US +2830085888,2830086143,GB +2830086144,2830106623,US 2830106624,2830172159,CO 2830172160,2830434303,US 2830499840,2830761983,US @@ -46079,7 +49301,7 @@ 2833907712,2833973247,GT 2833973248,2834010111,US 2834010112,2834014207,CA -2834018304,2834030591,US +2834014208,2834030591,US 2834030592,2834034687,CA 2834034688,2834497535,US 2834497536,2834563071,SV @@ -46090,11 +49312,21 @@ 2835218432,2835283967,US 2835283968,2835349503,MX 2835480576,2837446655,US -2837446656,2838822911,CH +2837446656,2837839871,CH +2837839872,2837905407,NL +2837905408,2838298623,CH +2838298624,2838495231,NL +2838495232,2838691839,CH +2838691840,2838757375,NL +2838757376,2838822911,CH 2838822912,2839019519,NL 2839019520,2839085055,CH -2839085056,2839150591,NL -2839150592,2839543807,CH +2839085056,2839101439,NL +2839101440,2839117823,MX +2839117824,2839150591,NL +2839150592,2839281663,CH +2839281664,2839412735,NL +2839412736,2839543807,CH 2839543808,2843803647,US 2843803648,2843869183,ZA 2843869184,2844524543,US @@ -46124,6 +49356,17 @@ 2849964032,2850029567,HK 2850029568,2851012607,US 2851078144,2851995647,US +2852061184,2852062207,ZA +2852063232,2852064255,KE +2852064256,2852065279,ZA +2852065280,2852066303,GH +2852067328,2852068351,SD +2852069376,2852070399,ZA +2852071424,2852072447,NG +2852072448,2852073471,ZA +2852073472,2852074495,TZ +2852074496,2852075519,MW +2852075520,2852076543,ZA 2852192256,2852716653,US 2852716654,2852716654,AU 2852716655,2853306367,US @@ -46139,11 +49382,7 @@ 2855484672,2855485439,AR 2855485440,2855501823,UY 2855501824,2855534591,AR -2855534592,2855811583,US -2855811584,2855811730,DE -2855811731,2855811731,US -2855811732,2855811839,DE -2855811840,2856058879,US +2855534592,2856058879,US 2856058880,2856124415,CH 2856124416,2856184831,US 2856184832,2856185855,GB @@ -46157,9 +49396,7 @@ 2857697280,2858352639,US 2858418176,2859007999,US 2859008000,2859073535,JP -2859073536,2861069055,US -2861069056,2861069311,GB -2861069312,2861850879,US +2859073536,2861850879,US 2861850880,2861851391,HK 2861851392,2861851647,US 2861851648,2861861375,HK @@ -46185,26 +49422,28 @@ 2864844800,2864845055,NL 2864845056,2864848895,US 2864848896,2864849151,GB -2864849152,2865417215,US -2865417216,2865417471,GB -2865417472,2865577983,US +2864849152,2865417457,US +2865417458,2865417458,GB +2865417459,2865577983,US 2865577984,2865610751,BE 2865610752,2865889279,US 2865889280,2865954815,AR -2865954816,2867265535,US +2865954816,2866953215,US +2866953216,2866953471,AU +2866953472,2867265535,US 2867331072,2867396607,US 2867462144,2867593215,US 2867593216,2867724287,CH 2867855360,2868117503,US -2868379648,2868605183,US -2868605184,2868605439,NO -2868605440,2868658175,US +2868379648,2868605376,US +2868605377,2868605377,NO +2868605378,2868658175,US 2868658176,2868658431,GB -2868658432,2868676607,US +2868658432,2868673023,US +2868673024,2868673279,FR +2868673280,2868676607,US 2868676608,2868676863,AU -2868676864,2868689407,US -2868689408,2868689663,AU -2868689664,2868772863,US +2868676864,2868772863,US 2868838400,2868903935,BE 2868903936,2869035007,SG 2869035008,2869166079,JP @@ -46213,7 +49452,9 @@ 2869952512,2870018047,FR 2870018048,2870083583,DE 2870083584,2870089727,FR -2870089728,2870091775,DE +2870089728,2870090495,DE +2870090496,2870090751,BE +2870090752,2870091775,DE 2870091776,2870149119,FR 2870149120,2870214655,HU 2870214656,2870280191,DK @@ -46363,19 +49604,15 @@ 2905446656,2905446911,DE 2905446912,2905473023,US 2905473024,2905481215,CA -2905481216,2913086719,US -2913086720,2913086812,CA -2913086813,2913086813,US -2913086814,2913086816,CA -2913086817,2913086817,US -2913086818,2913086819,CA -2913086820,2913086820,US -2913086821,2913086975,CA -2913086976,2913992703,US +2905481216,2913992703,US 2913992704,2914516991,CA -2914516992,2915092135,US -2915092136,2915092143,SA -2915092144,2915250175,US +2914516992,2915195647,US +2915195648,2915195903,CL +2915195904,2915196927,US +2915196928,2915197183,IE +2915197184,2915197439,US +2915197440,2915197695,FI +2915197696,2915250175,US 2915250176,2915254271,CA 2915254272,2915516415,US 2915516416,2915516671,NL @@ -46409,7 +49646,9 @@ 2916319232,2916335615,PR 2916335616,2916368383,US 2916368384,2916401151,CA -2916401152,2916515839,US +2916401152,2916410879,US +2916410880,2916411135,GB +2916411136,2916515839,US 2916515840,2916519935,CA 2916519936,2916581375,US 2916581376,2916614143,PR @@ -46432,7 +49671,8 @@ 2917267712,2917267967,AG 2917267968,2917268223,JM 2917268224,2917268479,BB -2917268480,2917269503,JM +2917268480,2917268735,TC +2917268736,2917269503,JM 2917269504,2917449727,US 2917449728,2917466111,PR 2917466112,2917572607,US @@ -46488,11 +49728,7 @@ 2918023168,2918043647,US 2918043648,2918047743,CA 2918047744,2918051839,US -2918051840,2918111999,CA -2918112000,2918112127,US -2918112128,2918112895,CA -2918112896,2918113023,US -2918113024,2918121471,CA +2918051840,2918121471,CA 2918121472,2918154239,US 2918154240,2918170623,CA 2918170624,2918187775,US @@ -46517,9 +49753,7 @@ 2918395904,2918404095,US 2918404096,2918406911,PR 2918406912,2918407167,US -2918407168,2918407295,PR -2918407296,2918407423,US -2918407424,2918408191,PR +2918407168,2918408191,PR 2918408192,2918432767,US 2918432768,2918436863,CA 2918436864,2918469631,US @@ -46530,17 +49764,13 @@ 2918473216,2918473727,CA 2918473728,2918477823,US 2918477824,2918481919,CA -2918481920,2918528255,US -2918528256,2918528511,NO -2918528512,2918528767,US -2918528768,2918528863,CA -2918528864,2918528883,US -2918528884,2918528885,CA -2918528886,2918530559,US -2918530560,2918530815,PH -2918530816,2918536719,US +2918481920,2918527743,US +2918527744,2918527999,NO +2918528000,2918536719,US 2918536720,2918536727,CA -2918536728,2918570239,US +2918536728,2918568191,US +2918568192,2918568319,AU +2918568320,2918570239,US 2918570240,2918570495,JP 2918570496,2918580223,US 2918580224,2918588415,CA @@ -46607,42 +49837,49 @@ 2919759872,2921512703,US 2921512704,2921512959,CA 2921512960,2921530367,US -2921530368,2921531391,DE -2921531392,2921541119,US +2921530368,2921530879,DE +2921530880,2921541119,US 2921541120,2921541375,DE 2921541376,2921542143,US 2921542144,2921542399,CA -2921542400,2921545727,US +2921542400,2921545215,US +2921545216,2921545727,DE 2921545728,2921545983,NL -2921545984,2921546495,US +2921545984,2921546239,US +2921546240,2921546495,FR 2921546496,2921546751,NL -2921546752,2921547519,US +2921546752,2921547007,US +2921547008,2921547263,FR +2921547264,2921547519,US 2921547520,2921547775,DE 2921547776,2921548031,GB -2921548032,2921548799,US -2921548800,2921549055,FR +2921548032,2921548831,US +2921548832,2921549055,FR 2921549056,2921550335,US 2921550336,2921550591,IT -2921550592,2921552895,US +2921550592,2921551615,US +2921551616,2921551871,BR +2921551872,2921552127,AR +2921552128,2921552383,US +2921552384,2921552639,MX +2921552640,2921552895,US 2921552896,2921553151,CL 2921553152,2921553407,BR 2921553408,2921553663,CO 2921553664,2921562111,US 2921562112,2921594879,CA -2921594880,2925002751,US +2921594880,2921681631,US +2921681632,2921681639,JP +2921681640,2925002751,US 2925002752,2925527039,CA 2925527040,2926575615,US -2926575616,2926777343,CA -2926777344,2926777855,US -2926777856,2926778111,CA -2926778112,2926778239,US -2926778240,2926779391,CA -2926779392,2926779519,US -2926779520,2927084799,CA -2927084800,2927085055,US -2927085056,2927085567,CA -2927085568,2927085823,US -2927085824,2927099903,CA +2926575616,2926777727,CA +2926777728,2926777983,US +2926777984,2927084543,CA +2927084544,2927085055,US +2927085056,2927085311,CA +2927085312,2927085567,US +2927085568,2927099903,CA 2927099904,2927242751,US 2927242752,2927243263,AE 2927243264,2927254783,US @@ -46687,16 +49924,15 @@ 2938634240,2938699775,IN 2938699776,2938700031,PH 2938700032,2938700287,ID -2938700288,2938700543,KR +2938700288,2938700543,AE 2938700544,2938701055,SG 2938701056,2938701311,IQ 2938701312,2938701567,AU -2938701568,2938701823,KR -2938701824,2938702079,IN +2938701568,2938702079,IN 2938702080,2938703103,HK 2938703104,2938703359,IL 2938703360,2938703615,ZA -2938703616,2938703871,KR +2938703616,2938703871,IN 2938703872,2938707967,HK 2938707968,2938710015,JP 2938710016,2938712063,AU @@ -46786,9 +50022,9 @@ 2947598336,2947602431,AU 2947602432,2947603455,NZ 2947603456,2947604479,TH -2947604480,2947609599,HK -2947609600,2947609855,GB -2947609856,2947612671,HK +2947604480,2947611135,HK +2947611136,2947611391,AU +2947611392,2947612671,HK 2947612672,2947678207,JP 2947678208,2947743743,CN 2947743744,2947809279,JP @@ -46815,9 +50051,7 @@ 2953466368,2953466879,GB 2953467392,2953467647,GB 2953467904,2953469951,BE -2953469952,2953474815,CH -2953474816,2953475071,DE -2953475072,2953478143,CH +2953469952,2953478143,CH 2953478144,2953503551,SE 2953503552,2953503559,NO 2953503560,2953510911,SE @@ -46827,9 +50061,7 @@ 2953596928,2953598975,ES 2953598976,2953601023,IT 2953601024,2953603071,RU -2953603072,2953603977,GB -2953603978,2953603979,IE -2953603980,2953605119,GB +2953603072,2953605119,GB 2953605120,2953609215,CZ 2953609216,2953707519,IL 2953707520,2953838591,RU @@ -46843,149 +50075,992 @@ 2954647552,2954657791,ES 2954657792,2954756095,JO 2954756096,2954821631,TR -2954821632,2954822927,FR +2954821632,2954821651,FR +2954821652,2954821655,IT +2954821656,2954821775,FR +2954821776,2954821783,IT +2954821784,2954822047,FR +2954822048,2954822063,ES +2954822064,2954822159,FR +2954822160,2954822167,GB +2954822168,2954822175,NL +2954822176,2954822255,FR +2954822256,2954822263,PL +2954822264,2954822311,FR +2954822312,2954822319,GB +2954822320,2954822335,FR +2954822336,2954822339,PL +2954822340,2954822347,FR +2954822348,2954822351,BE +2954822352,2954822527,FR +2954822528,2954822531,ES +2954822532,2954822559,FR +2954822560,2954822575,NL +2954822576,2954822591,FR +2954822592,2954822599,GB +2954822600,2954822655,FR +2954822656,2954822687,GB +2954822688,2954822783,FR +2954822784,2954822791,GB +2954822792,2954822927,FR 2954822928,2954822931,DE -2954822932,2954823395,FR +2954822932,2954823071,FR +2954823072,2954823103,BE +2954823104,2954823263,FR +2954823264,2954823295,CZ +2954823296,2954823383,FR +2954823384,2954823387,DE +2954823388,2954823395,FR 2954823396,2954823399,GB -2954823400,2954824255,FR +2954823400,2954823403,NL +2954823404,2954823551,FR +2954823552,2954823555,BE +2954823556,2954823559,CZ +2954823560,2954823567,FR +2954823568,2954823583,GB +2954823584,2954823703,FR +2954823704,2954823707,NL +2954823708,2954823767,FR +2954823768,2954823771,GB +2954823772,2954823779,FR +2954823780,2954823791,GB +2954823792,2954823891,FR +2954823892,2954823895,CH +2954823896,2954823903,FR +2954823904,2954823911,DE +2954823912,2954823927,FR +2954823928,2954823935,CH +2954823936,2954823999,FR +2954824000,2954824015,ES +2954824016,2954824031,FR +2954824032,2954824047,IT +2954824048,2954824255,FR 2954824256,2954824259,ES -2954824260,2954825063,FR +2954824260,2954824271,FR +2954824272,2954824275,ES +2954824276,2954824279,FR +2954824280,2954824283,PT +2954824284,2954824431,FR +2954824432,2954824447,PL +2954824448,2954824711,FR +2954824712,2954824719,ES +2954824720,2954824735,FI +2954824736,2954824767,DE +2954824768,2954824775,FR +2954824776,2954824783,IT +2954824784,2954824911,FR +2954824912,2954824919,CH +2954824920,2954824943,FR +2954824944,2954824959,BE +2954824960,2954824975,FR +2954824976,2954824991,ES +2954824992,2954825023,FR +2954825024,2954825039,NL +2954825040,2954825063,FR 2954825064,2954825067,ES -2954825068,2954825315,FR +2954825068,2954825159,FR +2954825160,2954825167,GB +2954825168,2954825183,FR +2954825184,2954825191,GB +2954825192,2954825271,FR +2954825272,2954825275,ES +2954825276,2954825315,FR 2954825316,2954825319,ES -2954825320,2954825403,FR +2954825320,2954825327,FR +2954825328,2954825335,DE +2954825336,2954825343,FR +2954825344,2954825351,DE +2954825352,2954825375,FR +2954825376,2954825383,DE +2954825384,2954825403,FR 2954825404,2954825407,ES 2954825408,2954825535,FR 2954825536,2954825539,ES -2954825540,2954826031,FR +2954825540,2954825551,FR +2954825552,2954825567,ES +2954825568,2954825759,FR +2954825760,2954825791,LT +2954825792,2954825927,FR +2954825928,2954825931,CZ +2954825932,2954826031,FR 2954826032,2954826035,ES -2954826036,2954826159,FR +2954826036,2954826039,FR +2954826040,2954826043,DE +2954826044,2954826063,FR +2954826064,2954826071,DE +2954826072,2954826159,FR 2954826160,2954826163,ES -2954826164,2954826755,FR +2954826164,2954826167,FR +2954826168,2954826175,DE +2954826176,2954826279,FR +2954826280,2954826287,ES +2954826288,2954826343,FR +2954826344,2954826351,NL +2954826352,2954826379,FR +2954826380,2954826383,ES +2954826384,2954826403,FR +2954826404,2954826407,IT +2954826408,2954826415,FR +2954826416,2954826423,NL +2954826424,2954826447,FR +2954826448,2954826451,GB +2954826452,2954826471,FR +2954826472,2954826475,GB +2954826476,2954826755,FR 2954826756,2954826759,IT 2954826760,2954826763,ES 2954826764,2954826775,FR 2954826776,2954826779,ES -2954826780,2954827799,FR +2954826780,2954826799,FR +2954826800,2954826807,ES +2954826808,2954827007,FR +2954827008,2954827135,ES +2954827136,2954827167,FR +2954827168,2954827199,GB +2954827200,2954827231,FR +2954827232,2954827263,BE +2954827264,2954827295,ES +2954827296,2954827391,FR +2954827392,2954827423,DE +2954827424,2954827647,FR +2954827648,2954827775,GB +2954827776,2954827779,FR +2954827780,2954827783,GB +2954827784,2954827799,FR 2954827800,2954827807,DE -2954827808,2954829395,FR +2954827808,2954827811,IT +2954827812,2954827823,FR +2954827824,2954827831,IE +2954827832,2954827839,PT +2954827840,2954827855,FR +2954827856,2954827871,ES +2954827872,2954827999,FR +2954828000,2954828031,NL +2954828032,2954828159,FR +2954828160,2954828191,IT +2954828192,2954828447,FR +2954828448,2954828463,GB +2954828464,2954828471,IT +2954828472,2954828799,FR +2954828800,2954828815,GB +2954828816,2954828823,FR +2954828824,2954828831,PT +2954828832,2954828839,DE +2954828840,2954828959,FR +2954828960,2954828975,PL +2954828976,2954829135,FR +2954829136,2954829139,DE +2954829140,2954829179,FR +2954829180,2954829183,NL +2954829184,2954829215,GB +2954829216,2954829375,FR +2954829376,2954829391,ES +2954829392,2954829395,FR 2954829396,2954829399,IT -2954829400,2954829751,FR +2954829400,2954829427,FR +2954829428,2954829431,NL +2954829432,2954829435,GB +2954829436,2954829459,FR +2954829460,2954829463,PL +2954829464,2954829727,FR +2954829728,2954829735,DE +2954829736,2954829751,FR 2954829752,2954829752,ES 2954829753,2954829759,FR 2954829760,2954829823,ES 2954829824,2954829843,FR 2954829844,2954829847,DE -2954829848,2954830395,FR +2954829848,2954829855,FR +2954829856,2954829871,PL +2954829872,2954829875,FR +2954829876,2954829879,DE +2954829880,2954829887,FR +2954829888,2954829903,BE +2954829904,2954829983,FR +2954829984,2954830015,GB +2954830016,2954830111,FR +2954830112,2954830127,IE +2954830128,2954830183,FR +2954830184,2954830191,IT +2954830192,2954830207,FR +2954830208,2954830271,PL +2954830272,2954830287,FR +2954830288,2954830303,NL +2954830304,2954830375,FR +2954830376,2954830383,DE +2954830384,2954830391,FR +2954830392,2954830395,BE 2954830396,2954830399,ES -2954830400,2954831247,FR +2954830400,2954830447,FR +2954830448,2954830455,PL +2954830456,2954830735,FR +2954830736,2954830751,NL +2954830752,2954830847,FR +2954830848,2954830855,IT +2954830856,2954830895,FR +2954830896,2954830911,GB +2954830912,2954830927,FR +2954830928,2954830931,CZ +2954830932,2954830975,FR +2954830976,2954830983,IT +2954830984,2954830991,FR +2954830992,2954830995,IT +2954830996,2954831247,FR 2954831248,2954831251,ES -2954831252,2954832343,FR +2954831252,2954831255,FR +2954831256,2954831263,DE +2954831264,2954831327,FR +2954831328,2954831331,LT +2954831332,2954831503,FR +2954831504,2954831511,NL +2954831512,2954831519,FR +2954831520,2954831535,BE +2954831536,2954831543,FR +2954831544,2954831551,ES +2954831552,2954831611,FR +2954831612,2954831615,ES +2954831616,2954831667,FR +2954831668,2954831671,CZ +2954831672,2954831807,FR +2954831808,2954831823,ES +2954831824,2954831919,FR +2954831920,2954831935,PL +2954831936,2954832007,FR +2954832008,2954832015,PL +2954832016,2954832159,FR +2954832160,2954832167,PT +2954832168,2954832215,FR +2954832216,2954832219,IE +2954832220,2954832223,GB +2954832224,2954832255,FR +2954832256,2954832287,GB +2954832288,2954832319,PT +2954832320,2954832343,FR 2954832344,2954832347,CH -2954832348,2954832891,FR +2954832348,2954832671,FR +2954832672,2954832679,ES +2954832680,2954832799,FR +2954832800,2954832815,CZ +2954832816,2954832823,PT +2954832824,2954832887,FR +2954832888,2954832891,IT 2954832892,2954832895,ES -2954832896,2954833419,FR +2954832896,2954832927,GB +2954832928,2954832959,DE +2954832960,2954833039,FR +2954833040,2954833047,CZ +2954833048,2954833055,ES +2954833056,2954833079,FR +2954833080,2954833087,IT +2954833088,2954833255,FR +2954833256,2954833263,LT +2954833264,2954833315,FR +2954833316,2954833319,FI +2954833320,2954833419,FR 2954833420,2954833423,PL -2954833424,2954833555,FR +2954833424,2954833551,FR +2954833552,2954833555,ES 2954833556,2954833559,NL 2954833560,2954833567,FR 2954833568,2954833571,ES -2954833572,2954833655,FR +2954833572,2954833575,FR +2954833576,2954833583,NL +2954833584,2954833615,FR +2954833616,2954833631,DE +2954833632,2954833635,IT +2954833636,2954833655,FR 2954833656,2954833659,IT -2954833660,2954834519,FR +2954833660,2954833679,FR +2954833680,2954833695,ES +2954833696,2954833723,FR +2954833724,2954833727,LT +2954833728,2954833855,FR +2954833856,2954833887,ES +2954833888,2954833919,FR +2954833920,2954833927,GB +2954833928,2954834007,FR +2954834008,2954834011,GB +2954834012,2954834063,FR +2954834064,2954834079,ES +2954834080,2954834095,CH +2954834096,2954834151,FR +2954834152,2954834159,DE +2954834160,2954834223,FR +2954834224,2954834227,CH +2954834228,2954834255,FR +2954834256,2954834271,CH +2954834272,2954834287,FR +2954834288,2954834303,DE +2954834304,2954834335,NL +2954834336,2954834431,FR +2954834432,2954834439,PL +2954834440,2954834447,FR +2954834448,2954834455,ES +2954834456,2954834495,FR +2954834496,2954834503,PT +2954834504,2954834519,FR 2954834520,2954834523,ES -2954834524,2954834671,FR +2954834524,2954834559,FR +2954834560,2954834563,GB +2954834564,2954834623,FR +2954834624,2954834627,DE +2954834628,2954834663,FR +2954834664,2954834671,IE 2954834672,2954834675,ES -2954834676,2954835295,FR +2954834676,2954834847,FR +2954834848,2954834863,ES +2954834864,2954834871,FR +2954834872,2954834879,PT +2954834880,2954834911,ES +2954834912,2954835295,FR 2954835296,2954835299,ES -2954835300,2954835443,FR +2954835300,2954835307,DE +2954835308,2954835407,FR +2954835408,2954835411,NL +2954835412,2954835443,FR 2954835444,2954835447,ES 2954835448,2954835451,FR 2954835452,2954835455,ES -2954835456,2954837071,FR +2954835456,2954835479,FR +2954835480,2954835487,PL +2954835488,2954835583,FR +2954835584,2954835599,PT +2954835600,2954835607,FR +2954835608,2954835611,PL +2954835612,2954835615,FR +2954835616,2954835619,DE +2954835620,2954836031,FR +2954836032,2954836063,DE +2954836064,2954836239,FR +2954836240,2954836255,IE +2954836256,2954836351,FR +2954836352,2954836355,IE +2954836356,2954836359,FR +2954836360,2954836367,ES +2954836368,2954836399,FR +2954836400,2954836407,BE +2954836408,2954836415,IT +2954836416,2954836771,FR +2954836772,2954836775,GB +2954836776,2954836895,FR +2954836896,2954836903,IE +2954836904,2954837071,FR 2954837072,2954837075,ES -2954837076,2954837615,FR +2954837076,2954837119,FR +2954837120,2954837123,IE +2954837124,2954837127,ES +2954837128,2954837135,FR +2954837136,2954837143,DE +2954837144,2954837407,FR +2954837408,2954837423,BE +2954837424,2954837431,FR +2954837432,2954837439,PL +2954837440,2954837479,FR +2954837480,2954837483,ES +2954837484,2954837495,FR +2954837496,2954837499,DE +2954837500,2954837535,FR +2954837536,2954837543,PT +2954837544,2954837551,IT +2954837552,2954837559,DE +2954837560,2954837567,FR +2954837568,2954837575,CZ +2954837576,2954837583,FR +2954837584,2954837591,IE +2954837592,2954837615,FR 2954837616,2954837619,IT -2954837620,2954837667,FR +2954837620,2954837663,FR +2954837664,2954837667,IT 2954837668,2954837671,ES -2954837672,2954837827,FR +2954837672,2954837691,FR +2954837692,2954837695,ES +2954837696,2954837827,FR 2954837828,2954837831,DE 2954837832,2954837867,FR 2954837868,2954837871,ES -2954837872,2954838599,FR +2954837872,2954837919,FR +2954837920,2954837935,GB +2954837936,2954838115,FR +2954838116,2954838119,DE +2954838120,2954838127,FR +2954838128,2954838131,FI +2954838132,2954838135,FR +2954838136,2954838143,GB +2954838144,2954838151,PL +2954838152,2954838199,FR +2954838200,2954838203,CH +2954838204,2954838239,FR +2954838240,2954838255,IT +2954838256,2954838263,IE +2954838264,2954838379,FR +2954838380,2954838383,IT +2954838384,2954838415,FR +2954838416,2954838423,ES +2954838424,2954838511,FR +2954838512,2954838519,NL +2954838520,2954838539,FR +2954838540,2954838543,PT +2954838544,2954838559,FR +2954838560,2954838575,IT +2954838576,2954838599,FR 2954838600,2954838607,GB 2954838608,2954838615,NL -2954838616,2954839239,FR +2954838616,2954838863,FR +2954838864,2954838871,GB +2954838872,2954838879,FR +2954838880,2954838895,ES +2954838896,2954838935,FR +2954838936,2954838939,PL +2954838940,2954838943,CH +2954838944,2954838959,IT +2954838960,2954838975,DE +2954838976,2954838999,FR +2954839000,2954839007,DE +2954839008,2954839063,FR +2954839064,2954839067,IT +2954839068,2954839211,FR +2954839212,2954839215,ES +2954839216,2954839239,FR 2954839240,2954839243,IT 2954839244,2954839267,FR 2954839268,2954839271,ES -2954839272,2954839471,FR +2954839272,2954839343,FR +2954839344,2954839351,FI +2954839352,2954839403,FR +2954839404,2954839407,IT +2954839408,2954839423,ES +2954839424,2954839471,FR 2954839472,2954839479,BE -2954839480,2954840255,FR +2954839480,2954839487,ES +2954839488,2954839523,FR +2954839524,2954839527,BE +2954839528,2954839551,FR +2954839552,2954839583,PL +2954839584,2954839647,FR +2954839648,2954839679,GB +2954839680,2954840175,FR +2954840176,2954840179,GB +2954840180,2954840183,FR +2954840184,2954840191,PT +2954840192,2954840255,FR 2954840256,2954840447,GB 2954840448,2954840515,FR 2954840516,2954840519,NL -2954840520,2954840927,FR +2954840520,2954840575,FR +2954840576,2954840591,DE +2954840592,2954840619,FR +2954840620,2954840623,ES +2954840624,2954840639,IT +2954840640,2954840903,FR +2954840904,2954840911,GB +2954840912,2954840927,FR 2954840928,2954840931,DE -2954840932,2954841567,FR +2954840932,2954841111,FR +2954841112,2954841119,BE +2954841120,2954841183,FR +2954841184,2954841199,NL +2954841200,2954841207,PL +2954841208,2954841275,FR +2954841276,2954841279,DE +2954841280,2954841299,FR +2954841300,2954841303,BE +2954841304,2954841567,FR 2954841568,2954841583,ES -2954841584,2954841707,FR +2954841584,2954841595,FR +2954841596,2954841599,ES +2954841600,2954841639,FR +2954841640,2954841643,GB +2954841644,2954841667,FR +2954841668,2954841671,DE +2954841672,2954841707,FR 2954841708,2954841711,NL -2954841712,2954841807,FR +2954841712,2954841715,FR +2954841716,2954841719,IT +2954841720,2954841727,FR +2954841728,2954841759,CH +2954841760,2954841807,FR 2954841808,2954841815,NL -2954841816,2954843503,FR +2954841816,2954841855,FR +2954841856,2954841871,IT +2954841872,2954841903,FR +2954841904,2954841907,BE +2954841908,2954841983,FR +2954841984,2954841999,ES +2954842000,2954842043,FR +2954842044,2954842047,CH +2954842048,2954842111,FR +2954842112,2954842143,PL +2954842144,2954842207,FR +2954842208,2954842239,DE +2954842240,2954842403,FR +2954842404,2954842407,BE +2954842408,2954842415,FR +2954842416,2954842419,CH +2954842420,2954842431,FR +2954842432,2954842439,GB +2954842440,2954842463,FR +2954842464,2954842467,NL +2954842468,2954842559,FR +2954842560,2954842575,CZ +2954842576,2954842703,FR +2954842704,2954842719,GB +2954842720,2954842727,FR +2954842728,2954842731,DE +2954842732,2954842863,FR +2954842864,2954842879,ES +2954842880,2954842911,CZ +2954842912,2954843055,FR +2954843056,2954843071,PL +2954843072,2954843103,FR +2954843104,2954843135,IE +2954843136,2954843183,FR +2954843184,2954843187,ES +2954843188,2954843319,FR +2954843320,2954843323,GB +2954843324,2954843407,FR +2954843408,2954843415,PL +2954843416,2954843419,BE +2954843420,2954843423,PL +2954843424,2954843503,FR 2954843504,2954843507,ES -2954843508,2954843767,FR +2954843508,2954843591,FR +2954843592,2954843595,BE +2954843596,2954843599,ES +2954843600,2954843603,BE +2954843604,2954843723,FR +2954843724,2954843727,DE +2954843728,2954843767,FR 2954843768,2954843771,ES -2954843772,2954844147,FR +2954843772,2954843871,FR +2954843872,2954843887,DE +2954843888,2954843895,FR +2954843896,2954843899,DE +2954843900,2954844031,FR +2954844032,2954844039,NL +2954844040,2954844047,IE +2954844048,2954844147,FR 2954844148,2954844151,DE -2954844152,2954844999,FR +2954844152,2954844155,ES +2954844156,2954844183,FR +2954844184,2954844187,DE +2954844188,2954844191,FR +2954844192,2954844223,IE +2954844224,2954844239,FR +2954844240,2954844255,IT +2954844256,2954844447,FR +2954844448,2954844455,PT +2954844456,2954844551,FR +2954844552,2954844559,PL +2954844560,2954844607,FR +2954844608,2954844639,ES +2954844640,2954844731,FR +2954844732,2954844735,PL +2954844736,2954844991,FR +2954844992,2954844999,GB 2954845000,2954845003,ES -2954845004,2954846095,FR +2954845004,2954845023,FR +2954845024,2954845039,DE +2954845040,2954845083,FR +2954845084,2954845087,IE +2954845088,2954845091,FR +2954845092,2954845095,CZ +2954845096,2954845111,FR +2954845112,2954845119,DE +2954845120,2954845135,GB +2954845136,2954845159,FR +2954845160,2954845167,CZ +2954845168,2954845391,FR +2954845392,2954845407,PL +2954845408,2954845695,FR +2954845696,2954845759,BE +2954845760,2954845791,DE +2954845792,2954845999,FR +2954846000,2954846015,PT +2954846016,2954846047,FR +2954846048,2954846055,NL +2954846056,2954846063,FR +2954846064,2954846079,ES +2954846080,2954846095,FR 2954846096,2954846103,NL 2954846104,2954846107,FR 2954846108,2954846111,ES -2954846112,2954846139,FR +2954846112,2954846123,FR +2954846124,2954846127,IT +2954846128,2954846139,FR 2954846140,2954846143,ES -2954846144,2954855075,FR +2954846144,2954846175,FR +2954846176,2954846191,NL +2954846192,2954854471,FR +2954854472,2954854475,CH +2954854476,2954854495,FR +2954854496,2954854511,IT +2954854512,2954854671,FR +2954854672,2954854687,ES +2954854688,2954854815,FR +2954854816,2954854847,PL +2954854848,2954854871,FR +2954854872,2954854875,IT +2954854876,2954854975,FR +2954854976,2954854991,PL +2954854992,2954855007,IT +2954855008,2954855023,FR +2954855024,2954855039,DE +2954855040,2954855075,FR 2954855076,2954855079,ES -2954855080,2954855507,FR +2954855080,2954855087,FR +2954855088,2954855091,PL +2954855092,2954855507,FR 2954855508,2954855511,DE 2954855512,2954855515,FR 2954855516,2954855519,ES 2954855520,2954855527,FR 2954855528,2954855531,ES -2954855532,2954856179,FR +2954855532,2954855615,FR +2954855616,2954855619,DE +2954855620,2954855639,FR +2954855640,2954855643,DE +2954855644,2954855647,ES +2954855648,2954855651,CZ +2954855652,2954855727,FR +2954855728,2954855743,DE +2954855744,2954856063,FR +2954856064,2954856067,LT +2954856068,2954856071,FR +2954856072,2954856079,GB +2954856080,2954856111,FR +2954856112,2954856115,ES +2954856116,2954856175,FR +2954856176,2954856179,DE 2954856180,2954856183,ES -2954856184,2954859323,FR +2954856184,2954856543,FR +2954856544,2954856547,CH +2954856548,2954856551,CZ +2954856552,2954856563,FR +2954856564,2954856567,DE +2954856568,2954856571,CH +2954856572,2954856611,FR +2954856612,2954856615,IT +2954856616,2954856619,FR +2954856620,2954856623,ES +2954856624,2954856975,FR +2954856976,2954856979,GB +2954856980,2954856983,LT +2954856984,2954856999,FR +2954857000,2954857003,DE +2954857004,2954857087,FR +2954857088,2954857091,IT +2954857092,2954857095,FR +2954857096,2954857099,LT +2954857100,2954857115,FR +2954857116,2954857119,NL +2954857120,2954857183,FR +2954857184,2954857215,PL +2954857216,2954857703,FR +2954857704,2954857707,ES +2954857708,2954857999,FR +2954858000,2954858015,IE +2954858016,2954858059,FR +2954858060,2954858063,BE +2954858064,2954858367,FR +2954858368,2954858375,NL +2954858376,2954858379,ES +2954858380,2954858383,IE +2954858384,2954858419,FR +2954858420,2954858423,GB +2954858424,2954858427,FR +2954858428,2954858431,BE +2954858432,2954858483,FR +2954858484,2954858487,GB +2954858488,2954858819,FR +2954858820,2954858823,IT +2954858824,2954858827,ES +2954858828,2954858831,FR +2954858832,2954858847,PL +2954858848,2954859043,FR +2954859044,2954859047,ES +2954859048,2954859119,FR +2954859120,2954859123,CZ +2954859124,2954859239,FR +2954859240,2954859243,PL +2954859244,2954859311,FR +2954859312,2954859315,ES +2954859316,2954859323,FR 2954859324,2954859327,ES -2954859328,2954861875,FR +2954859328,2954859583,FR +2954859584,2954859615,DE +2954859616,2954859679,FR +2954859680,2954859695,PT +2954859696,2954859711,FR +2954859712,2954859727,PL +2954859728,2954859743,FR +2954859744,2954859775,ES +2954859776,2954859831,FR +2954859832,2954859839,ES +2954859840,2954859871,FR +2954859872,2954859903,ES +2954859904,2954859955,FR +2954859956,2954859959,GB +2954859960,2954860223,FR +2954860224,2954860227,PL +2954860228,2954860231,FR +2954860232,2954860239,IT +2954860240,2954860255,FR +2954860256,2954860259,PL +2954860260,2954860263,FR +2954860264,2954860271,GB +2954860272,2954860303,FR +2954860304,2954860319,FI +2954860320,2954860327,FR +2954860328,2954860335,NL +2954860336,2954860367,FR +2954860368,2954860383,PL +2954860384,2954860415,FR +2954860416,2954860423,NL +2954860424,2954860427,FR +2954860428,2954860431,BE +2954860432,2954860447,FR +2954860448,2954860455,GB +2954860456,2954860535,FR +2954860536,2954860539,DE +2954860540,2954860671,FR +2954860672,2954860687,DE +2954860688,2954860695,GB +2954860696,2954860703,CZ +2954860704,2954860735,FR +2954860736,2954860751,PL +2954860752,2954860767,FR +2954860768,2954860783,ES +2954860784,2954860791,FR +2954860792,2954860799,IT +2954860800,2954860991,FR +2954860992,2954861007,DE +2954861008,2954861119,FR +2954861120,2954861135,GB +2954861136,2954861167,FR +2954861168,2954861183,BE +2954861184,2954861191,PL +2954861192,2954861423,FR +2954861424,2954861431,CZ +2954861432,2954861619,FR +2954861620,2954861623,IT +2954861624,2954861635,FR +2954861636,2954861639,ES +2954861640,2954861671,FR +2954861672,2954861675,ES +2954861676,2954861759,FR +2954861760,2954861763,ES +2954861764,2954861839,FR +2954861840,2954861847,IT +2954861848,2954861875,FR 2954861876,2954861879,CH -2954861880,2954862415,FR +2954861880,2954861919,FR +2954861920,2954861923,CZ +2954861924,2954861947,FR +2954861948,2954861951,FI +2954861952,2954861983,FR +2954861984,2954861987,IE +2954861988,2954861995,FR +2954861996,2954861999,ES +2954862000,2954862047,FR +2954862048,2954862079,ES +2954862080,2954862207,FR +2954862208,2954862211,ES +2954862212,2954862247,FR +2954862248,2954862255,ES +2954862256,2954862367,FR +2954862368,2954862375,DE +2954862376,2954862383,FR +2954862384,2954862391,DE +2954862392,2954862415,FR 2954862416,2954862419,ES -2954862420,2954863615,FR +2954862420,2954862423,FR +2954862424,2954862431,PL +2954862432,2954862471,FR +2954862472,2954862479,FI +2954862480,2954863615,FR 2954863616,2954864639,DE 2954864640,2954865663,IT 2954865664,2954866687,ES -2954866688,2954870799,FR +2954866688,2954867041,FR +2954867042,2954867043,PT +2954867044,2954870799,FR 2954870800,2954870803,ES 2954870804,2954870843,FR 2954870844,2954870847,ES -2954870848,2954870903,FR +2954870848,2954870871,FR +2954870872,2954870875,ES +2954870876,2954870903,FR 2954870904,2954870907,ES -2954870908,2954875879,FR +2954870908,2954871391,FR +2954871392,2954871423,DE +2954871424,2954871615,FR +2954871616,2954871623,PT +2954871624,2954871627,FR +2954871628,2954871631,IT +2954871632,2954871635,FR +2954871636,2954871639,IT +2954871640,2954871743,FR +2954871744,2954871759,CH +2954871760,2954871839,FR +2954871840,2954871871,NL +2954871872,2954871887,FR +2954871888,2954871895,BE +2954871896,2954872323,FR +2954872324,2954872327,IT +2954872328,2954872383,FR +2954872384,2954872415,IE +2954872416,2954872447,FR +2954872448,2954872479,CH +2954872480,2954872559,FR +2954872560,2954872567,NL +2954872568,2954872587,FR +2954872588,2954872591,LT +2954872592,2954872679,FR +2954872680,2954872687,ES +2954872688,2954872863,FR +2954872864,2954872895,ES +2954872896,2954872959,FR +2954872960,2954872975,IT +2954872976,2954872979,FR +2954872980,2954872983,GB +2954872984,2954872987,FR +2954872988,2954872991,FI +2954872992,2954873023,PL +2954873024,2954873087,BE +2954873088,2954873391,FR +2954873392,2954873407,NL +2954873408,2954873451,FR +2954873452,2954873455,GB +2954873456,2954873551,FR +2954873552,2954873567,PL +2954873568,2954873583,FR +2954873584,2954873591,DE +2954873592,2954873647,FR +2954873648,2954873663,IE +2954873664,2954873783,FR +2954873784,2954873787,PT +2954873788,2954873839,FR +2954873840,2954873847,ES +2954873848,2954873851,CZ +2954873852,2954873903,FR +2954873904,2954873911,IT +2954873912,2954874123,FR +2954874124,2954874127,LT +2954874128,2954874135,FR +2954874136,2954874143,FI +2954874144,2954874151,NL +2954874152,2954874319,FR +2954874320,2954874335,IT +2954874336,2954874355,FR +2954874356,2954874359,IT +2954874360,2954874379,FR +2954874380,2954874383,CZ +2954874384,2954874391,FR +2954874392,2954874399,DE +2954874400,2954874419,FR +2954874420,2954874423,NL +2954874424,2954874799,FR +2954874800,2954874815,GB +2954874816,2954874827,FR +2954874828,2954874831,ES +2954874832,2954874867,FR +2954874868,2954874871,IT +2954874872,2954874927,FR +2954874928,2954874943,IE +2954874944,2954875023,FR +2954875024,2954875039,PL +2954875040,2954875047,NL +2954875048,2954875055,FR +2954875056,2954875071,CZ +2954875072,2954875103,FR +2954875104,2954875135,NL +2954875136,2954875167,GB +2954875168,2954875183,FR +2954875184,2954875191,GB +2954875192,2954875203,FR +2954875204,2954875207,CH +2954875208,2954875231,FR +2954875232,2954875247,ES +2954875248,2954875279,FR +2954875280,2954875287,PL +2954875288,2954875295,GB +2954875296,2954875311,FR +2954875312,2954875327,IT +2954875328,2954875379,FR +2954875380,2954875383,DE +2954875384,2954875391,FR +2954875392,2954875455,GB +2954875456,2954875471,FR +2954875472,2954875479,FI +2954875480,2954875695,FR +2954875696,2954875711,PL +2954875712,2954875779,FR +2954875780,2954875783,ES +2954875784,2954875871,FR +2954875872,2954875879,BE 2954875880,2954875883,ES -2954875884,2954876871,FR +2954875884,2954875911,FR +2954875912,2954875919,PL +2954875920,2954876055,FR +2954876056,2954876063,IE +2954876064,2954876111,FR +2954876112,2954876119,ES +2954876120,2954876399,FR +2954876400,2954876407,IT +2954876408,2954876447,FR +2954876448,2954876455,CH +2954876456,2954876459,DE +2954876460,2954876591,FR +2954876592,2954876607,CH +2954876608,2954876639,PT +2954876640,2954876871,FR 2954876872,2954876875,ES 2954876876,2954876887,FR 2954876888,2954876891,ES -2954876892,2954877103,FR +2954876892,2954876903,FR +2954876904,2954876911,IT +2954876912,2954876927,FR +2954876928,2954876943,PL +2954876944,2954877103,FR 2954877104,2954877107,PL -2954877108,2954877163,FR +2954877108,2954877111,FR +2954877112,2954877119,NL +2954877120,2954877151,FR +2954877152,2954877159,PL +2954877160,2954877163,FR 2954877164,2954877167,ES -2954877168,2954877819,FR +2954877168,2954877279,FR +2954877280,2954877311,NL +2954877312,2954877535,FR +2954877536,2954877539,IT +2954877540,2954877599,FR +2954877600,2954877615,IT +2954877616,2954877819,FR 2954877820,2954877823,ES -2954877824,2954878907,FR +2954877824,2954877983,FR +2954877984,2954877991,DE +2954877992,2954878031,FR +2954878032,2954878035,IT +2954878036,2954878095,FR +2954878096,2954878111,ES +2954878112,2954878143,FR +2954878144,2954878207,ES +2954878208,2954878463,IE +2954878464,2954878495,FR +2954878496,2954878499,ES +2954878500,2954878511,FR +2954878512,2954878527,ES +2954878528,2954878591,FR +2954878592,2954878607,DE +2954878608,2954878707,FR +2954878708,2954878711,ES +2954878712,2954878815,FR +2954878816,2954878847,LT +2954878848,2954878863,FR +2954878864,2954878871,GB +2954878872,2954878887,FR +2954878888,2954878891,PL +2954878892,2954878907,FR 2954878908,2954878911,ES 2954878912,2954887167,FR 2954887168,2954891263,UA @@ -47143,7 +51218,8 @@ 2957193216,2957195263,RU 2957195264,2957197311,PS 2957197312,2957201407,IR -2957201408,2957202679,US +2957201408,2957201423,GB +2957201424,2957202679,US 2957202680,2957202680,PT 2957202681,2957203455,US 2957203456,2957205503,FR @@ -47406,7 +51482,8 @@ 2960152576,2960158719,RU 2960158720,2960160767,PL 2960160768,2960162815,UA -2960162816,2960171007,CZ +2960162816,2960168959,RU +2960168960,2960171007,CZ 2960171008,2960175103,RU 2960175104,2960179199,SK 2960179200,2960205823,RU @@ -47593,10 +51670,15 @@ 2961088512,2961088767,SE 2961088768,2961089535,UA 2961089536,2961090559,KG -2961090560,2961108991,RO +2961090560,2961102847,RO +2961102848,2961103871,DE +2961103872,2961108991,RO 2961108992,2961111039,GB -2961111040,2961113087,RO -2961113088,2961178623,CH +2961111040,2961112063,PL +2961112064,2961113087,RO +2961113088,2961166079,CH +2961166080,2961166335,DE +2961166336,2961178623,CH 2961178624,2965372927,FR 2965372928,2965766143,RU 2965766144,2965897215,DE @@ -47738,11 +51820,7 @@ 2987552768,2987556863,GB 2987556864,2987560959,NL 2987560960,2987565055,DE -2987565056,2987566591,AT -2987566592,2987566847,HU -2987566848,2987568383,AT -2987568384,2987568639,HU -2987568640,2987569151,AT +2987565056,2987569151,AT 2987569152,2987573247,FR 2987573248,2987577343,TR 2987577344,2987585535,RU @@ -47817,7 +51895,9 @@ 2987771904,2987773951,IT 2987773952,2987775999,FR 2987776000,2987778047,NL -2987778048,2987780095,CH +2987778048,2987779071,CH +2987779072,2987779583,LI +2987779584,2987780095,CH 2987780096,2987782143,GB 2987782144,2987784191,EE 2987784192,2987786239,DK @@ -47888,216 +51968,1850 @@ 2988179456,2988411647,SE 2988411648,2988411775,DE 2988411776,2988441599,SE -2988441600,2988442075,FR +2988441600,2988441603,ES +2988441604,2988441607,FR +2988441608,2988441615,DE +2988441616,2988441815,FR +2988441816,2988441819,LT +2988441820,2988441887,FR +2988441888,2988441895,NL +2988441896,2988441899,FR +2988441900,2988441903,IT +2988441904,2988441919,FR +2988441920,2988441923,ES +2988441924,2988441927,FR +2988441928,2988441931,DE +2988441932,2988441951,FR +2988441952,2988441967,IE +2988441968,2988441975,FR +2988441976,2988441979,GB +2988441980,2988441983,FR +2988441984,2988441991,DE +2988441992,2988442075,FR 2988442076,2988442079,ES -2988442080,2988442847,FR +2988442080,2988442087,PT +2988442088,2988442111,FR +2988442112,2988442143,CZ +2988442144,2988442175,CH +2988442176,2988442207,BE +2988442208,2988442239,GB +2988442240,2988442447,FR +2988442448,2988442463,PL +2988442464,2988442495,FR +2988442496,2988442503,BE +2988442504,2988442687,FR +2988442688,2988442703,IT +2988442704,2988442751,FR +2988442752,2988442783,PT +2988442784,2988442815,FR +2988442816,2988442831,PL +2988442832,2988442847,FR 2988442848,2988442863,IT -2988442864,2988444208,FR +2988442864,2988442871,FR +2988442872,2988442879,DE +2988442880,2988442911,FR +2988442912,2988442919,GB +2988442920,2988442923,FR +2988442924,2988442927,PT +2988442928,2988442943,FR +2988442944,2988442975,GB +2988442976,2988443071,FR +2988443072,2988443087,BE +2988443088,2988443447,FR +2988443448,2988443455,DE +2988443456,2988443647,FR +2988443648,2988443651,NL +2988443652,2988443927,FR +2988443928,2988443935,IT +2988443936,2988444203,FR +2988444204,2988444207,DE +2988444208,2988444208,PL 2988444209,2988444209,FI -2988444210,2988444671,FR +2988444210,2988444211,PL +2988444212,2988444287,FR +2988444288,2988444415,GB +2988444416,2988444543,PT +2988444544,2988444575,FR +2988444576,2988444607,FI +2988444608,2988444639,ES +2988444640,2988444671,FR 2988444672,2988444679,ES -2988444680,2988449207,FR -2988449208,2988449215,ES -2988449216,2988451839,FR +2988444680,2988444703,FR +2988444704,2988444719,GB +2988444720,2988444967,FR +2988444968,2988444975,IT +2988444976,2988445279,FR +2988445280,2988445287,IT +2988445288,2988445295,GB +2988445296,2988445375,FR +2988445376,2988445391,GB +2988445392,2988446275,FR +2988446276,2988446279,ES +2988446280,2988446431,FR +2988446432,2988446463,IT +2988446464,2988447327,FR +2988447328,2988447359,IT +2988447360,2988447423,FR +2988447424,2988447487,PT +2988447488,2988447507,FR +2988447508,2988447511,NL +2988447512,2988447519,FR +2988447520,2988447535,IT +2988447536,2988447551,FR +2988447552,2988447583,DE +2988447584,2988447599,NL +2988447600,2988447615,FR +2988447616,2988447743,PT +2988447744,2988447747,DE +2988447748,2988447959,FR +2988447960,2988447967,IT +2988447968,2988448031,FR +2988448032,2988448063,GB +2988448064,2988448127,FR +2988448128,2988448255,IT +2988448256,2988448271,FR +2988448272,2988448287,NL +2988448288,2988448567,FR +2988448568,2988448575,PL +2988448576,2988448639,FR +2988448640,2988448671,NL +2988448672,2988448687,CZ +2988448688,2988448695,FR +2988448696,2988448703,DE +2988448704,2988448767,PT +2988448768,2988448799,FR +2988448800,2988448815,ES +2988448816,2988448907,FR +2988448908,2988448911,IT +2988448912,2988449055,FR +2988449056,2988449071,ES +2988449072,2988449183,FR +2988449184,2988449191,PL +2988449192,2988449199,FI +2988449200,2988449215,ES +2988449216,2988449567,FR +2988449568,2988449575,GB +2988449576,2988451839,FR 2988451840,2988453887,BE -2988453888,2988457983,GB -2988457984,2988458319,FR +2988453888,2988454399,GB +2988454400,2988454655,FR +2988454656,2988457983,GB +2988457984,2988458047,FR +2988458048,2988458063,DE +2988458064,2988458299,FR +2988458300,2988458303,ES +2988458304,2988458319,FR 2988458320,2988458327,NL -2988458328,2988459119,FR +2988458328,2988458399,FR +2988458400,2988458431,NL +2988458432,2988458763,FR +2988458764,2988458767,DE +2988458768,2988459023,FR +2988459024,2988459039,ES +2988459040,2988459047,IT +2988459048,2988459055,FR +2988459056,2988459071,ES +2988459072,2988459107,FR +2988459108,2988459111,PL +2988459112,2988459119,FR 2988459120,2988459127,IT 2988459128,2988459135,PL -2988459136,2988459535,FR +2988459136,2988459183,FR +2988459184,2988459199,CZ +2988459200,2988459243,FR +2988459244,2988459247,ES +2988459248,2988459251,DE +2988459252,2988459439,FR +2988459440,2988459455,GB +2988459456,2988459535,FR 2988459536,2988459539,ES -2988459540,2988459679,FR +2988459540,2988459543,BE +2988459544,2988459603,FR +2988459604,2988459607,ES +2988459608,2988459631,FR +2988459632,2988459639,DE +2988459640,2988459643,IT +2988459644,2988459679,FR 2988459680,2988459683,ES 2988459684,2988459687,FR 2988459688,2988459691,PL -2988459692,2988459863,FR +2988459692,2988459695,ES +2988459696,2988459719,FR +2988459720,2988459723,IT +2988459724,2988459759,FR +2988459760,2988459767,DE +2988459768,2988459863,FR 2988459864,2988459867,ES -2988459868,2988460575,FR +2988459868,2988459903,FR +2988459904,2988459967,PL +2988459968,2988460031,FR +2988460032,2988460063,DE +2988460064,2988460115,FR +2988460116,2988460119,DE +2988460120,2988460123,IT +2988460124,2988460191,FR +2988460192,2988460207,BE +2988460208,2988460223,IT +2988460224,2988460311,FR +2988460312,2988460319,IT +2988460320,2988460371,FR +2988460372,2988460375,DE +2988460376,2988460383,FR +2988460384,2988460399,ES +2988460400,2988460547,FR +2988460548,2988460551,NL +2988460552,2988460559,FR +2988460560,2988460575,CZ 2988460576,2988460591,PT -2988460592,2988460651,FR +2988460592,2988460631,FR +2988460632,2988460635,DE +2988460636,2988460647,FR +2988460648,2988460651,GB 2988460652,2988460655,ES -2988460656,2988461703,FR +2988460656,2988460703,FR +2988460704,2988460711,PL +2988460712,2988460735,FR +2988460736,2988460751,GB +2988460752,2988460755,FR +2988460756,2988460759,BE +2988460760,2988460767,FR +2988460768,2988460799,GB +2988460800,2988460895,FR +2988460896,2988460927,PT +2988460928,2988460959,FR +2988460960,2988460975,NL +2988460976,2988461003,FR +2988461004,2988461007,ES +2988461008,2988461031,FR +2988461032,2988461035,GB +2988461036,2988461183,FR +2988461184,2988461215,IE +2988461216,2988461255,FR +2988461256,2988461259,ES +2988461260,2988461263,DE +2988461264,2988461279,FR +2988461280,2988461295,IT +2988461296,2988461299,PL +2988461300,2988461307,FR +2988461308,2988461311,NL +2988461312,2988461375,PL +2988461376,2988461391,FR +2988461392,2988461399,DE +2988461400,2988461407,PL +2988461408,2988461415,NL +2988461416,2988461523,FR +2988461524,2988461527,LT +2988461528,2988461595,FR +2988461596,2988461599,CH +2988461600,2988461631,FR +2988461632,2988461695,PL +2988461696,2988461703,FR 2988461704,2988461707,NL -2988461708,2988462603,FR +2988461708,2988461815,FR +2988461816,2988461819,GB +2988461820,2988461871,FR +2988461872,2988461879,PT +2988461880,2988461907,FR +2988461908,2988461911,ES +2988461912,2988462127,FR +2988462128,2988462131,CH +2988462132,2988462171,FR +2988462172,2988462175,IT +2988462176,2988462195,FR +2988462196,2988462199,IT +2988462200,2988462311,FR +2988462312,2988462319,DE +2988462320,2988462323,FR +2988462324,2988462327,IE +2988462328,2988462603,FR 2988462604,2988462607,ES -2988462608,2988463915,FR +2988462608,2988462623,FR +2988462624,2988462639,CH +2988462640,2988462747,FR +2988462748,2988462751,ES +2988462752,2988463131,FR +2988463132,2988463135,ES +2988463136,2988463143,IT +2988463144,2988463167,FR +2988463168,2988463199,PL +2988463200,2988463203,ES +2988463204,2988463207,FR +2988463208,2988463211,NL +2988463212,2988463247,FR +2988463248,2988463251,PL +2988463252,2988463263,FR +2988463264,2988463279,GB +2988463280,2988463319,FR +2988463320,2988463323,FI +2988463324,2988463615,FR +2988463616,2988463623,GB +2988463624,2988463627,FR +2988463628,2988463631,ES +2988463632,2988463791,FR +2988463792,2988463799,ES +2988463800,2988463915,FR 2988463916,2988463919,ES 2988463920,2988463999,FR 2988464000,2988464007,IE 2988464008,2988464015,LT -2988464016,2988464611,FR +2988464016,2988464059,FR +2988464060,2988464063,ES +2988464064,2988464359,FR +2988464360,2988464360,NL +2988464361,2988464543,FR +2988464544,2988464551,NL +2988464552,2988464591,FR +2988464592,2988464595,BE +2988464596,2988464611,FR 2988464612,2988464615,IT -2988464616,2988464623,FR +2988464616,2988464619,FR +2988464620,2988464623,LT 2988464624,2988464627,ES -2988464628,2988465215,FR +2988464628,2988464927,FR +2988464928,2988464943,DE +2988464944,2988464947,BE +2988464948,2988464951,FR +2988464952,2988464955,IE +2988464956,2988464959,FR +2988464960,2988464975,ES +2988464976,2988464991,FR +2988464992,2988465023,DE +2988465024,2988465151,FR +2988465152,2988465215,GB 2988465216,2988465219,ES -2988465220,2988465279,FR +2988465220,2988465231,FR +2988465232,2988465239,IT +2988465240,2988465279,FR 2988465280,2988465295,DE -2988465296,2988465559,FR +2988465296,2988465307,FR +2988465308,2988465311,DE +2988465312,2988465359,FR +2988465360,2988465363,GB +2988465364,2988465391,FR +2988465392,2988465399,CH +2988465400,2988465559,FR 2988465560,2988465563,ES -2988465564,2988476415,FR +2988465564,2988465567,FR +2988465568,2988465571,ES +2988465572,2988465587,FR +2988465588,2988465591,IT +2988465592,2988465615,FR +2988465616,2988465619,IT +2988465620,2988465623,DE +2988465624,2988465919,FR +2988465920,2988465983,ES +2988465984,2988476415,FR 2988476416,2988478463,IT -2988478464,2988478579,FR +2988478464,2988478487,FR +2988478488,2988478495,PL +2988478496,2988478499,ES +2988478500,2988478579,FR 2988478580,2988478583,DE 2988478584,2988478587,FR 2988478588,2988478591,DE -2988478592,2988479791,FR +2988478592,2988478683,FR +2988478684,2988478687,BE +2988478688,2988478863,FR +2988478864,2988478871,IE +2988478872,2988478879,FR +2988478880,2988478911,GB +2988478912,2988478947,FR +2988478948,2988478951,CZ +2988478952,2988479003,FR +2988479004,2988479007,ES +2988479008,2988479055,FR +2988479056,2988479071,ES +2988479072,2988479075,BE +2988479076,2988479103,FR +2988479104,2988479107,IE +2988479108,2988479119,FR +2988479120,2988479135,NL +2988479136,2988479143,FR +2988479144,2988479147,DE +2988479148,2988479159,FR +2988479160,2988479167,ES +2988479168,2988479199,FR +2988479200,2988479231,PL +2988479232,2988479323,FR +2988479324,2988479327,PL +2988479328,2988479343,FR +2988479344,2988479359,NL +2988479360,2988479519,FR +2988479520,2988479535,DE +2988479536,2988479567,FR +2988479568,2988479575,DE +2988479576,2988479711,FR +2988479712,2988479743,CH +2988479744,2988479783,FR +2988479784,2988479787,ES +2988479788,2988479791,FR 2988479792,2988479807,GB -2988479808,2988482111,FR +2988479808,2988480007,FR +2988480008,2988480011,CH +2988480012,2988480031,FR +2988480032,2988480047,DE +2988480048,2988480095,FR +2988480096,2988480111,IT +2988480112,2988480143,FR +2988480144,2988480147,ES +2988480148,2988480155,FR +2988480156,2988480159,BE +2988480160,2988480223,FR +2988480224,2988480227,NL +2988480228,2988480231,IE +2988480232,2988480235,FR +2988480236,2988480239,IT +2988480240,2988480431,FR +2988480432,2988480435,BE +2988480436,2988480503,FR +2988480504,2988480511,DE +2988480512,2988480783,FR +2988480784,2988480799,NL +2988480800,2988480895,FR +2988480896,2988480903,DE +2988480904,2988480915,ES +2988480916,2988480923,FR +2988480924,2988480927,ES +2988480928,2988481039,FR +2988481040,2988481047,GB +2988481048,2988481063,FR +2988481064,2988481067,GB +2988481068,2988481223,FR +2988481224,2988481231,BE +2988481232,2988481599,FR +2988481600,2988481663,NL +2988481664,2988481679,FR +2988481680,2988481695,IT +2988481696,2988481775,FR +2988481776,2988481779,IE +2988481780,2988482031,FR +2988482032,2988482035,ES +2988482036,2988482111,FR 2988482112,2988482143,DE -2988482144,2988482319,FR -2988482320,2988482335,IT -2988482336,2988482575,FR +2988482144,2988482163,FR +2988482164,2988482167,IT +2988482168,2988482175,FR +2988482176,2988482191,ES +2988482192,2988482291,FR +2988482292,2988482295,IE +2988482296,2988482315,FR +2988482316,2988482335,IT +2988482336,2988482399,FR +2988482400,2988482407,GB +2988482408,2988482411,PL +2988482412,2988482447,FR +2988482448,2988482463,DE +2988482464,2988482495,FR +2988482496,2988482511,PL +2988482512,2988482535,FR +2988482536,2988482543,ES +2988482544,2988482575,FR 2988482576,2988482579,CZ -2988482580,2988483027,FR +2988482580,2988482639,FR +2988482640,2988482647,PL +2988482648,2988482655,FR +2988482656,2988482687,GB +2988482688,2988482775,FR +2988482776,2988482779,DE +2988482780,2988482823,FR +2988482824,2988482827,CZ +2988482828,2988482879,FR +2988482880,2988482883,DE +2988482884,2988482887,PL +2988482888,2988482891,BE +2988482892,2988482895,FI +2988482896,2988482927,ES +2988482928,2988483027,FR 2988483028,2988483031,ES -2988483032,2988484831,FR +2988483032,2988483035,FR +2988483036,2988483039,IT +2988483040,2988483095,FR +2988483096,2988483103,BE +2988483104,2988483115,FR +2988483116,2988483119,IT +2988483120,2988483199,FR +2988483200,2988483231,PT +2988483232,2988483387,FR +2988483388,2988483391,GB +2988483392,2988483427,FR +2988483428,2988483431,GB +2988483432,2988483639,FR +2988483640,2988483647,GB +2988483648,2988483663,IT +2988483664,2988483679,FR +2988483680,2988483695,PT +2988483696,2988483739,FR +2988483740,2988483743,BE +2988483744,2988483771,FR +2988483772,2988483775,PL +2988483776,2988483871,FR +2988483872,2988483879,GB +2988483880,2988483959,FR +2988483960,2988483963,ES +2988483964,2988483987,FR +2988483988,2988483991,ES +2988483992,2988484031,FR +2988484032,2988484047,GB +2988484048,2988484095,FR +2988484096,2988484111,ES +2988484112,2988484127,PL +2988484128,2988484163,FR +2988484164,2988484167,GB +2988484168,2988484171,PL +2988484172,2988484187,FR +2988484188,2988484191,ES +2988484192,2988484407,FR +2988484408,2988484415,PL +2988484416,2988484423,IT +2988484424,2988484427,FR +2988484428,2988484431,DE +2988484432,2988484439,FR +2988484440,2988484443,FI +2988484444,2988484831,FR 2988484832,2988484847,GB -2988484848,2988485683,FR +2988484848,2988484955,FR +2988484956,2988484959,DE +2988484960,2988485167,FR +2988485168,2988485183,GB +2988485184,2988485599,FR +2988485600,2988485607,ES +2988485608,2988485675,FR +2988485676,2988485679,NL +2988485680,2988485683,FR 2988485684,2988485687,PL -2988485688,2988486311,FR +2988485688,2988485767,FR +2988485768,2988485771,BE +2988485772,2988485831,FR +2988485832,2988485839,NL +2988485840,2988486015,FR +2988486016,2988486031,GB +2988486032,2988486075,FR +2988486076,2988486079,DE +2988486080,2988486083,FR +2988486084,2988486087,PT +2988486088,2988486127,FR +2988486128,2988486143,GB +2988486144,2988486147,FR +2988486148,2988486151,BE +2988486152,2988486199,FR +2988486200,2988486207,GB +2988486208,2988486215,IT +2988486216,2988486311,FR 2988486312,2988486319,NL -2988486320,2988487071,FR +2988486320,2988486375,FR +2988486376,2988486379,DE +2988486380,2988486519,FR +2988486520,2988486527,PL +2988486528,2988486575,FR +2988486576,2988486579,GB +2988486580,2988486647,FR +2988486648,2988486651,ES +2988486652,2988486655,IT +2988486656,2988486707,FR +2988486708,2988486711,IT +2988486712,2988486719,IE +2988486720,2988486791,FR +2988486792,2988486795,ES +2988486796,2988486799,FR +2988486800,2988486807,PL +2988486808,2988486811,FR +2988486812,2988486815,DE +2988486816,2988486879,FR +2988486880,2988486887,BE +2988486888,2988486891,FR +2988486892,2988486895,IT +2988486896,2988486907,FR +2988486908,2988486911,NL +2988486912,2988487071,FR 2988487072,2988487075,ES 2988487076,2988487095,FR 2988487096,2988487099,ES -2988487100,2988489119,FR +2988487100,2988487135,FR +2988487136,2988487167,ES +2988487168,2988487235,FR +2988487236,2988487239,NL +2988487240,2988487303,FR +2988487304,2988487311,NL +2988487312,2988487883,FR +2988487884,2988487887,NL +2988487888,2988487967,FR +2988487968,2988487975,DE +2988487976,2988488031,FR +2988488032,2988488047,NL +2988488048,2988488151,FR +2988488152,2988488159,IT +2988488160,2988488183,FR +2988488184,2988488187,DE +2988488188,2988488479,FR +2988488480,2988488487,CH +2988488488,2988488563,FR +2988488564,2988488567,GB +2988488568,2988488647,FR +2988488648,2988488655,IT +2988488656,2988488671,FR +2988488672,2988488679,BE +2988488680,2988488963,FR +2988488964,2988488967,DE +2988488968,2988488971,GB +2988488972,2988488975,IT +2988488976,2988489071,FR +2988489072,2988489087,GB +2988489088,2988489095,FR +2988489096,2988489099,DE +2988489100,2988489119,FR 2988489120,2988489127,DE -2988489128,2988489479,FR +2988489128,2988489135,FR +2988489136,2988489151,PT +2988489152,2988489175,FR +2988489176,2988489179,DE +2988489180,2988489255,FR +2988489256,2988489259,GB +2988489260,2988489295,FR +2988489296,2988489311,CH +2988489312,2988489335,FR +2988489336,2988489343,BE +2988489344,2988489379,FR +2988489380,2988489383,ES +2988489384,2988489391,PL +2988489392,2988489479,FR 2988489480,2988489483,DE -2988489484,2988489675,FR +2988489484,2988489487,NL +2988489488,2988489527,FR +2988489528,2988489535,PT +2988489536,2988489671,FR +2988489672,2988489675,IT 2988489676,2988489679,ES -2988489680,2988490179,FR +2988489680,2988489711,FR +2988489712,2988489719,IE +2988489720,2988489727,PL +2988489728,2988489743,FR +2988489744,2988489747,CH +2988489748,2988489791,FR +2988489792,2988489823,PL +2988489824,2988489855,FR +2988489856,2988489887,GB +2988489888,2988489903,FR +2988489904,2988489919,PT +2988489920,2988490047,FR +2988490048,2988490051,PL +2988490052,2988490055,FR +2988490056,2988490059,BE +2988490060,2988490063,FR +2988490064,2988490079,GB +2988490080,2988490095,FR +2988490096,2988490103,CH +2988490104,2988490179,FR 2988490180,2988490183,ES -2988490184,2988490683,FR +2988490184,2988490195,FR +2988490196,2988490199,GB +2988490200,2988490247,FR +2988490248,2988490251,IE +2988490252,2988490359,FR +2988490360,2988490367,PT +2988490368,2988490383,FR +2988490384,2988490399,IE +2988490400,2988490407,DE +2988490408,2988490631,FR +2988490632,2988490639,IT +2988490640,2988490655,PL +2988490656,2988490671,ES +2988490672,2988490683,FR 2988490684,2988490686,IT 2988490687,2988490687,BE -2988490688,2988492799,FR +2988490688,2988490719,ES +2988490720,2988492799,FR 2988492800,2988494847,PL -2988494848,2988499663,FR +2988494848,2988498991,FR +2988498992,2988499007,DE +2988499008,2988499167,FR +2988499168,2988499199,NL +2988499200,2988499231,FR +2988499232,2988499263,PT +2988499264,2988499455,FR +2988499456,2988499463,CZ +2988499464,2988499471,ES +2988499472,2988499487,FR +2988499488,2988499503,DE +2988499504,2988499559,FR +2988499560,2988499567,PT +2988499568,2988499623,FR +2988499624,2988499631,GB +2988499632,2988499639,FR +2988499640,2988499647,IT +2988499648,2988499663,FR 2988499664,2988499671,NL 2988499672,2988499729,FR 2988499730,2988499730,GB 2988499731,2988499736,FR 2988499737,2988499737,NL -2988499738,2988500415,FR +2988499738,2988499767,FR +2988499768,2988499775,GB +2988499776,2988499823,FR +2988499824,2988499831,GB +2988499832,2988499851,FR +2988499852,2988499855,ES +2988499856,2988499935,FR +2988499936,2988499967,IE +2988499968,2988500255,FR +2988500256,2988500271,ES +2988500272,2988500343,FR +2988500344,2988500347,IT +2988500348,2988500351,CH +2988500352,2988500415,FR 2988500416,2988500447,CZ -2988500448,2988500855,FR +2988500448,2988500511,FR +2988500512,2988500519,CH +2988500520,2988500607,FR +2988500608,2988500623,PL +2988500624,2988500639,FR +2988500640,2988500671,IT +2988500672,2988500679,FR +2988500680,2988500687,ES +2988500688,2988500703,GB +2988500704,2988500735,FR +2988500736,2988500751,PL +2988500752,2988500855,FR 2988500856,2988500859,ES -2988500860,2988501127,FR +2988500860,2988500959,FR +2988500960,2988500975,NL +2988500976,2988501055,FR +2988501056,2988501087,GB +2988501088,2988501127,FR 2988501128,2988501131,IT -2988501132,2988502051,FR +2988501132,2988501215,FR +2988501216,2988501223,FI +2988501224,2988501367,FR +2988501368,2988501375,IE +2988501376,2988502051,FR 2988502052,2988502055,PL -2988502056,2988502479,FR +2988502056,2988502107,FR +2988502108,2988502111,GB +2988502112,2988502267,FR +2988502268,2988502271,BE +2988502272,2988502287,FR +2988502288,2988502303,PL +2988502304,2988502391,FR +2988502392,2988502399,IT +2988502400,2988502407,FR +2988502408,2988502411,FI +2988502412,2988502479,FR 2988502480,2988502483,ES -2988502484,2988502655,FR +2988502484,2988502487,PL +2988502488,2988502491,FR +2988502492,2988502495,DE +2988502496,2988502631,FR +2988502632,2988502639,FI +2988502640,2988502655,FR 2988502656,2988502719,DE -2988502720,2988502881,FR +2988502720,2988502735,FR +2988502736,2988502751,ES +2988502752,2988502881,FR 2988502882,2988502882,IT -2988502883,2988504371,FR +2988502883,2988502891,FR +2988502892,2988502895,ES +2988502896,2988502911,FI +2988502912,2988503031,FR +2988503032,2988503035,FI +2988503036,2988503327,FR +2988503328,2988503343,IT +2988503344,2988503395,FR +2988503396,2988503399,NL +2988503400,2988503407,CH +2988503408,2988503903,FR +2988503904,2988503907,PL +2988503908,2988503911,DE +2988503912,2988503919,FR +2988503920,2988503927,IT +2988503928,2988503935,FR +2988503936,2988503939,GB +2988503940,2988503999,FR +2988504000,2988504003,BE +2988504004,2988504095,FR +2988504096,2988504127,PL +2988504128,2988504143,CH +2988504144,2988504231,FR +2988504232,2988504239,DE +2988504240,2988504315,FR +2988504316,2988504319,PT +2988504320,2988504371,FR 2988504372,2988504375,PL -2988504376,2988505391,FR +2988504376,2988504435,FR +2988504436,2988504439,LT +2988504440,2988504543,FR +2988504544,2988504559,DE +2988504560,2988504567,FR +2988504568,2988504575,IT +2988504576,2988504591,FR +2988504592,2988504599,IT +2988504600,2988504647,FR +2988504648,2988504655,IT +2988504656,2988504827,FR +2988504828,2988504831,DE +2988504832,2988504895,FR +2988504896,2988504959,DE +2988504960,2988504967,FR +2988504968,2988504975,ES +2988504976,2988504979,PL +2988504980,2988505151,FR +2988505152,2988505167,GB +2988505168,2988505183,FR +2988505184,2988505191,NL +2988505192,2988505199,DE +2988505200,2988505207,FR +2988505208,2988505215,ES +2988505216,2988505335,FR +2988505336,2988505339,IE +2988505340,2988505343,DE +2988505344,2988505375,FR +2988505376,2988505391,GB 2988505392,2988505395,ES -2988505396,2988507163,FR +2988505396,2988505399,FI +2988505400,2988505403,PL +2988505404,2988505455,FR +2988505456,2988505463,GB +2988505464,2988505479,FR +2988505480,2988505487,IT +2988505488,2988505495,FR +2988505496,2988505499,NL +2988505500,2988505503,ES +2988505504,2988505567,FR +2988505568,2988505583,IE +2988505584,2988505615,FR +2988505616,2988505623,PL +2988505624,2988505703,FR +2988505704,2988505707,FI +2988505708,2988505735,FR +2988505736,2988505743,FI +2988505744,2988505751,ES +2988505752,2988505951,FR +2988505952,2988505967,NL +2988505968,2988506235,FR +2988506236,2988506239,NL +2988506240,2988506379,FR +2988506380,2988506383,GB +2988506384,2988506439,FR +2988506440,2988506447,IE +2988506448,2988506459,FR +2988506460,2988506463,ES +2988506464,2988506495,FR +2988506496,2988506499,CH +2988506500,2988506527,FR +2988506528,2988506543,IE +2988506544,2988506567,FR +2988506568,2988506571,NL +2988506572,2988506651,FR +2988506652,2988506655,IT +2988506656,2988506671,FR +2988506672,2988506687,DE +2988506688,2988506703,FR +2988506704,2988506719,ES +2988506720,2988506767,FR +2988506768,2988506771,NL +2988506772,2988506827,FR +2988506828,2988506831,ES +2988506832,2988506867,FR +2988506868,2988506875,CH +2988506876,2988506879,DE +2988506880,2988506943,FR +2988506944,2988506975,DE +2988506976,2988507039,FR +2988507040,2988507071,ES +2988507072,2988507135,FR +2988507136,2988507143,PL +2988507144,2988507151,FR +2988507152,2988507155,ES +2988507156,2988507163,FR 2988507164,2988507167,ES -2988507168,2988507975,FR +2988507168,2988507203,FR +2988507204,2988507207,DE +2988507208,2988507215,FR +2988507216,2988507223,FI +2988507224,2988507231,DE +2988507232,2988507291,FR +2988507292,2988507295,IT +2988507296,2988507459,FR +2988507460,2988507463,BE +2988507464,2988507471,DE +2988507472,2988507503,FR +2988507504,2988507519,IT +2988507520,2988507527,FR +2988507528,2988507531,GB +2988507532,2988507535,NL +2988507536,2988507567,FR +2988507568,2988507583,ES +2988507584,2988507595,FR +2988507596,2988507599,LT +2988507600,2988507615,FR +2988507616,2988507623,DE +2988507624,2988507627,FR +2988507628,2988507631,PL +2988507632,2988507743,FR +2988507744,2988507759,NL +2988507760,2988507775,FR +2988507776,2988507791,NL +2988507792,2988507807,IT +2988507808,2988507871,FR +2988507872,2988507879,DE +2988507880,2988507955,FR +2988507956,2988507959,DE +2988507960,2988507975,FR 2988507976,2988507979,IT -2988507980,2988509511,FR +2988507980,2988508035,FR +2988508036,2988508039,DE +2988508040,2988508111,FR +2988508112,2988508127,IE +2988508128,2988508143,FR +2988508144,2988508147,IE +2988508148,2988508175,FR +2988508176,2988508191,IE +2988508192,2988508211,FR +2988508212,2988508215,CZ +2988508216,2988508239,FR +2988508240,2988508255,GB +2988508256,2988508303,FR +2988508304,2988508307,CH +2988508308,2988508479,FR +2988508480,2988508543,BE +2988508544,2988508607,FR +2988508608,2988508639,ES +2988508640,2988508671,DE +2988508672,2988508723,FR +2988508724,2988508727,GB +2988508728,2988508947,FR +2988508948,2988508951,ES +2988508952,2988508987,FR +2988508988,2988508991,ES +2988508992,2988509007,BE +2988509008,2988509011,FR +2988509012,2988509015,BE +2988509016,2988509023,FR +2988509024,2988509055,CH +2988509056,2988509287,FR +2988509288,2988509291,GB +2988509292,2988509403,FR +2988509404,2988509407,FI +2988509408,2988509467,FR +2988509468,2988509471,BE +2988509472,2988509511,FR 2988509512,2988509515,PL -2988509516,2988509747,FR +2988509516,2988509551,FR +2988509552,2988509559,DE +2988509560,2988509599,FR +2988509600,2988509615,DE +2988509616,2988509619,FR +2988509620,2988509623,DE +2988509624,2988509627,FR +2988509628,2988509631,GB +2988509632,2988509735,FR +2988509736,2988509739,CH +2988509740,2988509747,FR 2988509748,2988509751,LT -2988509752,2988512903,FR +2988509752,2988509755,IT +2988509756,2988509767,FR +2988509768,2988509775,PL +2988509776,2988509779,DE +2988509780,2988509791,FR +2988509792,2988509823,ES +2988509824,2988509839,PL +2988509840,2988509863,FR +2988509864,2988509871,NL +2988509872,2988509875,FR +2988509876,2988509879,NL +2988509880,2988509931,FR +2988509932,2988509935,ES +2988509936,2988509939,IT +2988509940,2988509951,FR +2988509952,2988509955,DE +2988509956,2988509983,FR +2988509984,2988509991,DE +2988509992,2988509999,FR +2988510000,2988510015,IT +2988510016,2988510023,IE +2988510024,2988510039,FR +2988510040,2988510043,ES +2988510044,2988510207,FR +2988510208,2988510215,GB +2988510216,2988510223,DE +2988510224,2988510255,FR +2988510256,2988510259,FI +2988510260,2988510323,FR +2988510324,2988510327,FI +2988510328,2988510335,ES +2988510336,2988510423,FR +2988510424,2988510427,DE +2988510428,2988510431,IT +2988510432,2988510499,FR +2988510500,2988510503,GB +2988510504,2988510507,FR +2988510508,2988510511,GB +2988510512,2988510515,FR +2988510516,2988510519,ES +2988510520,2988510975,FR +2988510976,2988510983,PL +2988510984,2988511559,FR +2988511560,2988511567,IT +2988511568,2988511615,FR +2988511616,2988511647,IE +2988511648,2988511695,FR +2988511696,2988511703,PL +2988511704,2988511719,FR +2988511720,2988511723,PL +2988511724,2988511743,FR +2988511744,2988511747,IT +2988511748,2988511835,FR +2988511836,2988511839,IT +2988511840,2988511855,BE +2988511856,2988511871,FR +2988511872,2988511879,IT +2988511880,2988511887,FR +2988511888,2988511903,CH +2988511904,2988511927,FR +2988511928,2988511931,ES +2988511932,2988511959,FR +2988511960,2988511967,DE +2988511968,2988511999,FR +2988512000,2988512031,PL +2988512032,2988512055,FR +2988512056,2988512059,GB +2988512060,2988512143,FR +2988512144,2988512159,ES +2988512160,2988512195,FR +2988512196,2988512199,PL +2988512200,2988512231,FR +2988512232,2988512239,NL +2988512240,2988512435,FR +2988512436,2988512439,DE +2988512440,2988512455,FR +2988512456,2988512459,GB +2988512460,2988512467,FR +2988512468,2988512471,GB +2988512472,2988512511,FR +2988512512,2988512515,DE +2988512516,2988512519,PL +2988512520,2988512703,FR +2988512704,2988512735,ES +2988512736,2988512767,PL +2988512768,2988512879,FR +2988512880,2988512895,GB +2988512896,2988512903,FR 2988512904,2988512907,GB -2988512908,2988513003,FR +2988512908,2988512911,DE +2988512912,2988512963,FR +2988512964,2988512967,PL +2988512968,2988513003,FR 2988513004,2988513007,ES -2988513008,2988513747,FR +2988513008,2988513015,FR +2988513016,2988513019,PT +2988513020,2988513023,GB +2988513024,2988513135,FR +2988513136,2988513151,IT +2988513152,2988513207,FR +2988513208,2988513219,GB +2988513220,2988513231,FR +2988513232,2988513235,GB +2988513236,2988513239,FR +2988513240,2988513247,IT +2988513248,2988513327,FR +2988513328,2988513331,PL +2988513332,2988513351,FR +2988513352,2988513359,DE +2988513360,2988513363,ES +2988513364,2988513503,FR +2988513504,2988513511,GB +2988513512,2988513711,FR +2988513712,2988513715,GB +2988513716,2988513743,FR +2988513744,2988513747,DE 2988513748,2988513751,IT -2988513752,2988515327,FR +2988513752,2988513919,FR +2988513920,2988513951,PL +2988513952,2988513967,FR +2988513968,2988513983,NL +2988513984,2988513999,BE +2988514000,2988514015,FR +2988514016,2988514023,GB +2988514024,2988514131,FR +2988514132,2988514135,DE +2988514136,2988514239,FR +2988514240,2988514243,DE +2988514244,2988514335,FR +2988514336,2988514339,GB +2988514340,2988514359,FR +2988514360,2988514367,ES +2988514368,2988514399,FR +2988514400,2988514431,NL +2988514432,2988514463,FR +2988514464,2988514495,GB +2988514496,2988514527,NL +2988514528,2988514543,GB +2988514544,2988514559,PT +2988514560,2988514591,FR +2988514592,2988514623,PL +2988514624,2988514687,FR +2988514688,2988514719,FI +2988514720,2988514735,FR +2988514736,2988514739,DE +2988514740,2988514747,FR +2988514748,2988514751,NL +2988514752,2988514819,FR +2988514820,2988514823,NL +2988514824,2988514847,FR +2988514848,2988514879,DE +2988514880,2988514991,FR +2988514992,2988514995,IT +2988514996,2988515007,FR +2988515008,2988515023,BE +2988515024,2988515031,FR +2988515032,2988515035,ES +2988515036,2988515327,FR 2988515328,2988517375,DE 2988517376,2988519423,FR 2988519424,2988521471,PL -2988521472,2988524075,FR +2988521472,2988523523,FR +2988523524,2988523527,GB +2988523528,2988523603,FR +2988523604,2988523607,LT +2988523608,2988523631,FR +2988523632,2988523639,IT +2988523640,2988523651,FR +2988523652,2988523655,IT +2988523656,2988523663,ES +2988523664,2988523667,FR +2988523668,2988523671,NL +2988523672,2988523711,FR +2988523712,2988523727,ES +2988523728,2988523735,FI +2988523736,2988524047,FR +2988524048,2988524055,NL +2988524056,2988524063,FR +2988524064,2988524071,PL +2988524072,2988524075,FR 2988524076,2988524079,ES -2988524080,2988524271,FR +2988524080,2988524143,FR +2988524144,2988524147,GB +2988524148,2988524175,FR +2988524176,2988524183,IT +2988524184,2988524271,FR 2988524272,2988524287,DE -2988524288,2988525887,FR +2988524288,2988524299,FR +2988524300,2988524303,DE +2988524304,2988524367,FR +2988524368,2988524383,NL +2988524384,2988524479,FR +2988524480,2988524483,NL +2988524484,2988524511,FR +2988524512,2988524543,IT +2988524544,2988524559,ES +2988524560,2988524575,BE +2988524576,2988524591,PL +2988524592,2988524639,FR +2988524640,2988524671,PL +2988524672,2988524767,FR +2988524768,2988524799,CH +2988524800,2988524815,FR +2988524816,2988524831,GB +2988524832,2988524863,FR +2988524864,2988524895,PL +2988524896,2988524911,FR +2988524912,2988524919,DE +2988524920,2988525579,FR +2988525580,2988525583,IT +2988525584,2988525631,FR +2988525632,2988525647,ES +2988525648,2988525819,FR +2988525820,2988525823,IT +2988525824,2988525847,FR +2988525848,2988525851,CZ +2988525852,2988525887,FR 2988525888,2988525951,GB -2988525952,2988526415,FR -2988526416,2988526423,ES -2988526424,2988527527,FR +2988525952,2988526079,FR +2988526080,2988526087,DE +2988526088,2988526091,IT +2988526092,2988526143,FR +2988526144,2988526175,CH +2988526176,2988526367,FR +2988526368,2988526383,IT +2988526384,2988526423,ES +2988526424,2988526427,GB +2988526428,2988526431,FR +2988526432,2988526435,IT +2988526436,2988526575,FR +2988526576,2988526579,GB +2988526580,2988526927,FR +2988526928,2988526935,DE +2988526936,2988526939,IT +2988526940,2988526947,FR +2988526948,2988526951,BE +2988526952,2988526999,FR +2988527000,2988527003,IT +2988527004,2988527039,FR +2988527040,2988527055,NL +2988527056,2988527087,FR +2988527088,2988527095,IT +2988527096,2988527167,FR +2988527168,2988527175,ES +2988527176,2988527191,FR +2988527192,2988527195,NL +2988527196,2988527411,FR +2988527412,2988527415,ES +2988527416,2988527527,FR 2988527528,2988527531,NL -2988527532,2988527831,FR +2988527532,2988527535,FR +2988527536,2988527543,PL +2988527544,2988527583,FR +2988527584,2988527591,IT +2988527592,2988527615,FR +2988527616,2988527623,DE +2988527624,2988527671,FR +2988527672,2988527675,IT +2988527676,2988527747,FR +2988527748,2988527751,IT +2988527752,2988527755,FR +2988527756,2988527759,IT +2988527760,2988527823,FR +2988527824,2988527831,PL 2988527832,2988527839,ES 2988527840,2988527887,FR 2988527888,2988527891,ES -2988527892,2988529351,FR +2988527892,2988528015,FR +2988528016,2988528031,GB +2988528032,2988528111,FR +2988528112,2988528115,PL +2988528116,2988528187,FR +2988528188,2988528191,IT +2988528192,2988528219,FR +2988528220,2988528223,PT +2988528224,2988528279,FR +2988528280,2988528287,DE +2988528288,2988528351,FR +2988528352,2988528383,PL +2988528384,2988528639,FR +2988528640,2988528647,ES +2988528648,2988528655,FR +2988528656,2988528659,BE +2988528660,2988528699,FR +2988528700,2988528703,CZ +2988528704,2988528751,FR +2988528752,2988528759,NL +2988528760,2988528835,FR +2988528836,2988528839,IT +2988528840,2988528931,FR +2988528932,2988528935,NL +2988528936,2988528943,FR +2988528944,2988528959,ES +2988528960,2988528983,FR +2988528984,2988528991,GB +2988528992,2988529031,FR +2988529032,2988529039,GB +2988529040,2988529087,FR +2988529088,2988529095,GB +2988529096,2988529159,FR +2988529160,2988529163,ES +2988529164,2988529215,FR +2988529216,2988529247,IE +2988529248,2988529251,FR +2988529252,2988529255,PT +2988529256,2988529263,IT +2988529264,2988529315,FR +2988529316,2988529319,PL +2988529320,2988529323,FR +2988529324,2988529327,BE +2988529328,2988529343,FR +2988529344,2988529351,ES 2988529352,2988529359,GB 2988529360,2988529375,FR 2988529376,2988529383,GB 2988529384,2988529387,ES -2988529388,2988535807,FR +2988529388,2988529599,FR +2988529600,2988529607,IT +2988529608,2988529787,FR +2988529788,2988529791,ES +2988529792,2988529915,FR +2988529916,2988529919,DE +2988529920,2988529935,NL +2988529936,2988529947,FR +2988529948,2988529951,BE +2988529952,2988529955,FR +2988529956,2988529959,ES +2988529960,2988530031,FR +2988530032,2988530039,GB +2988530040,2988530255,FR +2988530256,2988530271,IT +2988530272,2988530311,FR +2988530312,2988530319,CH +2988530320,2988530407,FR +2988530408,2988530415,ES +2988530416,2988530695,FR +2988530696,2988530703,IE +2988530704,2988530735,FR +2988530736,2988530739,IT +2988530740,2988530847,FR +2988530848,2988530863,ES +2988530864,2988530871,FR +2988530872,2988530879,ES +2988530880,2988530927,FR +2988530928,2988530943,BE +2988530944,2988531027,FR +2988531028,2988531031,CZ +2988531032,2988531039,FR +2988531040,2988531043,DE +2988531044,2988531075,FR +2988531076,2988531079,GB +2988531080,2988531247,FR +2988531248,2988531255,GB +2988531256,2988531259,FR +2988531260,2988531263,ES +2988531264,2988531291,FR +2988531292,2988531295,DE +2988531296,2988531311,GB +2988531312,2988531315,CZ +2988531316,2988531319,FR +2988531320,2988531323,GB +2988531324,2988531327,FR +2988531328,2988531351,GB +2988531352,2988531391,FR +2988531392,2988531399,NL +2988531400,2988531423,FR +2988531424,2988531427,NL +2988531428,2988531431,FR +2988531432,2988531439,ES +2988531440,2988535807,FR 2988535808,2988537855,ES 2988537856,2988539971,FR 2988539972,2988539975,ES -2988539976,2988540503,FR +2988539976,2988540007,FR +2988540008,2988540015,ES +2988540016,2988540019,FR +2988540020,2988540023,DE +2988540024,2988540231,FR +2988540232,2988540235,ES +2988540236,2988540239,DE +2988540240,2988540303,FR +2988540304,2988540319,IT +2988540320,2988540359,FR +2988540360,2988540363,DE +2988540364,2988540495,FR +2988540496,2988540503,IE 2988540504,2988540507,NL -2988540508,2988544671,FR +2988540508,2988540563,FR +2988540564,2988540567,CZ +2988540568,2988540631,FR +2988540632,2988540635,CZ +2988540636,2988540639,FR +2988540640,2988540647,IT +2988540648,2988540667,FR +2988540668,2988540671,DE +2988540672,2988540783,FR +2988540784,2988540787,PL +2988540788,2988541119,FR +2988541120,2988541127,BE +2988541128,2988541315,FR +2988541316,2988541319,FI +2988541320,2988541343,FR +2988541344,2988541347,NL +2988541348,2988541367,FR +2988541368,2988541371,GB +2988541372,2988541439,FR +2988541440,2988541443,ES +2988541444,2988541455,FR +2988541456,2988541463,DE +2988541464,2988541547,FR +2988541548,2988541551,GB +2988541552,2988541659,FR +2988541660,2988541663,ES +2988541664,2988541691,FR +2988541692,2988541695,DE +2988541696,2988541735,FR +2988541736,2988541743,DE +2988541744,2988541815,FR +2988541816,2988541819,IE +2988541820,2988541855,FR +2988541856,2988541863,PL +2988541864,2988541867,BE +2988541868,2988541895,FR +2988541896,2988541903,NL +2988541904,2988541927,FR +2988541928,2988541935,LT +2988541936,2988542027,FR +2988542028,2988542031,ES +2988542032,2988542047,PT +2988542048,2988542143,FR +2988542144,2988542175,IT +2988542176,2988542431,FR +2988542432,2988542439,BE +2988542440,2988542443,GB +2988542444,2988542447,IE +2988542448,2988542539,FR +2988542540,2988542543,DE +2988542544,2988542607,FR +2988542608,2988542611,PL +2988542612,2988542615,FR +2988542616,2988542623,IT +2988542624,2988542627,FR +2988542628,2988542631,NL +2988542632,2988542911,FR +2988542912,2988542919,IE +2988542920,2988542927,FR +2988542928,2988542931,IT +2988542932,2988542935,PL +2988542936,2988542939,FR +2988542940,2988542943,ES +2988542944,2988543023,FR +2988543024,2988543039,BE +2988543040,2988543051,FR +2988543052,2988543055,NL +2988543056,2988543063,FR +2988543064,2988543067,ES +2988543068,2988543103,FR +2988543104,2988543135,CH +2988543136,2988543167,BE +2988543168,2988543191,FR +2988543192,2988543195,NL +2988543196,2988543379,FR +2988543380,2988543383,ES +2988543384,2988543407,FR +2988543408,2988543411,CZ +2988543412,2988543439,FR +2988543440,2988543447,GB +2988543448,2988543551,FR +2988543552,2988543559,ES +2988543560,2988543563,PT +2988543564,2988543615,FR +2988543616,2988543647,CZ +2988543648,2988543679,FR +2988543680,2988543711,NL +2988543712,2988543935,FR +2988543936,2988543939,GB +2988543940,2988544003,FR +2988544004,2988544007,PL +2988544008,2988544015,FR +2988544016,2988544023,DE +2988544024,2988544039,FR +2988544040,2988544043,IT +2988544044,2988544047,BE +2988544048,2988544183,FR +2988544184,2988544187,DE +2988544188,2988544223,FR +2988544224,2988544227,ES +2988544228,2988544231,FR +2988544232,2988544239,GB +2988544240,2988544271,FR +2988544272,2988544275,CH +2988544276,2988544303,FR +2988544304,2988544307,DE +2988544308,2988544327,FR +2988544328,2988544331,PT +2988544332,2988544495,FR +2988544496,2988544511,GB +2988544512,2988544655,FR +2988544656,2988544659,ES +2988544660,2988544671,FR 2988544672,2988544687,GB 2988544688,2988544691,NL -2988544692,2988546727,FR +2988544692,2988544727,FR +2988544728,2988544735,DE +2988544736,2988544935,FR +2988544936,2988544943,NL +2988544944,2988544987,FR +2988544988,2988544991,IE +2988544992,2988544999,ES +2988545000,2988545003,DE +2988545004,2988545007,IT +2988545008,2988545015,FR +2988545016,2988545019,DE +2988545020,2988545031,FR +2988545032,2988545039,FI +2988545040,2988545051,FR +2988545052,2988545055,GB +2988545056,2988545215,FR +2988545216,2988545223,ES +2988545224,2988545227,NL +2988545228,2988545383,FR +2988545384,2988545387,DE +2988545388,2988545455,FR +2988545456,2988545471,IT +2988545472,2988545487,GB +2988545488,2988545551,FR +2988545552,2988545555,GB +2988545556,2988545559,NL +2988545560,2988545583,FR +2988545584,2988545599,IT +2988545600,2988545871,FR +2988545872,2988545887,ES +2988545888,2988545931,FR +2988545932,2988545935,PL +2988545936,2988546015,FR +2988546016,2988546031,NL +2988546032,2988546035,GB +2988546036,2988546291,FR +2988546292,2988546295,ES +2988546296,2988546555,FR +2988546556,2988546559,ES +2988546560,2988546583,FR +2988546584,2988546591,DE +2988546592,2988546619,FR +2988546620,2988546623,ES +2988546624,2988546687,FR +2988546688,2988546691,CH +2988546692,2988546695,FR +2988546696,2988546699,ES +2988546700,2988546703,FR +2988546704,2988546719,DE +2988546720,2988546727,FR 2988546728,2988546731,ES -2988546732,2988547067,FR +2988546732,2988546735,DE +2988546736,2988546863,FR +2988546864,2988546867,CH +2988546868,2988546871,FR +2988546872,2988546879,DE +2988546880,2988546995,FR +2988546996,2988546999,IT +2988547000,2988547063,FR +2988547064,2988547067,GB 2988547068,2988547071,ES 2988547072,2988547095,FR 2988547096,2988547099,ES -2988547100,2988547655,FR +2988547100,2988547167,FR +2988547168,2988547175,GB +2988547176,2988547263,FR +2988547264,2988547267,NL +2988547268,2988547479,FR +2988547480,2988547487,GB +2988547488,2988547507,FR +2988547508,2988547511,NL +2988547512,2988547543,FR +2988547544,2988547547,NL +2988547548,2988547567,FR +2988547568,2988547583,DE +2988547584,2988547655,FR 2988547656,2988547663,PL -2988547664,2988547871,FR +2988547664,2988547807,FR +2988547808,2988547823,GB +2988547824,2988547839,FR +2988547840,2988547855,DE +2988547856,2988547871,FR 2988547872,2988547903,GB -2988547904,2988548015,FR +2988547904,2988547979,FR +2988547980,2988547983,ES +2988547984,2988548015,FR 2988548016,2988548019,ES 2988548020,2988548095,FR 2988548096,2988550143,ES -2988550144,2988550359,FR +2988550144,2988550175,FR +2988550176,2988550179,DE +2988550180,2988550207,FR +2988550208,2988550239,DE +2988550240,2988550247,FR +2988550248,2988550251,PL +2988550252,2988550259,FR +2988550260,2988550263,PL +2988550264,2988550359,FR 2988550360,2988550363,ES -2988550364,2988550438,FR +2988550364,2988550367,FR +2988550368,2988550399,FI +2988550400,2988550431,FR +2988550432,2988550438,ES 2988550439,2988550439,GB -2988550440,2988550463,FR +2988550440,2988550447,ES +2988550448,2988550451,FR +2988550452,2988550455,IE +2988550456,2988550463,FR 2988550464,2988550527,DE -2988550528,2988551443,FR +2988550528,2988550627,FR +2988550628,2988550631,CZ +2988550632,2988550679,FR +2988550680,2988550687,GB +2988550688,2988550911,FR +2988550912,2988550927,NL +2988550928,2988551135,FR +2988551136,2988551167,ES +2988551168,2988551443,FR 2988551444,2988551447,ES -2988551448,2988551535,FR +2988551448,2988551511,FR +2988551512,2988551519,ES +2988551520,2988551535,FI 2988551536,2988551551,DE -2988551552,2988553531,FR +2988551552,2988551871,FR +2988551872,2988551887,PL +2988551888,2988552543,FR +2988552544,2988552551,PL +2988552552,2988552567,FR +2988552568,2988552575,GB +2988552576,2988552603,FR +2988552604,2988552607,GB +2988552608,2988552647,FR +2988552648,2988552655,NL +2988552656,2988552659,FR +2988552660,2988552663,PT +2988552664,2988552671,NL +2988552672,2988552711,FR +2988552712,2988552719,IE +2988552720,2988552735,GB +2988552736,2988552831,FR +2988552832,2988552847,ES +2988552848,2988552883,FR +2988552884,2988552887,IT +2988552888,2988552891,DE +2988552892,2988552915,FR +2988552916,2988552919,NL +2988552920,2988552927,FR +2988552928,2988552943,ES +2988552944,2988553087,FR +2988553088,2988553119,GB +2988553120,2988553399,FR +2988553400,2988553407,NL +2988553408,2988553415,FR +2988553416,2988553423,DE +2988553424,2988553455,FR +2988553456,2988553471,GB +2988553472,2988553531,FR 2988553532,2988553535,ES -2988553536,2988554035,FR +2988553536,2988553551,GB +2988553552,2988553567,FR +2988553568,2988553575,PL +2988553576,2988553659,FR +2988553660,2988553663,NL +2988553664,2988554015,FR +2988554016,2988554031,BE +2988554032,2988554035,FR 2988554036,2988554039,ES -2988554040,2988555527,FR +2988554040,2988554063,FR +2988554064,2988554067,DE +2988554068,2988554071,FR +2988554072,2988554075,ES +2988554076,2988554127,FR +2988554128,2988554131,IT +2988554132,2988554175,FR +2988554176,2988554183,CZ +2988554184,2988554499,FR +2988554500,2988554503,GB +2988554504,2988554547,FR +2988554548,2988554551,IT +2988554552,2988554787,FR +2988554788,2988554791,CH +2988554792,2988554795,FI +2988554796,2988554919,FR +2988554920,2988554927,BE +2988554928,2988555055,FR +2988555056,2988555063,FI +2988555064,2988555115,FR +2988555116,2988555119,ES +2988555120,2988555123,BE +2988555124,2988555127,IT +2988555128,2988555167,FR +2988555168,2988555183,ES +2988555184,2988555187,IT +2988555188,2988555211,FR +2988555212,2988555215,GB +2988555216,2988555231,FR +2988555232,2988555263,PL +2988555264,2988555527,FR 2988555528,2988555531,ES -2988555532,2988556207,FR +2988555532,2988555563,FR +2988555564,2988555567,PL +2988555568,2988555719,FR +2988555720,2988555723,IE +2988555724,2988555727,CZ +2988555728,2988556179,FR +2988556180,2988556183,ES +2988556184,2988556191,FR +2988556192,2988556195,ES +2988556196,2988556199,CH +2988556200,2988556207,FR 2988556208,2988556211,DE -2988556212,2988556359,FR +2988556212,2988556215,FR +2988556216,2988556219,DE +2988556220,2988556223,PL +2988556224,2988556359,FR 2988556360,2988556363,ES -2988556364,2988557507,FR +2988556364,2988556463,FR +2988556464,2988556479,CH +2988556480,2988556483,GB +2988556484,2988556539,FR +2988556540,2988556543,BE +2988556544,2988556891,FR +2988556892,2988556895,IT +2988556896,2988556967,FR +2988556968,2988556975,DE +2988556976,2988557051,FR +2988557052,2988557055,PT +2988557056,2988557063,FR +2988557064,2988557071,GB +2988557072,2988557079,FR +2988557080,2988557087,IT +2988557088,2988557095,FI +2988557096,2988557247,FR +2988557248,2988557251,DE +2988557252,2988557263,FR +2988557264,2988557279,BE +2988557280,2988557287,FR +2988557288,2988557291,PL +2988557292,2988557295,FR +2988557296,2988557299,IE +2988557300,2988557303,ES +2988557304,2988557311,DE +2988557312,2988557439,FR +2988557440,2988557471,GB +2988557472,2988557491,FR +2988557492,2988557495,GB +2988557496,2988557499,DE +2988557500,2988557507,FR 2988557508,2988557511,ES -2988557512,2988557539,FR +2988557512,2988557531,FR +2988557532,2988557535,ES +2988557536,2988557539,FR 2988557540,2988557543,ES -2988557544,2988558203,FR +2988557544,2988557559,FR +2988557560,2988557563,DE +2988557564,2988557643,FR +2988557644,2988557651,DE +2988557652,2988557767,FR +2988557768,2988557771,DE +2988557772,2988558063,FR +2988558064,2988558067,BE +2988558068,2988558071,DE +2988558072,2988558111,FR +2988558112,2988558119,IT +2988558120,2988558143,FR +2988558144,2988558159,GB +2988558160,2988558175,FR +2988558176,2988558191,NL +2988558192,2988558203,FR 2988558204,2988558207,DE -2988558208,2988558803,FR +2988558208,2988558591,FR +2988558592,2988558623,DE +2988558624,2988558655,NL +2988558656,2988558719,PL +2988558720,2988558727,NL +2988558728,2988558731,BE +2988558732,2988558803,FR 2988558804,2988558807,ES 2988558808,2988558815,NL -2988558816,2988561583,FR +2988558816,2988558831,GB +2988558832,2988558863,FR +2988558864,2988558879,NL +2988558880,2988558891,FR +2988558892,2988558895,DE +2988558896,2988558907,FR +2988558908,2988558911,DE +2988558912,2988558927,FR +2988558928,2988558935,CZ +2988558936,2988558939,IT +2988558940,2988559011,FR +2988559012,2988559015,BE +2988559016,2988559023,DE +2988559024,2988559247,FR +2988559248,2988559255,GB +2988559256,2988559631,FR +2988559632,2988559647,GB +2988559648,2988559663,IT +2988559664,2988559695,FR +2988559696,2988559703,GB +2988559704,2988559735,FR +2988559736,2988559743,GB +2988559744,2988560287,FR +2988560288,2988560319,ES +2988560320,2988560351,FR +2988560352,2988560383,ES +2988560384,2988560387,CZ +2988560388,2988560431,FR +2988560432,2988560439,CH +2988560440,2988560463,FR +2988560464,2988560479,NL +2988560480,2988560511,FR +2988560512,2988560527,IT +2988560528,2988560531,FR +2988560532,2988560535,ES +2988560536,2988560543,IT +2988560544,2988560595,FR +2988560596,2988560599,ES +2988560600,2988560607,FR +2988560608,2988560623,PL +2988560624,2988560635,FR +2988560636,2988560639,DE +2988560640,2988560703,PT +2988560704,2988560711,NL +2988560712,2988560719,FR +2988560720,2988560735,DE +2988560736,2988560895,FR +2988560896,2988560919,PL +2988560920,2988561039,FR +2988561040,2988561043,GB +2988561044,2988561055,FR +2988561056,2988561059,ES +2988561060,2988561063,FR +2988561064,2988561071,PL +2988561072,2988561075,BE +2988561076,2988561095,FR +2988561096,2988561099,NL +2988561100,2988561103,ES +2988561104,2988561179,FR +2988561180,2988561183,NL +2988561184,2988561203,FR +2988561204,2988561207,PT +2988561208,2988561215,PL +2988561216,2988561231,ES +2988561232,2988561283,FR +2988561284,2988561287,PT +2988561288,2988561291,IE +2988561292,2988561295,DE +2988561296,2988561343,FR +2988561344,2988561375,PL +2988561376,2988561391,NL +2988561392,2988561583,FR 2988561584,2988561591,GB -2988561592,2988561763,FR +2988561592,2988561599,FR +2988561600,2988561631,PL +2988561632,2988561663,FR +2988561664,2988561671,PL +2988561672,2988561747,FR +2988561748,2988561751,FI +2988561752,2988561759,FR +2988561760,2988561763,LT 2988561764,2988561767,IT -2988561768,2988562847,FR +2988561768,2988561847,FR +2988561848,2988561855,IT +2988561856,2988561871,GB +2988561872,2988561875,IE +2988561876,2988561887,FR +2988561888,2988561903,GB +2988561904,2988562143,FR +2988562144,2988562151,IE +2988562152,2988562159,DE +2988562160,2988562495,FR +2988562496,2988562527,GB +2988562528,2988562559,FR +2988562560,2988562575,PL +2988562576,2988562599,FR +2988562600,2988562607,DE +2988562608,2988562615,PT +2988562616,2988562843,FR +2988562844,2988562847,DE 2988562848,2988562863,GB -2988562864,2988564143,FR +2988562864,2988563015,FR +2988563016,2988563023,IE +2988563024,2988563075,FR +2988563076,2988563079,ES +2988563080,2988563135,FR +2988563136,2988563151,PT +2988563152,2988563167,FR +2988563168,2988563183,GB +2988563184,2988563199,FR +2988563200,2988563263,PT +2988563264,2988564011,FR +2988564012,2988564015,IE +2988564016,2988564019,ES +2988564020,2988564023,FR +2988564024,2988564027,IE +2988564028,2988564143,FR 2988564144,2988564159,ES -2988564160,2988572671,FR +2988564160,2988564187,FR +2988564188,2988564191,PL +2988564192,2988564199,FR +2988564200,2988564207,IT +2988564208,2988564471,FR +2988564472,2988564479,CZ +2988564480,2988572671,FR 2988572672,2988703743,RU 2988703744,2988834815,PL 2988834816,2988965887,CH @@ -48122,10 +53836,12 @@ 2990211072,2990276607,GR 2990276608,2990342143,ES 2990342144,2990407679,KW -2990407680,2990421728,US +2990407680,2990407935,US +2990407936,2990408191,GB +2990408192,2990421728,US 2990421729,2990421729,GB 2990421730,2990440447,US -2990440448,2990473215,NL +2990440448,2990473215,GB 2990473216,2990475674,DE 2990475675,2990475675,HR 2990475676,2990500113,DE @@ -48143,7 +53859,9 @@ 2991161344,2991177727,FR 2991177728,2991179503,SE 2991179504,2991179507,ES -2991179508,2991194111,SE +2991179508,2991191807,SE +2991191808,2991192063,FI +2991192064,2991194111,SE 2991194112,2991210495,NO 2991210496,2991243263,RU 2991243264,2991259647,UA @@ -48305,28 +54023,12 @@ 2997878784,2998140927,RU 2998140928,2998403071,PL 2998403072,2998665215,RU -2998665216,2998710451,AT -2998710452,2998710455,DE -2998710456,2998712975,AT -2998712976,2998712979,DE -2998712980,2998720227,AT -2998720228,2998720231,CZ -2998720232,2998820735,AT -2998820736,2998820863,CZ -2998820864,2998834559,AT -2998834560,2998834687,HU -2998834688,2998841343,AT -2998841344,2998841599,DE -2998841600,2998875391,AT -2998875392,2998875519,CZ -2998875520,2998927359,AT -2998927360,2998991615,CH -2998991616,2998991871,DE -2998991872,2999026943,CH -2999026944,2999027071,DE -2999027072,2999380223,CH -2999380224,2999380479,DE -2999380480,2999451647,CH +2998665216,2998679039,AT +2998679040,2998679295,SI +2998679296,2998902527,AT +2998902528,2998902783,SI +2998902784,2998927359,AT +2998927360,2999451647,CH 2999451648,2999713791,DE 2999713792,2999975935,RU 2999975936,2999984127,FR @@ -48365,8 +54067,7 @@ 3000246272,3000248319,RO 3000248320,3000252415,PL 3000252416,3000254463,RO -3000254464,3000256511,UA -3000256512,3000260607,RU +3000254464,3000260607,RU 3000260608,3000262655,RS 3000262656,3000266751,UA 3000266752,3000268799,DE @@ -48537,7 +54238,9 @@ 3001901056,3001905151,FR 3001905152,3001909247,GB 3001909248,3001917439,ES -3001917440,3001921535,GB +3001917440,3001919743,GB +3001919744,3001919999,AU +3001920000,3001921535,GB 3001921536,3001929727,RU 3001929728,3001933823,RS 3001933824,3001937919,ES @@ -48720,7 +54423,8 @@ 3003076608,3003078143,GB 3003078144,3003078151,US 3003078152,3003078155,IN -3003078156,3003080703,GB +3003078156,3003078399,US +3003078400,3003080703,GB 3003080704,3003082751,FR 3003082752,3003084799,ES 3003086848,3003088895,RU @@ -48762,29 +54466,43 @@ 3003129088,3003129343,CO 3003129344,3003129599,BO 3003129600,3003129855,HN -3003129856,3003138559,CR +3003129856,3003130111,MX +3003130112,3003130367,CR +3003130368,3003130623,MX +3003130624,3003131647,CR +3003131648,3003133183,MX +3003133184,3003133695,CR +3003133696,3003134719,MX +3003134720,3003134975,CR +3003134976,3003135487,MX +3003135488,3003136255,CR +3003136256,3003137279,MX +3003137280,3003137791,CR +3003137792,3003138047,MX +3003138048,3003138559,HN 3003138560,3003139071,PA -3003139072,3003139583,CR +3003139072,3003139583,HN 3003139584,3003140351,PA -3003140352,3003140607,CR +3003140352,3003140607,HN 3003140608,3003141375,PA -3003141376,3003141631,CR +3003141376,3003141631,HN 3003141632,3003141887,PA -3003141888,3003143679,CR +3003141888,3003143679,HN 3003143680,3003144447,PA -3003144448,3003146239,CR +3003144448,3003146239,HN 3003146240,3003146495,PA -3003146496,3003147007,CR +3003146496,3003147007,GT 3003147008,3003147263,PA -3003147264,3003148031,CR +3003147264,3003148031,GT 3003148032,3003148543,PA -3003148544,3003148799,CR +3003148544,3003148799,GT 3003148800,3003149311,PA -3003149312,3003151871,CR +3003149312,3003150335,GT +3003150336,3003151871,SV 3003151872,3003152383,PA -3003152384,3003152639,CR +3003152384,3003152639,SV 3003152640,3003152895,PA -3003152896,3003154431,CR +3003152896,3003154431,SV 3003154432,3003154687,CL 3003154688,3003154943,EC 3003154944,3003159039,AR @@ -48833,33 +54551,39 @@ 3005888000,3005888255,CO 3005888256,3005890047,PA 3005890048,3005890303,CO -3005890304,3005891071,PA -3005891072,3005891327,CO +3005890304,3005890559,PA +3005890560,3005891327,CO 3005891328,3005893119,PA 3005893120,3005893631,CO 3005893632,3005893887,PA 3005893888,3005894143,CO -3005894144,3005894655,PA -3005894656,3005894911,CO +3005894144,3005894399,PA +3005894400,3005894911,CO 3005894912,3005896703,PA 3005896704,3005896959,CO -3005896960,3005899263,PA -3005899264,3005899519,CO -3005899520,3005900031,PA -3005900032,3005900287,CO -3005900288,3005902591,PA +3005896960,3005897215,PA +3005897216,3005897727,CO +3005897728,3005897983,PA +3005897984,3005898239,CO +3005898240,3005899007,PA +3005899008,3005900287,CO +3005900288,3005901055,PA +3005901056,3005901311,CO +3005901312,3005902591,PA 3005902592,3005902847,CO -3005902848,3005903359,PA -3005903360,3005903871,CO -3005903872,3005905151,PA -3005905152,3005905407,CO -3005905408,3005905919,PA -3005905920,3005906943,CO +3005902848,3005903103,PA +3005903104,3005903871,CO +3005903872,3005904895,PA +3005904896,3005905407,CO +3005905408,3005905663,PA +3005905664,3005906943,CO 3005906944,3005911039,PA 3005911040,3005911295,CO 3005911296,3005911551,PA 3005911552,3005911807,CO -3005911808,3005913343,PA +3005911808,3005912831,PA +3005912832,3005913087,CO +3005913088,3005913343,PA 3005913344,3005913599,CO 3005913600,3005913855,PA 3005913856,3005914623,CO @@ -48895,8 +54619,8 @@ 3006279168,3006279423,NI 3006279424,3006283519,PA 3006283520,3006283775,NI -3006283776,3006284287,CR -3006284288,3006284799,PA +3006283776,3006284543,CR +3006284544,3006284799,PA 3006284800,3006285055,CR 3006285056,3006285311,PA 3006285312,3006285567,CR @@ -48904,33 +54628,35 @@ 3006285824,3006286079,CR 3006286080,3006287103,PA 3006287104,3006287359,CR -3006287360,3006288639,PA +3006287360,3006287871,PA +3006287872,3006288127,CR +3006288128,3006288639,PA 3006288640,3006289151,CR -3006289152,3006289663,PA -3006289664,3006289919,CR -3006289920,3006291455,PA -3006291456,3006291711,CR -3006291712,3006292991,PA +3006289152,3006289407,PA +3006289408,3006289919,CR +3006289920,3006291199,PA +3006291200,3006291967,CR +3006291968,3006292991,PA 3006292992,3006293247,CR 3006293248,3006296575,PA 3006296576,3006296831,CR 3006296832,3006308351,PA 3006308352,3006308863,CR 3006308864,3006310143,PA -3006310144,3006310399,CR -3006310400,3006311167,PA +3006310144,3006310655,CR +3006310656,3006311167,PA 3006311168,3006311423,CR 3006311424,3006311679,PA -3006311680,3006312191,CR -3006312192,3006312703,PA -3006312704,3006312959,CR -3006312960,3006313727,PA -3006313728,3006313983,CR -3006313984,3006314239,PA -3006314240,3006314495,CR +3006311680,3006312447,CR +3006312448,3006312703,PA +3006312704,3006313215,CR +3006313216,3006313727,PA +3006313728,3006314495,CR 3006314496,3006315263,PA 3006315264,3006315775,CR -3006315776,3006320895,PA +3006315776,3006316031,PA +3006316032,3006316287,CR +3006316288,3006320895,PA 3006320896,3006321151,CR 3006321152,3006321663,PA 3006321664,3006322175,CR @@ -48938,9 +54664,11 @@ 3006322432,3006323199,CR 3006323200,3006323455,PA 3006323456,3006323711,CR -3006323712,3006329343,PA -3006329344,3006329855,NI -3006329856,3006330367,PA +3006323712,3006328831,PA +3006328832,3006329087,NI +3006329088,3006329343,PA +3006329344,3006330111,NI +3006330112,3006330367,PA 3006330368,3006330623,NI 3006330624,3006330879,PA 3006330880,3006331903,CR @@ -48971,11 +54699,13 @@ 3006513152,3006513663,PA 3006513664,3006514431,CR 3006514432,3006514687,PA -3006514688,3006517503,CR +3006514688,3006516479,CR +3006516480,3006516735,PA +3006516736,3006517503,CR 3006517504,3006517759,NI 3006517760,3006518527,CR -3006518528,3006519039,NI -3006519040,3006521343,CR +3006518528,3006519295,NI +3006519296,3006521343,CR 3006521344,3006528511,AR 3006528512,3006529535,BZ 3006529536,3006660607,DO @@ -49014,85 +54744,225 @@ 3007123456,3007143935,AR 3007143936,3007148031,CL 3007148032,3007152127,CO -3007152128,3007152383,CL +3007152128,3007152143,CL +3007152144,3007152159,DE +3007152160,3007152383,CL 3007152384,3007152639,US -3007152640,3007152895,CL +3007152640,3007152655,CL +3007152656,3007152671,DE +3007152672,3007152895,CL 3007152896,3007153151,US -3007153152,3007153407,CL -3007153408,3007153663,US -3007153664,3007153919,CL +3007153152,3007153167,CL +3007153168,3007153183,DE +3007153184,3007153279,CL +3007153280,3007153663,US +3007153664,3007153679,CL +3007153680,3007153695,DE +3007153696,3007153919,CL 3007153920,3007154175,US -3007154176,3007154431,CL -3007154432,3007154687,US -3007154688,3007154943,CL +3007154176,3007154191,CL +3007154192,3007154207,DE +3007154208,3007154303,CL +3007154304,3007154687,US +3007154688,3007154703,CL +3007154704,3007154719,DE +3007154720,3007154943,CL 3007154944,3007155199,US -3007155200,3007155455,CL +3007155200,3007155215,CL +3007155216,3007155231,DE +3007155232,3007155327,CL +3007155328,3007155455,US 3007155456,3007155711,GB -3007155712,3007155967,CL +3007155712,3007155727,CL +3007155728,3007155743,DE +3007155744,3007155967,CL 3007155968,3007156223,DE -3007156224,3007156479,CL +3007156224,3007156239,CL +3007156240,3007156255,DE +3007156256,3007156351,CL +3007156352,3007156479,US 3007156480,3007156495,ES -3007156496,3007156991,CL +3007156496,3007156511,DE +3007156512,3007156543,CL +3007156544,3007156607,GB +3007156608,3007156751,CL +3007156752,3007156767,DE +3007156768,3007156991,CL 3007156992,3007157007,HR -3007157008,3007157503,CL +3007157008,3007157055,CL +3007157056,3007157119,GB +3007157120,3007157247,DE +3007157248,3007157263,CL +3007157264,3007157279,DE +3007157280,3007157375,CL +3007157376,3007157503,US 3007157504,3007157519,IE -3007157520,3007158015,CL +3007157520,3007157567,CL +3007157568,3007157631,GB +3007157632,3007157759,US +3007157760,3007157775,CL +3007157776,3007157791,DE +3007157792,3007158015,CL 3007158016,3007158031,BE -3007158032,3007158527,CL +3007158032,3007158079,CL +3007158080,3007158143,GB +3007158144,3007158271,DE +3007158272,3007158287,CL +3007158288,3007158303,DE +3007158304,3007158399,CL +3007158400,3007158527,US 3007158528,3007158543,GB -3007158544,3007159039,CL +3007158544,3007158591,CL +3007158592,3007158655,GB +3007158656,3007158783,DE +3007158784,3007158799,CL +3007158800,3007158815,DE +3007158816,3007159039,CL 3007159040,3007159055,GB -3007159056,3007159551,CL +3007159056,3007159103,CL +3007159104,3007159167,GB +3007159168,3007159295,US +3007159296,3007159311,CL +3007159312,3007159327,DE +3007159328,3007159423,CL +3007159424,3007159551,US 3007159552,3007159567,RU -3007159568,3007160063,CL +3007159568,3007159615,CL +3007159616,3007159679,GB +3007159680,3007159807,DE +3007159808,3007159823,CL +3007159824,3007159839,DE +3007159840,3007160063,CL 3007160064,3007160079,HR -3007160080,3007160575,CL +3007160080,3007160127,CL +3007160128,3007160191,GB +3007160192,3007160319,DE +3007160320,3007160335,CL +3007160336,3007160351,DE +3007160352,3007160447,CL +3007160448,3007160575,US 3007160576,3007160591,IE 3007160592,3007160607,US -3007160608,3007161087,CL +3007160608,3007160703,CL +3007160704,3007160831,US +3007160832,3007160847,CL +3007160848,3007160863,DE +3007160864,3007161087,CL 3007161088,3007161103,GB -3007161104,3007161599,CL +3007161104,3007161215,CL +3007161216,3007161343,DE +3007161344,3007161359,CL +3007161360,3007161375,DE +3007161376,3007161471,CL +3007161472,3007161599,US 3007161600,3007161615,GB -3007161616,3007162111,CL +3007161616,3007161727,CL +3007161728,3007161855,DE +3007161856,3007161871,CL +3007161872,3007161887,DE +3007161888,3007162111,CL 3007162112,3007162127,ES -3007162128,3007162623,CL +3007162128,3007162239,CL +3007162240,3007162367,US +3007162368,3007162383,CL +3007162384,3007162399,DE +3007162400,3007162495,CL +3007162496,3007162623,US 3007162624,3007162639,NL -3007162640,3007163135,CL +3007162640,3007162751,CL +3007162752,3007162879,DE +3007162880,3007162895,CL +3007162896,3007162911,DE +3007162912,3007163135,CL 3007163136,3007163151,GB -3007163152,3007163647,CL +3007163152,3007163199,CL +3007163200,3007163263,DE +3007163264,3007163407,CL +3007163408,3007163423,DE +3007163424,3007163519,CL +3007163520,3007163647,US 3007163648,3007163663,ES -3007163664,3007164159,CL +3007163664,3007163711,CL +3007163712,3007163775,DE +3007163776,3007163903,US +3007163904,3007163919,CL +3007163920,3007163935,DE +3007163936,3007164159,CL 3007164160,3007164175,SK -3007164176,3007164671,CL +3007164176,3007164223,CL +3007164224,3007164287,DE +3007164288,3007164431,CL +3007164432,3007164447,DE +3007164448,3007164543,CL +3007164544,3007164671,US 3007164672,3007164687,SE -3007164688,3007165183,CL +3007164688,3007164735,CL +3007164736,3007164799,DE +3007164800,3007164943,CL +3007164944,3007164959,DE +3007164960,3007165183,CL 3007165184,3007165199,GB -3007165200,3007165695,CL +3007165200,3007165247,CL +3007165248,3007165311,DE +3007165312,3007165439,US +3007165440,3007165455,CL +3007165456,3007165471,DE +3007165472,3007165567,CL +3007165568,3007165695,US 3007165696,3007165711,DK -3007165712,3007166207,CL +3007165712,3007165759,CL +3007165760,3007165823,DE +3007165824,3007165967,CL +3007165968,3007165983,DE +3007165984,3007166207,CL 3007166208,3007166223,TR -3007166224,3007166719,CL +3007166224,3007166271,CL +3007166272,3007166335,DE +3007166336,3007166479,CL +3007166480,3007166495,DE +3007166496,3007166591,CL +3007166592,3007166719,US 3007166720,3007166735,GB -3007166736,3007167231,CL +3007166736,3007166751,DE +3007166752,3007166847,CL +3007166848,3007166975,US +3007166976,3007166991,CL +3007166992,3007167007,DE +3007167008,3007167231,CL 3007167232,3007167247,ES -3007167248,3007167743,CL +3007167248,3007167263,DE +3007167264,3007167503,CL +3007167504,3007167519,DE +3007167520,3007167615,CL +3007167616,3007167743,US 3007167744,3007167759,AU -3007167760,3007168255,CL +3007167760,3007167775,DE +3007167776,3007168015,CL +3007168016,3007168031,DE +3007168032,3007168127,CL +3007168128,3007168255,US 3007168256,3007168271,GR -3007168272,3007168511,CL +3007168272,3007168287,DE +3007168288,3007168383,CL +3007168384,3007168511,US 3007168512,3007168767,QA 3007168768,3007169023,CL 3007169024,3007169151,US -3007169152,3007171855,CL +3007169152,3007169279,CL +3007169280,3007169535,US +3007169536,3007170559,CL +3007170560,3007171071,DE +3007171072,3007171855,CL 3007171856,3007171871,US -3007171872,3007175679,CL +3007171872,3007172607,CL +3007172608,3007175679,BR 3007175680,3007175935,GB -3007175936,3007183359,CL +3007175936,3007183359,BR 3007183360,3007183615,AU 3007183616,3007183871,IE 3007183872,3007184127,JO 3007184128,3007184383,KW -3007184384,3007184895,CL +3007184384,3007184895,BR 3007184896,3007250431,AR 3007250432,3007268095,CR 3007268096,3007268607,PA @@ -49118,8 +54988,8 @@ 3007283456,3007283711,PA 3007283712,3007283967,CR 3007283968,3007284223,PA -3007284224,3007286015,CR -3007286016,3007286271,PA +3007284224,3007285759,CR +3007285760,3007286271,PA 3007286272,3007286783,CR 3007286784,3007287295,PA 3007287296,3007287551,CR @@ -49160,7 +55030,9 @@ 3025403904,3025600511,CN 3025600512,3025603071,IN 3025603072,3025603087,HK -3025603088,3025603839,IN +3025603088,3025603103,IN +3025603104,3025603199,HK +3025603200,3025603839,IN 3025603840,3025604095,HK 3025604096,3025604381,IN 3025604382,3025606655,SG @@ -49173,7 +55045,9 @@ 3025608192,3025608203,JP 3025608204,3025610751,IN 3025610752,3025612799,SG -3025612800,3025616895,IN +3025612800,3025612895,IN +3025612896,3025612927,SG +3025612928,3025616895,IN 3025616896,3025617407,SG 3025617408,3025618943,IN 3025618944,3025619487,SG @@ -49191,7 +55065,8 @@ 3025625400,3025625407,TH 3025625408,3025625471,SG 3025625472,3025625503,MY -3025625504,3025625535,IN +3025625504,3025625519,SG +3025625520,3025625535,IN 3025625536,3025625599,CA 3025625600,3025625855,SG 3025625856,3025629439,IN @@ -49205,7 +55080,11 @@ 3025631240,3025631247,AU 3025631248,3025632255,IN 3025632256,3025632271,SG -3025632272,3025633535,IN +3025632272,3025632287,IN +3025632288,3025632351,SG +3025632352,3025632511,IN +3025632512,3025632767,SG +3025632768,3025633535,IN 3025633536,3025633791,HK 3025633792,3025633807,AU 3025633808,3025637151,IN @@ -49224,18 +55103,27 @@ 3025639176,3025639423,IN 3025639424,3025639679,SG 3025639680,3025639935,HK -3025639936,3025640447,IN +3025639936,3025640191,IN +3025640192,3025640447,JP 3025640448,3025640799,MY 3025640800,3025641727,IN 3025641728,3025641743,HK 3025641744,3025641759,IN 3025641760,3025641775,HK -3025641776,3025647103,IN +3025641776,3025641983,IN +3025641984,3025642495,HK +3025642496,3025642751,SG +3025642752,3025647103,IN 3025647104,3025647359,SG 3025647360,3025647615,AU 3025647616,3025647775,IN 3025647776,3025647791,SG -3025647792,3025648079,IN +3025647792,3025647839,IN +3025647840,3025647871,SG +3025647872,3025647903,HK +3025647904,3025647935,IN +3025647936,3025647967,SG +3025647968,3025648079,IN 3025648080,3025648087,SG 3025648088,3025648091,US 3025648092,3025649151,IN @@ -49352,9 +55240,7 @@ 3031695360,3031760895,TH 3031760896,3031826431,AU 3031826432,3031891967,KR -3031891968,3031913983,TH -3031913984,3031914239,SG -3031914240,3031957503,TH +3031891968,3031957503,TH 3031957504,3032252415,CN 3032252416,3032271871,HK 3032271872,3032272895,AU @@ -49452,7 +55338,8 @@ 3035324416,3035326463,JP 3035326464,3035328511,AU 3035332608,3035333631,AU -3035333632,3035334655,HK +3035333632,3035333887,JP +3035333888,3035334655,HK 3035335680,3035337727,JP 3035337728,3035338751,ID 3035338752,3035339007,SG @@ -49479,8 +55366,8 @@ 3039232000,3039297535,EC 3039297536,3039363071,PY 3039363072,3039412223,BZ -3039412224,3039412991,CL -3039412992,3039413247,BR +3039412224,3039412735,CL +3039412736,3039413247,BR 3039413248,3039413503,CL 3039413504,3039414015,BR 3039414016,3039414271,CL @@ -49492,14 +55379,13 @@ 3039416716,3039416735,CL 3039416736,3039416739,US 3039416740,3039416831,CL -3039416832,3039417343,BR -3039417344,3039417855,CL +3039416832,3039417599,BR +3039417600,3039417855,CL 3039417856,3039418111,BR 3039418112,3039418367,CL 3039418368,3039418879,BR 3039418880,3039419135,CL -3039419136,3039420159,BR -3039420160,3039420415,CL +3039419136,3039420415,BR 3039420416,3039428607,AR 3039428608,3039559679,CL 3039559680,3039821823,AR @@ -49631,7 +55517,9 @@ 3050708480,3050708495,FR 3050708496,3050708991,CL 3050708992,3050709007,AT -3050709008,3050709503,CL +3050709008,3050709247,CL +3050709248,3050709375,DE +3050709376,3050709503,CL 3050709504,3050709519,TH 3050709520,3050710015,CL 3050710016,3050710031,ES @@ -49647,7 +55535,11 @@ 3050712576,3050712591,PL 3050712592,3050713087,CL 3050713088,3050713103,LV -3050713104,3050766335,CL +3050713104,3050714367,CL +3050714368,3050714623,GB +3050714624,3050715647,CL +3050715648,3050718719,US +3050718720,3050766335,CL 3050766336,3050766351,NO 3050766352,3050766847,CL 3050766848,3050766863,KR @@ -49697,9 +55589,15 @@ 3050778112,3050778127,KR 3050778128,3050778623,CL 3050778624,3050778639,TR -3050778640,3050831871,CL +3050778640,3050786815,CL +3050786816,3050788863,US +3050788864,3050790911,CL +3050790912,3050807295,US +3050807296,3050831871,CL 3050831872,3051356159,BR -3051356160,3051373055,CR +3051356160,3051372543,CR +3051372544,3051372799,PA +3051372800,3051373055,CR 3051373056,3051373311,PA 3051373312,3051374335,CR 3051374336,3051374591,PA @@ -49899,7 +55797,6 @@ 3068986368,3068987391,AU 3068987392,3068990463,IN 3068990464,3068991487,VN -3068991488,3068991743,IN 3068993536,3069018111,KR 3069018112,3069034495,IN 3069034496,3069050879,KR @@ -49974,7 +55871,8 @@ 3078619136,3081437183,CN 3081437184,3081502719,MY 3081502720,3081764863,CN -3081764864,3081846783,JP +3081764864,3081844735,JP +3081844736,3081846783,AU 3081846784,3081847807,TW 3081847808,3081848831,KR 3081848832,3081850879,SG @@ -49991,7 +55889,9 @@ 3082158080,3082166271,CN 3082166272,3082174463,JP 3082174464,3082178559,BZ -3082178560,3082179583,HK +3082178560,3082178823,HK +3082178824,3082178824,SG +3082178825,3082179583,HK 3082179584,3082181631,IN 3082181632,3082182655,ID 3082182656,3082190847,LA @@ -50001,9 +55901,7 @@ 3088605184,3088609279,NL 3088609280,3088629759,US 3088629760,3088633855,NL -3088633856,3088924671,US -3088924672,3088925695,NL -3088925696,3088998399,US +3088633856,3088998399,US 3088998400,3089002495,NL 3089002496,3089027071,US 3089027072,3089031167,NL @@ -50019,9 +55917,7 @@ 3091955712,3091959807,CA 3091959808,3091976191,US 3091976192,3091980287,CA -3091980288,3092569343,US -3092569344,3092569599,AU -3092569600,3092578303,US +3091980288,3092578303,US 3092578304,3092582399,NL 3092582400,3092615167,US 3092615168,3092619263,NL @@ -50107,11 +56003,11 @@ 3098263552,3098271743,CA 3098271744,3098278847,US 3098278848,3098278911,CA -3098278912,3098411007,US +3098278912,3098350383,US +3098350384,3098350391,BR +3098350392,3098411007,US 3098411008,3098415103,PK -3098415104,3098439679,US -3098439680,3098443775,CA -3098443776,3098476543,US +3098415104,3098476543,US 3098476544,3098492927,CA 3098492928,3098494719,US 3098494720,3098495743,CA @@ -50145,6 +56041,8 @@ 3103857408,3103857663,RS 3103857664,3103857919,FR 3103857920,3103858175,PL +3103858176,3103858431,BG +3103858432,3103858687,AT 3103916032,3103917055,CH 3103917056,3103918079,IT 3103918080,3103919103,DE @@ -50206,8 +56104,8 @@ 3103974400,3103974911,SE 3103974912,3103974919,LT 3103974920,3103974943,SE -3103974944,3103975039,LT -3103975040,3103975423,SE +3103974944,3103975071,LT +3103975072,3103975423,SE 3103975424,3103976447,SA 3103976448,3103977471,GB 3103977472,3103978495,NL @@ -50239,7 +56137,9 @@ 3104009216,3104010239,IT 3104010240,3104011263,PL 3104011264,3104012287,ES -3104012288,3104013311,BH +3104012288,3104012799,BH +3104012800,3104013055,SA +3104013056,3104013311,BH 3104013312,3104014335,IR 3104014336,3104015359,FR 3104015360,3104016383,SE @@ -50650,7 +56550,15 @@ 3104451584,3104452607,RU 3104452608,3104453631,NL 3104453632,3104454655,CH -3104454656,3104455679,NL +3104454656,3104454660,NL +3104454661,3104454782,SE +3104454783,3104455050,NL +3104455051,3104455082,SE +3104455083,3104455146,NL +3104455147,3104455162,SE +3104455163,3104455294,NL +3104455295,3104455423,SE +3104455424,3104455679,NL 3104455680,3104456703,RU 3104456704,3104457727,IL 3104457728,3104458751,DE @@ -50994,7 +56902,6 @@ 3104826368,3104827391,CH 3104827392,3104828415,PL 3104828416,3104829439,AT -3104829440,3104830463,DK 3104830464,3104831487,DE 3104831488,3104832511,NL 3104832512,3104833535,CZ @@ -51014,7 +56921,9 @@ 3104848896,3104849919,DE 3104849920,3104850943,RU 3104850944,3104851199,JE -3104851200,3104851967,GB +3104851200,3104851455,GB +3104851456,3104851711,GG +3104851712,3104851967,GB 3104851968,3104852991,DE 3104852992,3104854015,AT 3104854016,3104855039,GI @@ -51420,7 +57329,6 @@ 3105289216,3105290239,AT 3105290240,3105291263,TR 3105291264,3105292287,CH -3105292288,3105293311,DE 3105293312,3105294335,GB 3105294336,3105295359,RU 3105295360,3105296383,PL @@ -51458,6 +57366,7 @@ 3105331200,3105332223,IQ 3105332224,3105333247,DE 3105333248,3105334271,LV +3105334272,3105335295,UA 3105335296,3105336319,GR 3105336320,3105337343,IL 3105337344,3105339391,GB @@ -51507,8 +57416,7 @@ 3105386496,3105387519,RU 3105387520,3105388543,IT 3105388544,3105389567,GB -3105389568,3105389823,LB -3105389824,3105390591,TR +3105389568,3105390591,TR 3105390592,3105391615,JO 3105391616,3105392639,NL 3105392640,3105393663,IR @@ -51556,7 +57464,9 @@ 3105441792,3105442815,IT 3105442816,3105443839,FI 3105443840,3105444863,NL -3105444864,3105445887,GB +3105444864,3105445119,GB +3105445120,3105445631,US +3105445632,3105445887,GB 3105445888,3105446911,RU 3105446912,3105447935,CH 3105447936,3105448959,DE @@ -51640,9 +57550,7 @@ 3105532928,3105533951,RS 3105533952,3105534975,BA 3105534976,3105535231,GB -3105535232,3105535773,NO -3105535774,3105535774,RU -3105535775,3105535999,NO +3105535232,3105535999,NO 3105536000,3105537023,AZ 3105537024,3105538047,AT 3105538048,3105539071,RU @@ -51720,7 +57628,10 @@ 3105614848,3105615871,NL 3105615872,3105616895,SE 3105616896,3105617919,GB -3105617920,3105618943,NL +3105617920,3105617953,US +3105617954,3105617954,NL +3105617955,3105618175,US +3105618176,3105618943,NL 3105618944,3105619967,DE 3105619968,3105620991,TR 3105620992,3105622015,DE @@ -51763,7 +57674,8 @@ 3105655808,3105656831,ES 3105656832,3105657855,SK 3105657856,3105658879,NL -3105658880,3105659903,IL +3105658880,3105659135,GB +3105659136,3105659903,IL 3105659904,3105660927,DE 3105660928,3105661951,TR 3105661952,3105662975,GB @@ -51771,7 +57683,13 @@ 3105664000,3105665023,DE 3105665024,3105666047,PL 3105667072,3105668095,DE -3105668096,3105669119,NL +3105668096,3105668131,US +3105668132,3105668159,NL +3105668160,3105668191,US +3105668192,3105668351,NL +3105668352,3105668863,US +3105668864,3105668879,NL +3105668880,3105669119,US 3105669120,3105670143,CZ 3105670144,3105671167,IE 3105671168,3105673215,GB @@ -52018,9 +57936,9 @@ 3105933344,3105933359,IT 3105933360,3105933463,GB 3105933464,3105933471,IT -3105933472,3105934127,GB -3105934128,3105934135,IT -3105934136,3105934215,GB +3105933472,3105933871,GB +3105933872,3105933879,IT +3105933880,3105934215,GB 3105934216,3105934223,IT 3105934224,3105934231,GB 3105934232,3105934239,IT @@ -52033,7 +57951,9 @@ 3105939456,3105940479,BY 3105940480,3105941503,GR 3105941504,3105942527,NL -3105942528,3105943551,LU +3105942528,3105943039,LU +3105943040,3105943295,BE +3105943296,3105943551,LU 3105943552,3105944575,NL 3105944576,3105945599,DE 3105945600,3105946623,RU @@ -52163,7 +58083,9 @@ 3106067456,3106068479,DE 3106068480,3106070527,NL 3106070528,3106071551,UA -3106071552,3106072575,BH +3106071552,3106072063,BH +3106072064,3106072319,US +3106072320,3106072575,BH 3106072576,3106073599,GB 3106073600,3106074623,PL 3106074624,3106076671,RU @@ -52290,7 +58212,8 @@ 3106202624,3106203647,RU 3106203648,3106204671,GR 3106204672,3106205695,MT -3106205696,3106206719,NO +3106205696,3106205951,SE +3106205952,3106206719,NO 3106206720,3106207743,GE 3106207744,3106208767,GB 3106208768,3106209791,RO @@ -52327,9 +58250,11 @@ 3106239488,3106240511,IT 3106240512,3106241535,IE 3106241536,3106242559,NL +3106242560,3106243583,RU 3106243584,3106244607,FI 3106244608,3106245631,DE -3106245632,3106246655,SE +3106245632,3106245887,DK +3106245888,3106246655,SE 3106246656,3106247679,DE 3106247680,3106248703,NO 3106248704,3106249727,DE @@ -52355,7 +58280,7 @@ 3106271232,3106272255,SK 3106272256,3106273279,NL 3106273280,3106274303,DE -3106274304,3106275327,FR +3106274304,3106275327,CH 3106275328,3106276351,FI 3106276352,3106277375,AT 3106277376,3106278399,DE @@ -52404,7 +58329,9 @@ 3106324480,3106325503,AL 3106325504,3106326527,FR 3106326528,3106326783,NL -3106326784,3106327551,IL +3106326784,3106327039,US +3106327040,3106327295,GB +3106327296,3106327551,NL 3106327552,3106328575,RU 3106328576,3106329599,UA 3106329600,3106330623,IQ @@ -52477,7 +58404,7 @@ 3106403328,3106405375,GB 3106405376,3106406399,DE 3106406400,3106407423,RU -3106407424,3106409471,GB +3106408448,3106409471,GB 3106409472,3106411519,IT 3106411520,3106412543,HU 3106412544,3106413567,GB @@ -52706,12 +58633,14 @@ 3106656256,3106657279,GB 3106657280,3106658303,NL 3106658304,3106659327,GB -3106659328,3106660351,NL +3106659328,3106660351,CZ 3106660352,3106661375,UA 3106661376,3106662399,TR 3106662400,3106663423,IE 3106663424,3106664447,UA -3106664448,3106666495,FR +3106664448,3106665727,FR +3106665728,3106665983,CH +3106665984,3106666495,FR 3106666496,3106667519,UA 3106667520,3106668543,ES 3106668544,3106669567,RU @@ -52850,7 +58779,10 @@ 3106817024,3106818047,IT 3106818048,3106819071,IE 3106819072,3106820095,BE -3106820096,3106824191,CH +3106820096,3106821631,CH +3106821632,3106821887,HK +3106821888,3106822143,RU +3106822144,3106824191,CH 3106824192,3106825215,RU 3106825216,3106826239,IT 3106826240,3106827263,PL @@ -52901,12 +58833,12 @@ 3106872320,3106873343,BE 3106873344,3106874367,ES 3106874368,3106875391,RU -3106875392,3106876415,SE +3106875392,3106876415,NO 3106876416,3106877439,CZ 3106877440,3106878463,IR 3106878464,3106879487,RU 3106879488,3106880511,MK -3106880512,3106881535,GB +3106880512,3106881535,NL 3106881536,3106882559,PL 3106882560,3106883583,BE 3106883584,3106884607,GB @@ -52966,7 +58898,7 @@ 3106940928,3106941951,HU 3106941952,3106943999,FR 3106944000,3106945023,IT -3106945024,3106946047,DE +3106945024,3106946047,NL 3106946048,3106947071,GB 3106947072,3106948095,AE 3106948096,3106949119,NL @@ -53367,6 +59299,7 @@ 3107374261,3107374280,US 3107374321,3107374332,MX 3107374334,3107374335,MX +3107374337,3107374340,US 3107375104,3107376127,GB 3107376128,3107377151,NL 3107377152,3107378175,AT @@ -53479,8 +59412,12 @@ 3107496064,3107496191,FR 3107496192,3107496255,DE 3107496256,3107496287,BS -3107496288,3107496319,FR -3107496320,3107496703,NL +3107496288,3107496319,VG +3107496320,3107496447,NL +3107496448,3107496463,CL +3107496464,3107496479,ES +3107496480,3107496511,GB +3107496512,3107496703,NL 3107496704,3107496719,PE 3107496720,3107496735,KP 3107496736,3107496751,FJ @@ -53492,7 +59429,8 @@ 3107496832,3107496847,BR 3107496848,3107496863,KP 3107496864,3107496879,HK -3107496880,3107496911,IS +3107496880,3107496895,IS +3107496896,3107496911,US 3107496912,3107496927,PL 3107496928,3107496959,FR 3107496960,3107497983,DK @@ -53509,7 +59447,8 @@ 3107508224,3107509247,PL 3107509248,3107510271,SE 3107510272,3107511295,IT -3107511296,3107512319,SI +3107511296,3107511807,RS +3107511808,3107512319,SI 3107512320,3107513343,NL 3107513344,3107514367,DE 3107514368,3107515391,US @@ -53538,7 +59477,7 @@ 3107540992,3107542015,RO 3107542016,3107543039,SE 3107543040,3107544063,DE -3107544064,3107545087,IR +3107544064,3107545087,GB 3107545088,3107546111,NL 3107546112,3107547135,GB 3107547136,3107548159,SE @@ -53923,7 +59862,7 @@ 3107961856,3107962879,RU 3107962880,3107963903,FR 3107963904,3107964927,RU -3107964928,3107965951,ES +3107964928,3107965951,PL 3107965952,3107966975,DE 3107966976,3107967999,NO 3107968000,3107969023,DE @@ -53951,7 +59890,7 @@ 3107991552,3107992575,AT 3107992576,3107993599,RU 3107993600,3107994623,RO -3107994624,3107995647,DE +3107994624,3107995647,AT 3107995648,3107996671,BE 3107996672,3107997695,IT 3107997696,3107998719,SE @@ -53962,7 +59901,7 @@ 3108002816,3108003839,RO 3108003840,3108004863,DE 3108004864,3108005887,RU -3108005888,3108006911,RO +3108005888,3108006911,LT 3108006912,3108007935,NL 3108007936,3108008959,DE 3108008960,3108009983,CH @@ -54039,13 +59978,14 @@ 3108085760,3108086783,LV 3108086784,3108087807,GB 3108087808,3108088831,CH -3108088832,3108089855,NL +3108088832,3108089855,RU 3108089856,3108090879,SE 3108090880,3108091903,BE 3108091904,3108092927,ES 3108092928,3108093951,SE 3108093952,3108095999,DE -3108096000,3108097023,RU +3108096000,3108096767,RU +3108096768,3108097023,ES 3108097024,3108098047,TR 3108098048,3108099071,DE 3108099072,3108100095,NL @@ -54061,10 +60001,571 @@ 3108109312,3108110335,IQ 3108110336,3108111359,DK 3108111360,3108112383,GB -3108112384,3108113407,UA +3108112384,3108113407,US 3108113408,3108114431,RU 3108114432,3108115455,AE 3108115456,3108116479,GB +3108116480,3108117503,IT +3108117504,3108118527,RU +3108118528,3108119551,GB +3108119552,3108120575,CZ +3108120576,3108122623,ES +3108122624,3108123647,AT +3108123648,3108124671,HU +3108124672,3108125695,ES +3108125696,3108126719,CH +3108126720,3108127743,DE +3108127744,3108128767,BY +3108128768,3108129791,ES +3108129792,3108130815,DE +3108130816,3108131839,NL +3108131840,3108132863,RU +3108132864,3108133887,GB +3108133888,3108134911,NL +3108134912,3108135935,LU +3108135936,3108136959,FR +3108136960,3108137983,NL +3108137984,3108139007,CH +3108139008,3108141055,GB +3108141056,3108142079,PL +3108142080,3108143103,TR +3108143104,3108144127,AL +3108144128,3108145151,DE +3108145152,3108146175,RO +3108146176,3108147199,NL +3108147200,3108148223,RU +3108148224,3108149247,SI +3108149248,3108150271,FR +3108150272,3108151295,CH +3108151296,3108152319,CY +3108152320,3108153343,GB +3108153344,3108154367,NL +3108154368,3108155391,ES +3108155392,3108156415,DE +3108156416,3108157439,GB +3108157440,3108158463,DK +3108158464,3108159487,CZ +3108159488,3108161535,DE +3108161536,3108162559,SK +3108162560,3108164607,GB +3108164608,3108165631,PL +3108165632,3108166655,RU +3108166656,3108167679,DE +3108167680,3108169727,IR +3108169728,3108170751,FR +3108170752,3108171775,DE +3108171776,3108172799,GB +3108172800,3108173823,DE +3108173824,3108174847,NL +3108174848,3108175871,KG +3108175872,3108176895,UA +3108176896,3108177919,NL +3108177920,3108178943,PL +3108178944,3108179967,IR +3108179968,3108180991,NO +3108180992,3108182015,IE +3108182016,3108183039,DE +3108183040,3108184063,ES +3108184064,3108185087,TR +3108185088,3108186111,DE +3108186112,3108187135,NO +3108187136,3108188159,NL +3108188160,3108189183,GB +3108189184,3108190207,RU +3108191232,3108193279,NL +3108193280,3108194303,PL +3108194304,3108195327,FR +3108195328,3108196351,GB +3108196352,3108197375,FI +3108197376,3108198399,IS +3108198400,3108199423,FR +3108199424,3108200447,RU +3108200448,3108201471,ES +3108201472,3108202495,IR +3108202496,3108203519,ES +3108203520,3108204543,AT +3108204544,3108205567,ES +3108205568,3108206591,NO +3108206592,3108208639,TR +3108208640,3108209663,DK +3108209664,3108210687,CZ +3108210688,3108211711,BR +3108211712,3108212735,GB +3108212736,3108213759,FR +3108213760,3108214783,GB +3108214784,3108215807,FR +3108215808,3108216831,DE +3108216832,3108217855,RU +3108217856,3108218879,GB +3108218880,3108219903,RU +3108219904,3108220927,AT +3108220928,3108221951,AL +3108221952,3108222975,IS +3108222976,3108223999,GB +3108224000,3108225023,CZ +3108225024,3108227071,CH +3108227072,3108228095,NL +3108228096,3108229119,TR +3108229120,3108230143,ES +3108230144,3108231167,IR +3108231168,3108232191,PL +3108232192,3108233215,DE +3108233216,3108234239,NL +3108234240,3108235263,AT +3108235264,3108236287,GB +3108236288,3108237311,IT +3108237312,3108238335,LT +3108238336,3108239359,RU +3108239360,3108240383,GB +3108240384,3108241407,CZ +3108241408,3108242431,GB +3108242432,3108243455,AT +3108243456,3108244479,GE +3108244480,3108245503,PL +3108245504,3108246527,UA +3108246528,3108247551,RU +3108247552,3108248575,PL +3108248576,3108249599,CZ +3108249600,3108250623,CH +3108250624,3108251647,LT +3108251648,3108252671,DE +3108252672,3108253695,LU +3108253696,3108254719,ME +3108254720,3108255743,CH +3108255744,3108256767,FI +3108256768,3108257791,RS +3108257792,3108258815,CH +3108258816,3108259839,CZ +3108259840,3108260863,HU +3108260864,3108261887,DE +3108261888,3108262911,AE +3108262912,3108263935,GB +3108263936,3108264959,NL +3108264960,3108265983,RU +3108265984,3108267007,NL +3108267008,3108268031,RU +3108268032,3108269055,GB +3108269056,3108270079,ES +3108270080,3108271103,GB +3108271104,3108272127,RU +3108272128,3108273151,RO +3108273152,3108274175,DE +3108274176,3108275199,CY +3108275200,3108276223,HR +3108276224,3108277247,DE +3108277248,3108278271,GB +3108278272,3108279295,RU +3108279296,3108280319,FR +3108280320,3108281343,RU +3108281344,3108282367,CZ +3108282368,3108283391,NL +3108283392,3108284415,CZ +3108284416,3108285439,NO +3108285440,3108286463,NL +3108286464,3108287487,IT +3108287488,3108288511,NL +3108288512,3108289535,RU +3108289536,3108290559,RO +3108290560,3108291583,IT +3108291584,3108292607,NL +3108292608,3108293631,GB +3108293632,3108294655,CH +3108294656,3108295679,EE +3108295680,3108297727,CZ +3108297728,3108298751,TR +3108298752,3108300799,FR +3108300800,3108301823,GB +3108301824,3108302847,CH +3108302848,3108303871,NL +3108303872,3108304895,RU +3108304896,3108305919,GB +3108305920,3108306943,IE +3108306944,3108307967,PL +3108307968,3108308991,IQ +3108308992,3108310015,FR +3108310016,3108312063,GB +3108312064,3108313087,PL +3108313088,3108314111,LV +3108314112,3108315135,BA +3108315136,3108316159,NL +3108316160,3108317183,FI +3108317184,3108318207,CH +3108318208,3108319231,SE +3108319232,3108320255,SK +3108320256,3108321279,FR +3108321280,3108322303,RO +3108322304,3108323327,NL +3108323328,3108324351,GB +3108324352,3108325375,CZ +3108325376,3108326399,FI +3108326400,3108327423,FR +3108327424,3108328447,RU +3108328448,3108329471,GB +3108329472,3108330495,NL +3108330496,3108331519,CH +3108331520,3108332543,HU +3108332544,3108333567,NL +3108333568,3108334591,SK +3108334592,3108335615,IR +3108335616,3108336639,NL +3108336640,3108337663,GB +3108337664,3108338687,IR +3108338688,3108339711,RU +3108339712,3108340735,NL +3108340736,3108341759,RU +3108341760,3108342783,CH +3108342784,3108343807,FI +3108343808,3108344831,GB +3108344832,3108345855,SI +3108345856,3108346879,UA +3108346880,3108347903,NL +3108347904,3108348927,AT +3108348928,3108349951,BE +3108349952,3108350975,SE +3108350976,3108351999,GE +3108352000,3108354047,DE +3108354048,3108355071,TM +3108355072,3108356095,IT +3108356096,3108358143,PL +3108358144,3108359167,RO +3108359168,3108360191,NL +3108360192,3108361215,RU +3108361216,3108362239,IE +3108362240,3108363263,LU +3108363264,3108364287,RU +3108364288,3108365311,LU +3108365312,3108366335,FR +3108366336,3108367359,NL +3108367360,3108368383,AT +3108368384,3108369407,RO +3108369408,3108370431,BE +3108370432,3108371455,FR +3108371456,3108372479,ES +3108372480,3108373503,SK +3108373504,3108374527,NL +3108374528,3108375551,GB +3108375552,3108376575,BY +3108376576,3108377599,UA +3108377600,3108378623,DE +3108378624,3108379647,CZ +3108379648,3108380671,IE +3108380672,3108381695,GB +3108381696,3108382719,PL +3108382720,3108383743,CH +3108383744,3108384767,BE +3108384768,3108385791,CH +3108385792,3108386815,GE +3108386816,3108387839,GB +3108387840,3108388863,IQ +3108388864,3108389887,NL +3108389888,3108390911,CH +3108390912,3108391935,BE +3108391936,3108392959,GR +3108392960,3108393983,LI +3108393984,3108395007,TR +3108395008,3108396031,GB +3108396032,3108397055,ES +3108397056,3108398079,TR +3108398080,3108399103,PT +3108399104,3108400127,RU +3108400128,3108401151,UA +3108401152,3108402175,NL +3108402176,3108403199,KZ +3108403200,3108404223,DE +3108404224,3108405247,SE +3108405248,3108406271,UA +3108406272,3108407295,GB +3108407296,3108408319,ES +3108408320,3108409343,TR +3108409344,3108410367,DE +3108410368,3108411391,IT +3108411392,3108412415,ES +3108412416,3108414463,GB +3108414464,3108415487,RU +3108415488,3108416511,GB +3108416512,3108417535,ES +3108417536,3108418559,FR +3108418560,3108419583,PL +3108419584,3108420607,NL +3108420608,3108421631,MD +3108421632,3108422655,GB +3108422656,3108423679,IR +3108423680,3108424703,IT +3108424704,3108425727,DE +3108425728,3108427775,NL +3108427776,3108428799,CZ +3108428800,3108429823,DE +3108429824,3108430847,LB +3108430848,3108433919,NL +3108433920,3108434943,GB +3108434944,3108435967,CH +3108435968,3108436991,IL +3108436992,3108438015,GB +3108438016,3108439039,UA +3108439040,3108440063,DE +3108440064,3108441087,IT +3108441088,3108443135,CH +3108443136,3108444159,PL +3108444160,3108445183,GB +3108445184,3108446207,ES +3108446208,3108447231,DE +3108447232,3108448255,GB +3108448256,3108449279,CZ +3108449280,3108450303,IT +3108450304,3108451327,GB +3108451328,3108452351,RU +3108452352,3108453375,LU +3108453376,3108454399,NL +3108454400,3108456447,RU +3108456448,3108457471,GB +3108457472,3108459519,RU +3108459520,3108460543,DE +3108460544,3108461567,RO +3108461568,3108462591,GB +3108462592,3108463615,RU +3108463616,3108464639,GB +3108464640,3108465663,HU +3108465664,3108466687,GB +3108466688,3108467711,CH +3108467712,3108468735,TR +3108468736,3108470783,DE +3108470784,3108471807,LV +3108471808,3108472831,YE +3108472832,3108473855,GB +3108473856,3108474879,PS +3108474880,3108475903,RU +3108475904,3108476927,FR +3108476928,3108477951,IR +3108477952,3108478975,FR +3108478976,3108479999,IE +3108480000,3108481023,AT +3108481024,3108482047,DE +3108482048,3108483071,SI +3108483072,3108484095,SE +3108484096,3108485119,AL +3108485120,3108486143,GB +3108486144,3108487167,FR +3108487168,3108488191,IR +3108488192,3108489215,RU +3108489216,3108490239,ES +3108490240,3108491263,AE +3108491264,3108492287,NO +3108492288,3108493311,RU +3108493312,3108494335,CY +3108494336,3108496383,NL +3108496384,3108497407,DE +3108497408,3108498431,CZ +3108498432,3108499455,HR +3108499456,3108500479,PL +3108500480,3108501503,IT +3108501504,3108502527,DE +3108502528,3108503551,AT +3108503552,3108504575,CH +3108504576,3108505599,FR +3108505600,3108506623,RU +3108506624,3108507647,ES +3108507648,3108508671,HU +3108508672,3108509695,CH +3108509696,3108510719,IR +3108510720,3108511743,SI +3108511744,3108512767,RU +3108512768,3108513791,DK +3108513792,3108514815,IT +3108514816,3108515839,ES +3108515840,3108516863,UA +3108516864,3108517887,ES +3108517888,3108518911,BG +3108518912,3108519935,SI +3108519936,3108520959,CH +3108520960,3108521983,CZ +3108521984,3108523007,AT +3108523008,3108524031,IT +3108524032,3108525055,FR +3108525056,3108526079,LV +3108526080,3108527103,FR +3108527104,3108528127,GB +3108528128,3108529151,NO +3108529152,3108530175,JO +3108530176,3108531199,SI +3108531200,3108532223,GB +3108532224,3108533247,ES +3108533248,3108534271,FI +3108534272,3108536319,NL +3108536320,3108537343,GB +3108537344,3108538367,NL +3108538368,3108539391,AT +3108539392,3108540415,DK +3108540416,3108541439,RU +3108541440,3108542463,GR +3108542464,3108543487,PT +3108543488,3108544511,US +3108544512,3108546559,NL +3108546560,3108547583,BE +3108547584,3108548607,GB +3108548608,3108549631,RO +3108549632,3108550655,NL +3108550656,3108551679,PL +3108551680,3108552703,RU +3108552704,3108553727,CH +3108553728,3108554751,PL +3108554752,3108555775,DE +3108555776,3108556799,LV +3108556800,3108557823,DK +3108557824,3108558847,ES +3108558848,3108559871,LB +3108559872,3108560895,NO +3108560896,3108562943,RU +3108562944,3108563967,DE +3108563968,3108564991,CH +3108564992,3108566015,RO +3108566016,3108567039,DE +3108567040,3108568063,FR +3108568064,3108569087,TR +3108569088,3108570111,IR +3108570112,3108571135,SI +3108571136,3108572159,GB +3108572160,3108573183,NO +3108573184,3108574207,RU +3108574208,3108575231,DE +3108575232,3108576255,NO +3108576256,3108578303,NL +3108578304,3108579327,GB +3108579328,3108580351,GR +3108580352,3108581375,GB +3108581376,3108582399,DE +3108582400,3108583423,FR +3108583424,3108584447,BG +3108584448,3108585471,PL +3108585472,3108586495,GB +3108586496,3108587519,EE +3108587520,3108588543,DK +3108588544,3108589567,IR +3108589568,3108590591,DE +3108590592,3108591615,GB +3108591616,3108592639,PL +3108592640,3108593663,NL +3108593664,3108594687,ES +3108594688,3108597759,CZ +3108597760,3108598783,IR +3108598784,3108600831,CH +3108600832,3108601855,NL +3108601856,3108602879,TR +3108602880,3108603903,EE +3108603904,3108604927,IT +3108604928,3108605951,GB +3108605952,3108606975,NL +3108606976,3108609023,GB +3108609024,3108610047,LI +3108610048,3108611071,CZ +3108611072,3108612095,IT +3108612096,3108615167,ES +3108615168,3108616191,RU +3108616192,3108618239,GB +3108618240,3108619263,RU +3108619264,3108620287,DK +3108620288,3108621311,TR +3108621312,3108622335,FR +3108622336,3108623359,PL +3108623360,3108625407,RU +3108625408,3108626431,NL +3108626432,3108627455,CZ +3108627456,3108628479,PL +3108628480,3108629503,FR +3108629504,3108630527,BG +3108630528,3108631551,CH +3108631552,3108633599,IT +3108633600,3108634623,FR +3108634624,3108635647,AT +3108635648,3108636671,UZ +3108636672,3108637695,FR +3108637696,3108638719,DE +3108638720,3108639743,ES +3108639744,3108640767,HU +3108640768,3108641791,GB +3108641792,3108642815,CH +3108642816,3108643839,FR +3108643840,3108644863,IT +3108644864,3108645887,FR +3108645888,3108646911,NL +3108646912,3108647935,DK +3108647936,3108648959,FR +3108648960,3108649983,IM +3108649984,3108651007,CZ +3108651008,3108652031,DE +3108652032,3108653055,CH +3108653056,3108654079,GI +3108654080,3108655103,NL +3108655104,3108656127,ES +3108656128,3108657151,PL +3108657152,3108658175,RS +3108658176,3108659199,GE +3108659200,3108660223,FR +3108660224,3108661247,UZ +3108661248,3108662271,RU +3108662272,3108676607,CH +3108676608,3108677631,IR +3108677632,3108678655,GB +3108678656,3108679679,RU +3108679680,3108680703,GB +3108680704,3108681727,DE +3108681728,3108682751,RU +3108682752,3108683775,IT +3108683776,3108684799,ES +3108684800,3108685823,SK +3108685824,3108686847,FR +3108686848,3108687871,CZ +3108687872,3108688895,FO +3108688896,3108689919,CH +3108689920,3108690943,DE +3108690944,3108691967,RU +3108691968,3108692991,DE +3108692992,3108694015,RU +3108694016,3108696063,GB +3108696064,3108697087,ES +3108697088,3108698111,DE +3108698112,3108699135,IT +3108699136,3108700159,RU +3108700160,3108701183,PL +3108701184,3108702207,RU +3108702208,3108703231,AT +3108703232,3108704255,ES +3108704256,3108705279,SA +3108705280,3108706303,GB +3108706304,3108707327,DE +3108707328,3108708351,GB +3108708352,3108709375,CH +3108709376,3108710399,PL +3108710400,3108711423,SE +3108711424,3108712447,RU +3108712448,3108713471,BG +3108713472,3108714495,RO +3108714496,3108715519,RS +3108715520,3108716543,GB +3108716544,3108717567,RU +3108717568,3108718591,FR +3108718592,3108719615,RU +3108719616,3108720639,IT +3108720640,3108721663,MD +3108721664,3108723711,RU +3108723712,3108724735,GB +3108724736,3108725759,IQ +3108725760,3108726783,DE +3108726784,3108727807,GB +3108727808,3108728831,IT +3108728832,3108729855,NL +3108729856,3108730879,CZ +3108730880,3108731903,GB +3108731904,3108732927,FR +3108732928,3108733951,FI +3108733952,3108734975,RU +3108734976,3108735999,CZ +3108736000,3108737023,FR +3108737024,3108738047,IE +3108738048,3108739071,DE +3108739072,3108740095,CH +3108740096,3108741119,NL +3108741120,3108742143,PL +3108743168,3108744191,NL 3120562176,3120594943,CO 3120594944,3120599039,AR 3120599040,3120601087,EC @@ -54164,7 +60665,9 @@ 3123707904,3124232191,UY 3124232192,3124760751,AR 3124760752,3124760759,MX -3124760760,3124783103,AR +3124760760,3124765183,AR +3124765184,3124765439,MX +3124765440,3124783103,AR 3124783104,3124785151,GT 3124785152,3124788223,CL 3124788224,3124789247,PE @@ -54178,7 +60681,9 @@ 3124846592,3124848639,AR 3124848640,3124849663,PA 3124849664,3124850687,AR -3124850688,3124853887,HN +3124850688,3124852175,HN +3124852176,3124852191,PH +3124852192,3124853887,HN 3124853888,3124853903,FR 3124853904,3124854783,HN 3124854784,3124887551,CL @@ -54186,9 +60691,7 @@ 3124953088,3125018623,CL 3125018624,3125280767,EC 3125280768,3125542911,PA -3125542912,3125658111,NI -3125658112,3125658367,MX -3125658368,3125673983,NI +3125542912,3125673983,NI 3125673984,3125805055,CL 3125805056,3126329343,CO 3126329344,3126853631,VE @@ -54282,7 +60785,8 @@ 3154124800,3154126847,PL 3154126848,3154128895,RU 3154128896,3154132991,EE -3154132992,3154157567,UA +3154132992,3154149375,UA +3154149376,3154157567,KZ 3154157568,3154173951,RU 3154173952,3154182143,MD 3154182144,3154247679,DE @@ -54294,31 +60798,7 @@ 3154575360,3154640895,FR 3154640896,3155165183,IT 3155165184,3155427327,RU -3155427328,3155536647,AT -3155536648,3155536655,DE -3155536656,3155540735,AT -3155540736,3155540991,HU -3155540992,3155542323,AT -3155542324,3155542327,CH -3155542328,3155598079,AT -3155598080,3155598335,DE -3155598336,3155628031,AT -3155628032,3155628287,HU -3155628288,3155663743,AT -3155663744,3155663871,CH -3155663872,3155675647,AT -3155675648,3155675775,DE -3155675776,3155676415,AT -3155676416,3155676671,HU -3155676672,3155681791,AT -3155681792,3155682047,HU -3155682048,3155684095,AT -3155684096,3155684223,HU -3155684224,3155685119,AT -3155685120,3155685247,HU -3155685248,3155685375,AT -3155685376,3155685631,CZ -3155685632,3155689471,AT +3155427328,3155689471,AT 3155689472,3155951615,RO 3155951616,3156213759,GB 3156213760,3156279295,RU @@ -54333,7 +60813,9 @@ 3156759432,3156759432,GB 3156759433,3156803583,DE 3156803584,3156869119,TR -3156869120,3156930559,LU +3156869120,3156926463,LU +3156926464,3156928511,NL +3156928512,3156930559,LU 3156930560,3156933631,US 3156933632,3156934655,SG 3156934656,3157000191,RU @@ -54347,9 +60829,9 @@ 3157196800,3157262335,PL 3157262336,3157786623,SA 3157786624,3158048767,TR -3158048768,3158214911,CH -3158214912,3158215167,DE -3158215168,3158310911,CH +3158048768,3158092031,CH +3158092032,3158092287,DE +3158092288,3158310911,CH 3158310912,3158312959,FI 3158312960,3158315007,AZ 3158315008,3158317055,DE @@ -54421,13 +60903,23 @@ 3158458368,3158474751,GB 3158474752,3158507519,OM 3158507520,3158573055,FI -3158573056,3158630399,RU +3158573056,3158581247,RU +3158581248,3158589439,DE +3158589440,3158615039,RU +3158615040,3158616063,GB +3158616064,3158630399,RU 3158630400,3158638591,PL 3158638592,3158704127,LT 3158704128,3158835199,KW 3158835200,3158851583,IQ 3158851584,3158859775,RU -3158859776,3158861567,NL +3158859776,3158860031,NL +3158860032,3158860287,GB +3158860288,3158860543,NL +3158860544,3158860799,GB +3158860800,3158861055,NL +3158861056,3158861311,UA +3158861312,3158861567,IE 3158861568,3158861823,AE 3158861824,3158862079,IN 3158862080,3158862335,GB @@ -54446,7 +60938,8 @@ 3158865408,3158865663,AL 3158865664,3158865919,CY 3158865920,3158866943,IT -3158866944,3158867455,NL +3158866944,3158867199,DE +3158867200,3158867455,HU 3158867456,3158867711,DE 3158867712,3158867967,NL 3158867968,3158884351,AZ @@ -54614,38 +61107,27 @@ 3161620480,3161636863,DK 3161636864,3161653247,RU 3161653248,3161669631,LU -3161669632,3161669887,FR -3161669888,3161670143,RE -3161670144,3161670399,FR -3161670400,3161670655,RE -3161670656,3161671167,FR +3161669632,3161669887,RE +3161669888,3161671167,FR 3161671168,3161671423,RE -3161671424,3161672063,FR -3161672064,3161672191,RE -3161672192,3161672703,FR -3161672704,3161672959,RE -3161672960,3161673471,FR -3161673472,3161673983,RE -3161673984,3161675775,FR -3161675776,3161676031,RE -3161676032,3161677823,FR +3161671424,3161672959,FR +3161672960,3161673215,RE +3161673216,3161673471,FR +3161673472,3161673727,RE +3161673728,3161677823,FR 3161677824,3161678079,MQ -3161678080,3161678335,FR -3161678336,3161679359,MQ -3161679360,3161679615,FR -3161679616,3161679871,MQ +3161678080,3161678847,FR +3161678848,3161679103,MQ +3161679104,3161679871,FR 3161679872,3161680639,GP 3161680640,3161681151,FR -3161681152,3161681919,GP -3161681920,3161682175,GF -3161682176,3161682431,FR +3161681152,3161681663,GP +3161681664,3161682431,FR 3161682432,3161682943,GF -3161682944,3161683967,MQ -3161683968,3161684223,FR -3161684224,3161684479,MQ -3161684480,3161685503,FR -3161685504,3161685759,MQ -3161685760,3161686015,FR +3161682944,3161683711,MQ +3161683712,3161684735,FR +3161684736,3161684991,MQ +3161684992,3161686015,FR 3161686016,3161702399,UA 3161702400,3161718783,AM 3161718784,3161735167,PL @@ -54680,18 +61162,14 @@ 3162071040,3162087423,IR 3162087424,3162095615,SK 3162095616,3162103807,GE -3162103808,3162105087,FR -3162105088,3162105855,NL -3162105856,3162106111,FR -3162106112,3162106367,NL -3162106368,3162106623,FR -3162106624,3162107391,NL +3162103808,3162104831,FR +3162104832,3162105343,NL +3162105344,3162105599,FR +3162105600,3162107391,NL 3162107392,3162107647,FR 3162107648,3162108415,NL 3162108416,3162108671,FR -3162108672,3162108927,NL -3162108928,3162109183,FR -3162109184,3162111103,NL +3162108672,3162111103,NL 3162111104,3162111167,FR 3162111168,3162111999,NL 3162112000,3162120191,PL @@ -54826,85 +61304,460 @@ 3164936192,3164937749,LT 3164937750,3164937750,FR 3164937751,3164938239,LT -3164938240,3164947579,FR +3164938240,3164946431,FR +3164946432,3164946435,BE +3164946436,3164946463,FR +3164946464,3164946471,IT +3164946472,3164946655,FR +3164946656,3164946671,BE +3164946672,3164946727,FR +3164946728,3164946731,NL +3164946732,3164946751,FR +3164946752,3164946783,ES +3164946784,3164947567,FR +3164947568,3164947575,ES +3164947576,3164947579,DE 3164947580,3164947583,IT -3164947584,3164949135,FR +3164947584,3164947631,FR +3164947632,3164947635,IT +3164947636,3164947727,FR +3164947728,3164947743,GB +3164947744,3164948671,FR +3164948672,3164948703,IT +3164948704,3164948851,FR +3164948852,3164948855,IT +3164948856,3164948959,FR +3164948960,3164948991,ES +3164948992,3164949103,FR +3164949104,3164949107,LT +3164949108,3164949135,FR 3164949136,3164949151,NL -3164949152,3164950695,FR +3164949152,3164949171,FR +3164949172,3164949175,LT +3164949176,3164949183,FR +3164949184,3164949191,IT +3164949192,3164949195,FR +3164949196,3164949199,IE +3164949200,3164949311,FR +3164949312,3164949327,NL +3164949328,3164949331,DE +3164949332,3164949407,FR +3164949408,3164949439,GB +3164949440,3164949479,FR +3164949480,3164949487,PL +3164949488,3164950063,FR +3164950064,3164950079,IT +3164950080,3164950407,FR +3164950408,3164950411,DE +3164950412,3164950451,FR +3164950452,3164950455,FI +3164950456,3164950511,FR +3164950512,3164950515,NL +3164950516,3164950519,FR +3164950520,3164950523,ES +3164950524,3164950559,FR +3164950560,3164950591,GB +3164950592,3164950687,FR +3164950688,3164950695,PL 3164950696,3164950703,NL -3164950704,3164951663,FR +3164950704,3164950707,IT +3164950708,3164950751,FR +3164950752,3164950759,NL +3164950760,3164950767,GB +3164950768,3164951167,FR +3164951168,3164951199,PT +3164951200,3164951247,FR +3164951248,3164951263,ES +3164951264,3164951295,PL +3164951296,3164951455,ES +3164951456,3164951523,FR +3164951524,3164951527,PL +3164951528,3164951547,FR +3164951548,3164951559,IT +3164951560,3164951567,NL +3164951568,3164951583,FR +3164951584,3164951591,DE +3164951592,3164951663,FR 3164951664,3164951671,PL -3164951672,3164952224,FR +3164951672,3164951675,FR +3164951676,3164951679,ES +3164951680,3164951683,FR +3164951684,3164951687,GB +3164951688,3164951743,FR +3164951744,3164951775,PL +3164951776,3164951807,DE +3164951808,3164952224,FR 3164952225,3164952231,GB 3164952232,3164952233,FR 3164952234,3164952235,GB 3164952236,3164952236,FR 3164952237,3164952237,GB -3164952238,3164953255,FR +3164952238,3164952271,FR +3164952272,3164952287,DE +3164952288,3164952303,FR +3164952304,3164952319,LT +3164952320,3164952399,FR +3164952400,3164952415,NL +3164952416,3164952431,FR +3164952432,3164952447,ES +3164952448,3164952479,FR +3164952480,3164952511,ES +3164952512,3164952527,IE +3164952528,3164952831,FR +3164952832,3164952895,GB +3164952896,3164953247,FR +3164953248,3164953255,BE 3164953256,3164953263,CZ -3164953264,3164953391,FR +3164953264,3164953383,FR +3164953384,3164953387,PL +3164953388,3164953391,FR 3164953392,3164953399,NL -3164953400,3164953583,FR +3164953400,3164953443,FR +3164953444,3164953447,BE +3164953448,3164953451,PL +3164953452,3164953463,FR +3164953464,3164953467,NL +3164953468,3164953503,FR +3164953504,3164953511,IT +3164953512,3164953571,FR +3164953572,3164953575,ES +3164953576,3164953583,FR 3164953584,3164953599,ES -3164953600,3164954511,FR +3164953600,3164953663,FR +3164953664,3164953727,CH +3164953728,3164953855,DE +3164953856,3164954207,FR +3164954208,3164954223,LT +3164954224,3164954255,FR +3164954256,3164954271,NL +3164954272,3164954495,FR +3164954496,3164954499,IT +3164954500,3164954511,FR 3164954512,3164954515,IT -3164954516,3164960439,FR +3164954516,3164954527,FR +3164954528,3164954543,IE +3164954544,3164954583,FR +3164954584,3164954591,IT +3164954592,3164958815,FR +3164958816,3164958847,ES +3164958848,3164958911,BE +3164958912,3164959039,FR +3164959040,3164959103,IT +3164959104,3164959135,PT +3164959136,3164959239,FR +3164959240,3164959247,ES +3164959248,3164959263,FR +3164959264,3164959279,IT +3164959280,3164959375,FR +3164959376,3164959383,DE +3164959384,3164959387,ES +3164959388,3164959391,FR +3164959392,3164959407,ES +3164959408,3164959663,FR +3164959664,3164959679,IT +3164959680,3164959743,PT +3164959744,3164959935,FR +3164959936,3164959999,BE +3164960000,3164960263,FR +3164960264,3164960267,ES +3164960268,3164960303,FR +3164960304,3164960319,CH +3164960320,3164960335,FR +3164960336,3164960339,LT +3164960340,3164960363,FR +3164960364,3164960367,ES +3164960368,3164960439,FR 3164960440,3164960443,DE -3164960444,3164960715,FR +3164960444,3164960471,FR +3164960472,3164960479,CH +3164960480,3164960495,ES +3164960496,3164960599,FR +3164960600,3164960607,FI +3164960608,3164960631,FR +3164960632,3164960639,ES +3164960640,3164960715,FR 3164960716,3164960719,NL -3164960720,3164960843,FR +3164960720,3164960799,FR +3164960800,3164960831,PT +3164960832,3164960843,FR 3164960844,3164960847,NL -3164960848,3164961391,FR +3164960848,3164960943,FR +3164960944,3164960959,GB +3164960960,3164960999,FR +3164961000,3164961003,PL +3164961004,3164961015,FR +3164961016,3164961023,NL +3164961024,3164961151,FR +3164961152,3164961167,PL +3164961168,3164961175,IE +3164961176,3164961335,FR +3164961336,3164961343,DE +3164961344,3164961359,FR +3164961360,3164961363,FI +3164961364,3164961391,FR 3164961392,3164961395,ES -3164961396,3164961511,FR +3164961396,3164961407,FR +3164961408,3164961471,PT +3164961472,3164961503,FR +3164961504,3164961511,IT 3164961512,3164961519,GB 3164961520,3164961551,FR -3164961552,3164961555,ES -3164961556,3164962471,FR +3164961552,3164961559,ES +3164961560,3164961563,FR +3164961564,3164961567,CH +3164961568,3164961759,FR +3164961760,3164961763,NL +3164961764,3164961767,IT +3164961768,3164961775,FR +3164961776,3164961783,GB +3164961784,3164961815,FR +3164961816,3164961823,IT +3164961824,3164961859,FR +3164961860,3164961863,ES +3164961864,3164961871,FR +3164961872,3164961887,PL +3164961888,3164961979,FR +3164961980,3164961983,IE +3164961984,3164962015,FR +3164962016,3164962031,NL +3164962032,3164962111,FR +3164962112,3164962143,CH +3164962144,3164962151,FR +3164962152,3164962159,BE +3164962160,3164962247,FR +3164962248,3164962255,DE +3164962256,3164962279,FR +3164962280,3164962283,PL +3164962284,3164962443,FR +3164962444,3164962447,CZ +3164962448,3164962463,FR +3164962464,3164962471,IT 3164962472,3164962475,ES -3164962476,3164962815,FR +3164962476,3164962631,FR +3164962632,3164962639,DE +3164962640,3164962719,FR +3164962720,3164962723,GB +3164962724,3164962815,FR 3164962816,3164964863,ES 3164964864,3164966911,FI -3164966912,3164968319,FR +3164966912,3164968255,FR +3164968256,3164968271,DE +3164968272,3164968287,GB +3164968288,3164968319,IT 3164968320,3164968447,GB 3164968448,3164968455,FR 3164968456,3164968459,NL -3164968460,3164968835,FR +3164968460,3164968463,FR +3164968464,3164968471,IT +3164968472,3164968687,FR +3164968688,3164968703,IT +3164968704,3164968831,FR +3164968832,3164968835,PL 3164968836,3164968839,ES -3164968840,3164969019,FR +3164968840,3164968903,FR +3164968904,3164968911,IT +3164968912,3164969019,FR 3164969020,3164969023,BE -3164969024,3164969039,FR +3164969024,3164969027,IT +3164969028,3164969039,FR 3164969040,3164969047,NL -3164969048,3164970413,FR +3164969048,3164969191,FR +3164969192,3164969199,ES +3164969200,3164969203,DE +3164969204,3164969503,FR +3164969504,3164969535,IT +3164969536,3164969647,FR +3164969648,3164969655,GB +3164969656,3164969663,FR +3164969664,3164969695,BE +3164969696,3164969895,FR +3164969896,3164969899,ES +3164969900,3164969919,FR +3164969920,3164969951,DE +3164969952,3164970207,FR +3164970208,3164970215,PL +3164970216,3164970219,GB +3164970220,3164970287,FR +3164970288,3164970291,ES +3164970292,3164970295,FR +3164970296,3164970299,ES +3164970300,3164970303,FR +3164970304,3164970335,NL +3164970336,3164970347,FR +3164970348,3164970351,ES +3164970352,3164970359,PL +3164970360,3164970371,FR +3164970372,3164970375,CH +3164970376,3164970383,FR +3164970384,3164970387,PL +3164970388,3164970413,FR 3164970414,3164970415,IT -3164970416,3164970923,FR +3164970416,3164970495,FR +3164970496,3164970527,BE +3164970528,3164970543,FR +3164970544,3164970551,IE +3164970552,3164970599,FR +3164970600,3164970603,BE +3164970604,3164970607,FR +3164970608,3164970615,DE +3164970616,3164970639,FR +3164970640,3164970647,DE +3164970648,3164970687,FR +3164970688,3164970691,DE +3164970692,3164970879,FR +3164970880,3164970883,ES +3164970884,3164970911,FR +3164970912,3164970915,ES +3164970916,3164970923,FR 3164970924,3164970927,LT -3164970928,3164971791,FR +3164970928,3164971455,FR +3164971456,3164971459,CZ +3164971460,3164971567,FR +3164971568,3164971571,DE +3164971572,3164971679,FR +3164971680,3164971711,NL +3164971712,3164971791,FR 3164971792,3164971799,IT -3164971800,3164973419,FR +3164971800,3164971967,FR +3164971968,3164971983,PT +3164971984,3164972027,FR +3164972028,3164972031,DE +3164972032,3164972499,FR +3164972500,3164972503,IT +3164972504,3164972511,FR +3164972512,3164972527,IT +3164972528,3164972687,FR +3164972688,3164972695,PT +3164972696,3164972703,FR +3164972704,3164972719,IT +3164972720,3164973419,FR 3164973420,3164973423,ES -3164973424,3164973663,FR -3164973664,3164973695,GB -3164973696,3164974335,FR +3164973424,3164973627,FR +3164973628,3164973631,IT +3164973632,3164973695,GB +3164973696,3164973759,FR +3164973760,3164973791,IE +3164973792,3164973843,FR +3164973844,3164973847,IE +3164973848,3164973855,PL +3164973856,3164973863,FR +3164973864,3164973867,BE +3164973868,3164973871,GB +3164973872,3164973879,FR +3164973880,3164973883,PL +3164973884,3164974111,FR +3164974112,3164974119,ES +3164974120,3164974127,FR +3164974128,3164974135,NL +3164974136,3164974239,FR +3164974240,3164974271,PT +3164974272,3164974303,FR +3164974304,3164974335,NL 3164974336,3164974463,GB 3164974464,3164974527,FR 3164974528,3164974559,ES -3164974560,3164976143,FR +3164974560,3164974647,FR +3164974648,3164974655,DE +3164974656,3164974667,FR +3164974668,3164974671,BE +3164974672,3164974727,FR +3164974728,3164974731,CH +3164974732,3164974887,FR +3164974888,3164974895,GB +3164974896,3164975039,FR +3164975040,3164975103,GB +3164975104,3164975135,PT +3164975136,3164975167,FR +3164975168,3164975199,NL +3164975200,3164975739,FR +3164975740,3164975743,BE +3164975744,3164975815,FR +3164975816,3164975823,IT +3164975824,3164975939,FR +3164975940,3164975943,DE +3164975944,3164975999,FR +3164976000,3164976015,ES +3164976016,3164976063,FR +3164976064,3164976095,GB +3164976096,3164976127,FR +3164976128,3164976135,GB +3164976136,3164976143,FR 3164976144,3164976159,BE -3164976160,3164976295,FR +3164976160,3164976175,IT +3164976176,3164976191,FR +3164976192,3164976207,DE +3164976208,3164976239,FR +3164976240,3164976255,GB +3164976256,3164976263,FR +3164976264,3164976271,ES +3164976272,3164976295,FR 3164976296,3164976303,IT -3164976304,3164995583,FR +3164976304,3164976315,FR +3164976316,3164976319,GB +3164976320,3164976327,ES +3164976328,3164976463,FR +3164976464,3164976479,ES +3164976480,3164976535,FR +3164976536,3164976539,ES +3164976540,3164976571,FR +3164976572,3164976575,DE +3164976576,3164976583,FR +3164976584,3164976591,IT +3164976592,3164976663,FR +3164976664,3164976671,ES +3164976672,3164976831,FR +3164976832,3164976839,DE +3164976840,3164977415,FR +3164977416,3164977423,GB +3164977424,3164977503,FR +3164977504,3164977535,CZ +3164977536,3164977551,PT +3164977552,3164977599,FR +3164977600,3164977631,GB +3164977632,3164977647,IE +3164977648,3164977855,FR +3164977856,3164977871,LT +3164977872,3164977883,FR +3164977884,3164977887,PL +3164977888,3164977903,FR +3164977904,3164977907,GB +3164977908,3164977911,FR +3164977912,3164977919,IT +3164977920,3164978063,FR +3164978064,3164978067,ES +3164978068,3164978151,FR +3164978152,3164978155,CH +3164978156,3164978159,FR +3164978160,3164978175,ES +3164978176,3164978607,FR +3164978608,3164978623,IT +3164978624,3164978719,FR +3164978720,3164978751,ES +3164978752,3164978975,FR +3164978976,3164978979,PL +3164978980,3164978983,FR +3164978984,3164978991,IT +3164978992,3164978999,FR +3164979000,3164979003,ES +3164979004,3164979103,FR +3164979104,3164979111,IT +3164979112,3164979159,FR +3164979160,3164979167,IT +3164979168,3164995583,FR 3164995584,3165061119,RU 3165061120,3165126655,SK 3165126656,3165192191,RU 3165192192,3165257727,GE 3165257728,3165323263,RO 3165323264,3165388799,ES -3165388800,3165417471,RO +3165388800,3165417471,MT 3165417472,3165421567,DE 3165421568,3165425663,IE -3165425664,3165437951,RO -3165437952,3165454335,AT +3165425664,3165429759,GB +3165429760,3165437951,RO +3165437952,3165439487,AT +3165439488,3165439743,GB +3165439744,3165454335,AT 3165454336,3165519871,RO 3165519872,3165585407,DE 3165585408,3165650943,CZ @@ -54940,11 +61793,7 @@ 3166697472,3166699519,RO 3166699520,3166961663,DE 3166961664,3167223807,SI -3167223808,3167321095,NL -3167321096,3167321099,DE -3167321100,3167476583,NL -3167476584,3167476591,DE -3167476592,3167748095,NL +3167223808,3167748095,NL 3167748096,3167762431,RO 3167762432,3167764479,MD 3167764480,3167772671,RO @@ -54962,16 +61811,31 @@ 3167799296,3167803391,MD 3167803392,3167813631,RO 3167813632,3167815679,MD -3167815680,3167868927,RO +3167815680,3167842303,RO +3167842304,3167843327,ES +3167843328,3167846399,RO +3167846400,3167851519,IR +3167851520,3167852543,DE +3167852544,3167862783,RO +3167862784,3167866879,IR +3167866880,3167868927,RO 3167868928,3167879167,MD 3167879168,3167895551,DE -3167895552,3167938559,RO +3167895552,3167899647,IR +3167899648,3167902719,RO +3167902720,3167902975,BE +3167902976,3167928319,RO +3167928320,3167932415,IR +3167932416,3167934463,RO +3167934464,3167935487,ES +3167935488,3167938559,RO 3167938560,3167939583,MD 3167939584,3167940607,RO 3167940608,3167943679,MD 3167943680,3167944447,RO 3167944448,3167944703,GB -3167944704,3167987711,RO +3167944704,3167948799,IR +3167948800,3167987711,RO 3167987712,3167989759,MD 3167989760,3168005887,RO 3168005888,3168006143,NL @@ -54983,12 +61847,17 @@ 3168016384,3168018431,MD 3168018432,3168020479,RO 3168020480,3168022527,MD -3168022528,3168038911,RO +3168022528,3168026623,IR +3168026624,3168038911,RO 3168038912,3168039935,MD 3168039936,3168040959,BE 3168040960,3168050431,RO 3168050432,3168050687,MD -3168050688,3168081919,RO +3168050688,3168071679,RO +3168071680,3168073727,IR +3168073728,3168077823,RO +3168077824,3168079871,ES +3168079872,3168081919,RO 3168081920,3168083967,FR 3168083968,3168084991,RO 3168084992,3168086015,MD @@ -54996,9 +61865,13 @@ 3168088064,3168089087,RO 3168089088,3168090111,MD 3168090112,3168092159,ES -3168092160,3168096255,RO +3168092160,3168096255,IR 3168096256,3168100351,MD -3168100352,3168129023,RO +3168100352,3168111615,RO +3168111616,3168112639,FR +3168112640,3168124927,RO +3168124928,3168126975,IR +3168126976,3168129023,RO 3168129024,3168130047,MD 3168130048,3168132095,RO 3168132096,3168133119,MD @@ -55008,7 +61881,10 @@ 3168138240,3168139263,MD 3168139264,3168156671,RO 3168156672,3168157695,MD -3168157696,3168165887,RO +3168157696,3168161791,IR +3168161792,3168165119,RO +3168165120,3168165375,DE +3168165376,3168165887,RO 3168165888,3168166911,MD 3168166912,3168169983,RO 3168169984,3168172031,ES @@ -55022,7 +61898,7 @@ 3168192512,3168194559,MD 3168194560,3168199679,RO 3168199680,3168200703,MD -3168200704,3168202751,RO +3168200704,3168202751,IR 3168202752,3168203775,ES 3168203776,3168267263,RO 3168267264,3168269311,MD @@ -55153,7 +62029,10 @@ 3187910656,3187914751,CL 3187914752,3187916799,BO 3187916800,3187933183,CO -3187933184,3187935519,GT +3187933184,3187933311,HN +3187933312,3187933341,GT +3187933342,3187933342,HN +3187933343,3187935519,GT 3187935520,3187935527,HN 3187935528,3187935607,GT 3187935608,3187935615,HN @@ -55161,15 +62040,23 @@ 3187936048,3187936063,HN 3187936064,3187936711,GT 3187936712,3187936719,HN -3187936720,3187940351,GT -3187940352,3187940607,HN -3187940608,3187940963,GT +3187936720,3187939847,GT +3187939848,3187939855,HN +3187939856,3187940479,GT +3187940480,3187940543,HN +3187940544,3187940963,GT 3187940964,3187940967,HN 3187940968,3187943055,GT 3187943056,3187943063,HN 3187943064,3187943127,GT 3187943128,3187943135,HN -3187943136,3187945971,GT +3187943136,3187943399,GT +3187943400,3187943403,HN +3187943404,3187944671,GT +3187944672,3187944679,HN +3187944680,3187944773,GT +3187944774,3187944774,HN +3187944775,3187945971,GT 3187945972,3187945975,HN 3187945976,3187946111,GT 3187946112,3187946239,HN @@ -55177,7 +62064,11 @@ 3187946640,3187946647,HN 3187946648,3187947983,GT 3187947984,3187947987,HN -3187947988,3187948799,GT +3187947988,3187948031,GT +3187948032,3187948159,HN +3187948160,3187948479,GT +3187948480,3187948543,HN +3187948544,3187948799,GT 3187948800,3187948927,HN 3187948928,3187949567,GT 3187949568,3187950126,BQ @@ -55212,7 +62103,7 @@ 3188137184,3188146175,AR 3188146176,3188170751,CO 3188170752,3188174847,CR -3188174848,3188178943,AR +3188174848,3188178943,BR 3188178944,3188187135,CR 3188187136,3188203519,AR 3188203520,3188207615,DO @@ -55221,7 +62112,8 @@ 3188228096,3188236287,PE 3188236288,3188237311,PA 3188237312,3188239359,VE -3188239360,3188240383,PE +3188239360,3188239615,BR +3188239616,3188240383,PE 3188240384,3188241407,CO 3188241408,3188242431,EC 3188242432,3188244479,AR @@ -55236,7 +62128,7 @@ 3188270080,3188270335,MX 3188270336,3188270847,VE 3188270848,3188271103,BR -3188271104,3188273151,VE +3188271104,3188273151,MX 3188273152,3188275199,PA 3188275200,3188277247,CL 3188277248,3188293631,CO @@ -55254,11 +62146,17 @@ 3188473856,3188482047,PE 3188482048,3188490239,AR 3188490240,3188498431,CO -3188498432,3188513407,AR +3188498432,3188512127,AR +3188512128,3188512255,US +3188512256,3188513407,AR 3188513408,3188513535,US -3188513536,3188517119,AR +3188513536,3188516095,AR +3188516096,3188516223,US +3188516224,3188517119,AR 3188517120,3188517247,US -3188517248,3188518271,AR +3188517248,3188517759,AR +3188517760,3188517887,US +3188517888,3188518271,AR 3188518272,3188518399,US 3188518400,3188523007,AR 3188523008,3188539391,CO @@ -55326,27 +62224,25 @@ 3191193600,3191209983,HN 3191209984,3191275519,CL 3191275520,3191341055,AR -3191341056,3191405951,GT -3191405952,3191406335,SV +3191341056,3191406079,GT +3191406080,3191406335,SV 3191406336,3191406591,GT 3191406592,3191439359,SV 3191439360,3191455743,EC 3191455744,3191472127,AR 3191472128,3191603199,TT -3191603200,3191607807,CO +3191603200,3191603519,CO +3191603520,3191603583,PR +3191603584,3191607807,CO 3191607808,3191608319,CL 3191608320,3191610623,CO 3191610624,3191610879,PE 3191610880,3191611391,CO 3191611392,3191619583,VE -3191619584,3191624703,CL -3191624704,3191624959,CO -3191624960,3191626239,CL -3191626240,3191626495,CO -3191626496,3191633663,CL -3191633664,3191633919,CO -3191633920,3191635967,CL -3191635968,3191647743,CO +3191619584,3191635967,CL +3191635968,3191637759,CO +3191637760,3191638015,AR +3191638016,3191647743,CO 3191647744,3191647807,AR 3191647808,3191648255,CO 3191648256,3191649791,US @@ -55358,27 +62254,25 @@ 3191670016,3191670271,AR 3191670272,3191670783,CO 3191670784,3191672831,CL -3191672832,3191674879,CO -3191674880,3191676927,CL +3191672832,3191673855,CO +3191673856,3191676927,CL 3191676928,3191677951,US 3191677952,3191678207,AR 3191678208,3191678719,US 3191678720,3191678975,AR -3191678976,3191680255,US -3191680256,3191680511,AR -3191680512,3191680767,US +3191678976,3191680767,US 3191680768,3191681279,AR 3191681280,3191681535,US -3191681536,3191683327,AR -3191683328,3191684607,US -3191684608,3191684863,AR -3191684864,3191685119,US +3191681536,3191682303,AR +3191682304,3191682559,US +3191682560,3191683327,AR +3191683328,3191685119,US 3191685120,3191685631,AR 3191685632,3191685887,US 3191685888,3191687167,AR 3191687168,3191688703,CO 3191688704,3191693311,US -3191693312,3191695871,CO +3191693312,3191695871,CL 3191695872,3191696127,US 3191696128,3191696383,CO 3191696384,3191701503,US @@ -55392,23 +62286,28 @@ 3191705600,3191705855,US 3191705856,3191706111,CO 3191706112,3191706623,US -3191706624,3191719935,CO -3191719936,3191721215,AR -3191721216,3191721471,CO -3191721472,3191722495,AR -3191722496,3191725055,CO +3191706624,3191707647,CO +3191707648,3191719935,CL +3191719936,3191722495,AR +3191722496,3191724031,CL +3191724032,3191725055,CO 3191725056,3191725311,AR -3191725312,3191726079,CO +3191725312,3191725567,CL +3191725568,3191726079,CO 3191726080,3191726335,AR 3191726336,3191726591,CO 3191726592,3191726847,AR 3191726848,3191727103,CO 3191727104,3191727359,AR -3191727360,3191730431,CO +3191727360,3191729919,CO +3191729920,3191730431,CL 3191730432,3191730687,AR 3191730688,3191730943,CO 3191730944,3191731199,AR -3191731200,3191732479,CO +3191731200,3191731711,CO +3191731712,3191731967,AR +3191731968,3191732223,CO +3191732224,3191732479,CL 3191732480,3191732735,AR 3191732736,3191734079,CO 3191734080,3191734143,US @@ -55428,15 +62327,21 @@ 3193438208,3193450495,CW 3193450496,3193450751,SR 3193450752,3193569279,CW -3193569280,3193579263,CO +3193569280,3193573087,CO +3193573088,3193573095,US +3193573096,3193579263,CO 3193579264,3193579519,EC 3193579520,3193582591,CO 3193582592,3193583103,EC -3193583104,3193595391,CO +3193583104,3193592319,CO +3193592320,3193592575,EC +3193592576,3193595391,CO 3193595392,3193595647,EC -3193595648,3193599999,CO -3193600000,3193600255,EC -3193600256,3193605375,CO +3193595648,3193599743,CO +3193599744,3193600255,EC +3193600256,3193604351,CO +3193604352,3193605119,EC +3193605120,3193605375,CO 3193605376,3193605631,EC 3193605632,3193606143,CO 3193606144,3193606399,EC @@ -55466,10 +62371,8 @@ 3193736448,3193737471,AR 3193737472,3193739007,US 3193739008,3193739263,AR -3193739264,3193739519,US -3193739520,3193739775,AR -3193739776,3193740287,US -3193740288,3193741311,AR +3193739264,3193740543,US +3193740544,3193741311,AR 3193741312,3193741823,US 3193741824,3193742079,AR 3193742080,3193742335,US @@ -55481,29 +62384,27 @@ 3193743744,3193743871,US 3193743872,3193743999,AR 3193744000,3193744127,US -3193744128,3193745279,AR -3193745280,3193745407,US +3193744128,3193744639,AR +3193744640,3193744895,US +3193744896,3193745151,AR +3193745152,3193745407,US 3193745408,3193746431,AR 3193746432,3193746687,US 3193746688,3193746751,AR 3193746752,3193746815,US 3193746816,3193746879,AR -3193746880,3193746943,US -3193746944,3193747199,AR -3193747200,3193747455,US +3193746880,3193747455,US 3193747456,3193747583,AR -3193747584,3193748223,US -3193748224,3193748863,AR -3193748864,3193748991,US -3193748992,3193749247,AR -3193749248,3193749759,US +3193747584,3193748479,US +3193748480,3193748863,AR +3193748864,3193749759,US 3193749760,3193750015,AR 3193750016,3193750271,US 3193750272,3193750527,AR 3193750528,3193750783,US 3193750784,3193751807,AR -3193751808,3193752319,US -3193752320,3193752831,AR +3193751808,3193752703,US +3193752704,3193752831,AR 3193752832,3193752959,US 3193752960,3193753087,AR 3193753088,3193753343,US @@ -55511,9 +62412,13 @@ 3193754624,3193754751,US 3193754752,3193755135,AR 3193755136,3193755263,US -3193755264,3193756415,AR +3193755264,3193755647,AR +3193755648,3193755775,US +3193755776,3193756415,AR 3193756416,3193756543,US -3193756544,3193757055,AR +3193756544,3193756799,AR +3193756800,3193756927,US +3193756928,3193757055,AR 3193757056,3193757183,US 3193757184,3193765887,AR 3193765888,3193774079,TT @@ -55544,8 +62449,9 @@ 3194028032,3194044415,AR 3194044416,3194052607,CO 3194052608,3194056703,TT -3194056704,3194058495,CW -3194058496,3194058751,CA +3194056704,3194057727,CW +3194057728,3194057983,CA +3194057984,3194058751,CW 3194058752,3194060799,AR 3194060800,3194068991,CO 3194068992,3194071039,PA @@ -55557,11 +62463,13 @@ 3194126336,3194127359,GT 3194127360,3194129407,PE 3194129408,3194129663,AR -3194129664,3194129671,BR -3194129672,3194130431,AR +3194129664,3194129919,BR +3194129920,3194130431,AR 3194130432,3194134527,BR 3194134528,3194135551,AR -3194135552,3194136575,GT +3194135552,3194136063,GT +3194136064,3194136319,BR +3194136320,3194136575,GT 3194136576,3194137087,BR 3194137088,3194140159,AR 3194140160,3194142719,CR @@ -55621,7 +62529,10 @@ 3194596352,3194597375,HT 3194597376,3194601471,AR 3194601472,3194602495,CW -3194602496,3194613759,AR +3194602496,3194610943,AR +3194610944,3194611199,CO +3194611200,3194613503,AR +3194613504,3194613759,CL 3194613760,3194617855,PE 3194617856,3194626047,NI 3194626048,3194630143,AR @@ -55699,7 +62610,9 @@ 3194925056,3194929151,AR 3194929152,3194937343,EC 3194937344,3194945535,AR -3194945536,3194953727,GT +3194945536,3194953215,GT +3194953216,3194953343,NI +3194953344,3194953727,GT 3194953728,3194959871,AR 3194959872,3194961919,US 3194961920,3194970111,EC @@ -55735,7 +62648,22 @@ 3195067392,3195068415,CR 3195068416,3195076607,CW 3195076608,3195084799,CL -3195084800,3195092991,CR +3195084800,3195085055,CR +3195085056,3195086335,NI +3195086336,3195087359,CR +3195087360,3195087615,NI +3195087616,3195088127,CR +3195088128,3195088639,NI +3195088640,3195088895,CR +3195088896,3195089919,NI +3195089920,3195090431,CR +3195090432,3195090687,NI +3195090688,3195091199,CR +3195091200,3195091455,NI +3195091456,3195092223,CR +3195092224,3195092479,NI +3195092480,3195092735,CR +3195092736,3195092991,NI 3195092992,3195097087,DO 3195097088,3195099135,CR 3195099136,3195100159,GT @@ -55747,7 +62675,8 @@ 3195138048,3195139071,DO 3195139072,3195140095,CL 3195140096,3195142143,CR -3195142144,3195150335,VE +3195142144,3195142399,MX +3195142400,3195150335,VE 3195150336,3195158527,CL 3195158528,3195199487,AR 3195199488,3195201535,PY @@ -55769,9 +62698,7 @@ 3195256832,3195265023,AR 3195265024,3195273215,CO 3195273216,3195535359,PE -3195535360,3195536639,SV -3195536640,3195536895,FR -3195536896,3195543551,SV +3195535360,3195543551,SV 3195547648,3195551743,AR 3195551744,3195559935,EC 3195559936,3195568127,AR @@ -55809,7 +62736,9 @@ 3195738112,3195740159,HN 3195740160,3195740415,US 3195740416,3195740927,PA -3195740928,3195741951,US +3195740928,3195741055,US +3195741056,3195741087,HN +3195741088,3195741951,US 3195741952,3195744255,PA 3195744256,3195748351,EC 3195748352,3195752447,CL @@ -55828,7 +62757,9 @@ 3195805696,3195807743,NI 3195807744,3195808639,BZ 3195808640,3195808767,CO -3195808768,3195809791,BZ +3195808768,3195809151,BZ +3195809152,3195809279,US +3195809280,3195809791,BZ 3195809792,3195811839,PE 3195811840,3195813887,AR 3195813888,3195822079,DO @@ -55921,7 +62852,9 @@ 3200614400,3200647167,AR 3200647168,3201302527,VE 3201302528,3201433599,CL -3201433600,3201441791,AR +3201433600,3201435135,AR +3201435136,3201435263,US +3201435264,3201441791,AR 3201441792,3201442047,US 3201442048,3201499135,AR 3201499136,3201515519,CL @@ -55956,12 +62889,14 @@ 3201869856,3201869871,PE 3201869872,3201871743,AR 3201871744,3201871807,PE -3201871808,3201871871,AR +3201871808,3201871811,AR +3201871812,3201871815,PE +3201871816,3201871871,AR 3201871872,3201875967,PE 3201875968,3201880063,CO 3201880064,3201884159,EC -3201884160,3201892351,VE -3201892352,3201925119,AR +3201884160,3201894399,VE +3201894400,3201925119,AR 3201925120,3201957887,CL 3201957888,3202088959,PA 3202088960,3202220031,AR @@ -55997,9 +62932,11 @@ 3203556864,3203557119,DO 3203557120,3203561471,CO 3203561472,3203562495,SV -3203562496,3203564031,CO -3203564032,3203564287,PA -3203564288,3203566591,CO +3203562496,3203563775,CO +3203563776,3203564287,PA +3203564288,3203564799,CO +3203564800,3203565055,DO +3203565056,3203566591,CO 3203566592,3203566847,PA 3203566848,3203568639,CO 3203568640,3203569663,SV @@ -56018,12 +62955,18 @@ 3210740736,3210742015,BR 3210742016,3210742031,IT 3210742032,3210742047,US -3210742048,3210742271,BR +3210742048,3210742063,BR +3210742064,3210742079,US +3210742080,3210742271,BR 3210742272,3210742527,CL 3210742528,3210742543,KR -3210742544,3210743039,CL +3210742544,3210742567,CL +3210742568,3210742575,US +3210742576,3210743039,CL 3210743040,3210743055,GR -3210743056,3210743295,CL +3210743056,3210743079,CL +3210743080,3210743087,US +3210743088,3210743295,CL 3210743296,3210743551,US 3210743552,3210743567,TH 3210743568,3210743583,US @@ -56036,7 +62979,7 @@ 3210745360,3210745375,US 3210745376,3210745855,CL 3210745856,3210745871,IT -3210745872,3210746367,CL +3210745872,3210746367,BR 3210746368,3210746383,SE 3210746384,3210746879,CL 3210746880,3210746895,CH @@ -56069,11 +63012,13 @@ 3210773504,3210773519,PL 3210773520,3210774271,CL 3210774272,3210774287,NO -3210774288,3210774783,CL +3210774288,3210774527,CL +3210774528,3210774783,BR 3210774784,3210774799,IT -3210774800,3210775295,CL +3210774800,3210775295,BR 3210775296,3210775311,CH -3210775312,3210776319,CL +3210775312,3210775551,BR +3210775552,3210776319,CL 3210776320,3210776575,US 3210776576,3210776831,CL 3210776832,3210777087,US @@ -56093,7 +63038,9 @@ 3210786560,3210786575,GR 3210786576,3210803071,CL 3210803072,3210803087,US -3210803088,3210803327,CL +3210803088,3210803199,CL +3210803200,3210803201,US +3210803202,3210803327,CL 3210803328,3210803455,BR 3210803456,3210805247,CL 3210805248,3210809343,PA @@ -56120,77 +63067,212 @@ 3210926080,3210928127,AR 3210928128,3210936319,NI 3210936320,3211067391,EC -3211067392,3211073023,US +3211067392,3211071487,US +3211071488,3211071999,DE +3211072000,3211073023,US 3211073024,3211073279,CA 3211073280,3211073535,US -3211073536,3211075583,CL +3211073536,3211075583,NL 3211075584,3211075839,US -3211075840,3211080703,CL +3211075840,3211076095,CL +3211076096,3211076607,LT +3211076608,3211079167,CL +3211079168,3211079423,NL +3211079424,3211080703,CL 3211080704,3211080959,NL 3211080960,3211081215,CL 3211081216,3211081727,CH 3211081728,3211083775,CL 3211083776,3211083791,RU -3211083792,3211084287,CL +3211083792,3211083855,CL +3211083856,3211083871,DE +3211083872,3211084287,CL 3211084288,3211084303,NL -3211084304,3211084671,CL +3211084304,3211084367,CL +3211084368,3211084383,DE +3211084384,3211084559,CL +3211084560,3211084575,DE +3211084576,3211084671,CL 3211084672,3211084799,BY 3211084800,3211084815,AT -3211084816,3211085311,CL +3211084816,3211084879,CL +3211084880,3211084895,DE +3211084896,3211084927,CL +3211084928,3211085055,US +3211085056,3211085071,CL +3211085072,3211085087,DE +3211085088,3211085311,CL 3211085312,3211085327,GB -3211085328,3211085695,CL +3211085328,3211085391,CL +3211085392,3211085407,DE +3211085408,3211085583,CL +3211085584,3211085599,DE +3211085600,3211085695,CL 3211085696,3211085823,GE 3211085824,3211085839,TH -3211085840,3211086095,CL +3211085840,3211085903,CL +3211085904,3211085919,DE +3211085920,3211086095,CL 3211086096,3211086111,US 3211086112,3211086335,CL 3211086336,3211086351,FR -3211086352,3211086847,CL +3211086352,3211086367,DE +3211086368,3211086463,CL +3211086464,3211086591,US +3211086592,3211086607,CL +3211086608,3211086623,DE +3211086624,3211086847,CL 3211086848,3211086863,PL -3211086864,3211087359,CL +3211086864,3211086879,DE +3211086880,3211087119,CL +3211087120,3211087135,DE +3211087136,3211087359,CL 3211087360,3211087375,GB -3211087376,3211087871,CL +3211087376,3211087391,DE +3211087392,3211087631,CL +3211087632,3211087647,DE +3211087648,3211087871,CL 3211087872,3211087887,ES -3211087888,3211088383,CL +3211087888,3211087903,DE +3211087904,3211087999,CL +3211088000,3211088127,US +3211088128,3211088143,CL +3211088144,3211088159,DE +3211088160,3211088383,CL 3211088384,3211088399,BE -3211088400,3211088895,CL +3211088400,3211088415,DE +3211088416,3211088655,CL +3211088656,3211088671,DE +3211088672,3211088895,CL 3211088896,3211088911,DK -3211088912,3211089407,CL +3211088912,3211088927,DE +3211088928,3211089167,CL +3211089168,3211089183,DE +3211089184,3211089407,CL 3211089408,3211089423,GB -3211089424,3211089919,CL +3211089424,3211089439,DE +3211089440,3211089535,CL +3211089536,3211089663,US +3211089664,3211089679,CL +3211089680,3211089695,DE +3211089696,3211089919,CL 3211089920,3211089935,GB -3211089936,3211090431,CL +3211089936,3211089951,DE +3211089952,3211090191,CL +3211090192,3211090207,DE +3211090208,3211090431,CL 3211090432,3211090447,GR -3211090448,3211090943,CL +3211090448,3211090463,DE +3211090464,3211090703,CL +3211090704,3211090719,DE +3211090720,3211090943,CL 3211090944,3211090959,TR -3211090960,3211091455,CL +3211090960,3211090975,DE +3211090976,3211091071,CL +3211091072,3211091199,US +3211091200,3211091215,CL +3211091216,3211091231,DE +3211091232,3211091455,CL 3211091456,3211091471,FI -3211091472,3211091967,CL +3211091472,3211091487,DE +3211091488,3211091727,CL +3211091728,3211091743,DE +3211091744,3211091967,CL 3211091968,3211091983,RU -3211091984,3211092479,CL +3211091984,3211091999,DE +3211092000,3211092239,CL +3211092240,3211092255,DE +3211092256,3211092479,CL 3211092480,3211092495,BE -3211092496,3211092991,CL +3211092496,3211092511,DE +3211092512,3211092607,CL +3211092608,3211092735,US +3211092736,3211092751,CL +3211092752,3211092767,DE +3211092768,3211092991,CL 3211092992,3211093007,SK -3211093008,3211093503,CL +3211093008,3211093023,DE +3211093024,3211093263,CL +3211093264,3211093279,DE +3211093280,3211093503,CL 3211093504,3211093519,HR -3211093520,3211094015,CL +3211093520,3211093535,DE +3211093536,3211093775,CL +3211093776,3211093791,DE +3211093792,3211094015,CL 3211094016,3211094031,CZ -3211094032,3211094527,CL +3211094032,3211094047,DE +3211094048,3211094143,CL +3211094144,3211094271,US +3211094272,3211094287,CL +3211094288,3211094303,DE +3211094304,3211094527,CL 3211094528,3211094543,HR -3211094544,3211095039,CL +3211094544,3211094559,DE +3211094560,3211094799,CL +3211094800,3211094815,DE +3211094816,3211095039,CL 3211095040,3211095055,ES -3211095056,3211095551,CL +3211095056,3211095071,DE +3211095072,3211095311,CL +3211095312,3211095327,DE +3211095328,3211095551,CL 3211095552,3211095567,GB -3211095568,3211096063,CL +3211095568,3211095583,DE +3211095584,3211095679,CL +3211095680,3211095807,US +3211095808,3211095823,CL +3211095824,3211095839,DE +3211095840,3211096063,CL 3211096064,3211096079,GB -3211096080,3211096575,CL +3211096080,3211096095,DE +3211096096,3211096335,CL +3211096336,3211096351,DE +3211096352,3211096575,CL 3211096576,3211096831,GB -3211096832,3211097087,CL +3211096832,3211096847,CL +3211096848,3211096863,DE +3211096864,3211097087,CL 3211097088,3211097103,DE -3211097104,3211099647,CL +3211097104,3211097151,GB +3211097152,3211097215,CL +3211097216,3211097343,GB +3211097344,3211097359,CL +3211097360,3211097375,DE +3211097376,3211097599,CL +3211097600,3211097855,US +3211097856,3211097871,CL +3211097872,3211097887,DE +3211097888,3211098111,CL +3211098112,3211098367,US +3211098368,3211098383,CL +3211098384,3211098399,DE +3211098400,3211098623,CL +3211098624,3211098879,US +3211098880,3211098895,CL +3211098896,3211098911,DE +3211098912,3211099135,CL +3211099136,3211099391,DE +3211099392,3211099407,CL +3211099408,3211099423,DE +3211099424,3211099647,CL 3211099648,3211099663,DE -3211099664,3211129599,CL -3211129600,3211129855,BR +3211099664,3211099679,GB +3211099680,3211099711,CL +3211099712,3211099775,DE +3211099776,3211099903,GB +3211099904,3211099919,CL +3211099920,3211099935,DE +3211099936,3211101951,CL +3211101952,3211102207,AR +3211102208,3211104767,AU +3211104768,3211106303,CL +3211106304,3211108351,US +3211108352,3211124735,CL +3211124736,3211128831,US +3211128832,3211129343,CL +3211129344,3211129599,SG +3211129600,3211129855,NL 3211129856,3211132927,CL 3211132928,3211137023,CO 3211137024,3211141119,AR @@ -56307,7 +63389,7 @@ 3220164608,3220168703,IE 3220168704,3220172799,US 3220172800,3221225471,BR -3221225480,3221225727,GB +3221225480,3221225727,US 3221226240,3221226495,US 3221226496,3221227519,KY 3221227520,3221242879,US @@ -56367,7 +63449,13 @@ 3221806080,3221806335,IN 3221806336,3221806591,US 3221806592,3221806847,IN -3221806848,3222011903,US +3221806848,3221991167,US +3221991168,3221991423,NZ +3221991424,3221993727,US +3221993728,3221993983,FR +3221993984,3222003967,US +3222003968,3222004223,FR +3222004224,3222011903,US 3222011904,3222012159,CA 3222012160,3222012415,NL 3222012416,3222023935,US @@ -56475,8 +63563,7 @@ 3223223296,3223223551,AI 3223223552,3223227903,US 3223227904,3223228159,CA -3223228160,3223228415,US -3223228928,3223229695,US +3223228160,3223229695,US 3223229696,3223229951,CA 3223229952,3223236607,US 3223236608,3223237631,GB @@ -56494,9 +63581,7 @@ 3223262976,3223263231,BE 3223263232,3223263743,US 3223263744,3223264255,NL -3223264256,3223264511,US -3223264512,3223264767,CA -3223264768,3223265023,US +3223264256,3223265023,US 3223265024,3223265279,NL 3223265280,3223266559,US 3223266560,3223266815,AU @@ -56579,16 +63664,12 @@ 3223473232,3223474175,CA 3223474176,3223477247,US 3223477248,3223478271,CA -3223478272,3223480319,US -3223480832,3223481087,US +3223478272,3223481087,US 3223481088,3223481343,SE 3223481344,3223483391,US 3223483392,3223483647,NL -3223483648,3223483903,US -3223484416,3223491071,US -3223491584,3223497215,US -3223497728,3223498751,US -3223499264,3223499519,US +3223483904,3223491071,US +3223491584,3223499519,US 3223499520,3223499775,FI 3223499776,3223500031,US 3223500032,3223503871,CA @@ -56620,8 +63701,7 @@ 3223556608,3223556863,NL 3223556864,3223557375,US 3223557376,3223558655,DE -3223558656,3223559679,US -3223559936,3223563263,US +3223558656,3223563263,US 3223563264,3223563519,NL 3223563520,3223566079,US 3223566080,3223568639,NL @@ -56635,7 +63715,9 @@ 3223578112,3223580671,US 3223580672,3223581951,AT 3223581952,3223582207,US -3223582208,3223582719,NL +3223582208,3223582212,NL +3223582213,3223582213,PT +3223582214,3223582719,NL 3223582720,3223582975,AU 3223582976,3223584767,US 3223584768,3223585023,GB @@ -56694,38 +63776,36 @@ 3223650048,3223650303,GB 3223650304,3223715839,CH 3223715840,3223781375,DK -3223781376,3223847935,US -3223848448,3223855103,US +3223781376,3223855103,US 3223855104,3223857151,CA -3223857152,3223862783,US -3223863296,3223863807,US +3223857152,3223863807,US +3223863808,3223864319,CA 3223864320,3223864575,US 3223864576,3223864831,AE 3223864832,3223865343,HR 3223865344,3223867391,FI 3223867392,3223867647,GB 3223867648,3223867903,CA +3223867904,3223868415,US 3223868416,3223869439,BM 3223869440,3223871487,US 3223871488,3223873535,CA -3223873536,3223875071,US -3223875584,3223877119,US -3223877632,3223881727,US +3223873536,3223881727,US 3223881728,3223882751,CA +3223882752,3223883263,US 3223883264,3223883519,CA -3223883520,3223898623,US -3223899136,3223902207,US +3223883520,3223902463,US 3223902464,3223902719,CA -3223903232,3223905279,US +3223902720,3223905279,US 3223905280,3223905535,FI 3223905536,3223905791,US 3223906304,3223909375,CA -3223909376,3223910911,US +3223909376,3223911935,US 3223911936,3223912191,CA -3223912192,3223938815,US +3223912448,3223938815,US 3223938816,3223946239,GB 3223946240,3223947519,CH -3223947520,3223947775,US +3223947520,3223948287,US 3223948288,3223948543,NL 3223948544,3223949823,CH 3223949824,3223950079,AU @@ -56734,10 +63814,10 @@ 3223950592,3223953663,CH 3223953664,3223955967,US 3223955968,3223956223,AU -3223956224,3223957759,US +3223956224,3223958015,US 3223958016,3223963135,JP 3223963136,3223963647,US -3223963904,3223964159,CA +3223963648,3223964159,CA 3223964160,3223964415,US 3223964416,3223964671,AU 3223964672,3223965183,US @@ -56765,7 +63845,9 @@ 3223994112,3223994623,DE 3223994880,3223995391,US 3223995392,3223995647,CA -3223995648,3223999487,US +3223995648,3223996415,US +3223996416,3223996927,CA +3223996928,3223999487,US 3224000256,3224000511,NL 3224000512,3224001023,US 3224001024,3224001279,CA @@ -56779,8 +63861,7 @@ 3224006912,3224012031,NL 3224012032,3224014591,US 3224014592,3224014847,NL -3224014848,3224015615,US -3224015872,3224016639,US +3224014848,3224016639,US 3224016640,3224016895,AU 3224016896,3224024063,US 3224024064,3224029695,CH @@ -56789,8 +63870,7 @@ 3224030720,3224030975,CA 3224030976,3224038655,US 3224038656,3224038911,AU -3224038912,3224039679,US -3224039936,3224042751,US +3224038912,3224042751,US 3224042752,3224043007,DE 3224043008,3224084991,US 3224084992,3224087551,SE @@ -56798,7 +63878,7 @@ 3224088064,3224088319,AU 3224088320,3224090879,US 3224090880,3224091135,AU -3224091648,3224091903,US +3224091136,3224091903,US 3224091904,3224092159,AU 3224092160,3224092415,CA 3224092416,3224092671,US @@ -56814,25 +63894,22 @@ 3224097792,3224098047,NL 3224098048,3224099583,US 3224099584,3224099839,CA -3224099840,3224100863,US -3224101120,3224101375,US +3224099840,3224101375,US 3224101376,3224102399,AU +3224102912,3224103423,US 3224103424,3224103679,NL 3224103680,3224104703,US 3224104704,3224104959,AU -3224104960,3224105471,US -3224105728,3224106495,US -3224106752,3224109055,US +3224104960,3224109055,US 3224109056,3224109311,NL 3224109312,3224119551,DE 3224119552,3224126463,FR -3224126976,3224127231,US +3224126464,3224127231,US 3224127232,3224129791,FR 3224129792,3224132351,DE 3224132352,3224170495,US 3224170496,3224173567,SE -3224173568,3224174335,US -3224174592,3224288255,US +3224173568,3224288255,US 3224288256,3224289023,DE 3224289024,3224302335,US 3224302336,3224302591,CA @@ -56840,54 +63917,56 @@ 3224305664,3224367615,JP 3224367616,3224368127,US 3224368128,3224369663,CH -3224369664,3224373247,US +3224369664,3224370431,US +3224370432,3224370687,CA +3224370688,3224370943,US +3224370944,3224371199,CA +3224371200,3224373247,US 3224373248,3224373503,AU -3224373504,3224379135,US +3224373504,3224373759,US +3224373760,3224374015,AU +3224374016,3224379135,US 3224379136,3224379391,NL -3224379392,3224392191,US -3224392704,3224398079,US -3224398336,3224398591,US +3224379392,3224398591,US 3224398592,3224398847,DE 3224398848,3224399103,US 3224399104,3224399615,AU -3224399616,3224407039,US +3224399616,3224407295,US 3224407296,3224407551,CA -3224407808,3224408319,US +3224407552,3224408319,US 3224408320,3224408575,NL -3224408576,3224424959,US -3224425216,3224427007,US -3224427520,3224428543,US +3224408576,3224427519,US +3224427520,3224427775,CA +3224427776,3224428543,US 3224428544,3224428799,NL -3224428800,3224430079,US +3224428800,3224430335,US 3224430336,3224430591,NL -3224430592,3224430847,US +3224430592,3224431103,US 3224431104,3224431359,CA 3224431360,3224431615,US -3224432128,3224432383,US -3224433152,3224433407,US -3224433664,3224434687,US +3224432128,3224434687,US 3224434688,3224434943,AU 3224434944,3224435967,US 3224435968,3224436223,MU -3224436224,3224436479,US +3224436224,3224436735,US 3224436736,3224502271,FI 3224502272,3224567807,JP 3224567808,3224571903,NO -3224571904,3224633343,JP +3224571904,3224580095,JP +3224580096,3224580351,US +3224580352,3224633343,JP 3224633344,3224646399,DE 3224646400,3224651775,US 3224651776,3224652287,AU -3224652800,3224660991,US +3224652288,3224660991,US 3224660992,3224661247,CA -3224661504,3224662527,US -3224663040,3224663551,US +3224661248,3224663807,US 3224672000,3224672255,US 3224672256,3224672511,NL -3224672512,3224673791,US +3224672512,3224674047,US 3224674048,3224674559,DE 3224674560,3224674815,GB -3224675072,3224675839,US -3224676864,3224677119,US +3224674816,3224677119,US 3224677120,3224678655,AU 3224678656,3224680703,US 3224680704,3224680959,AU @@ -56900,22 +63979,21 @@ 3224692736,3224692991,NL 3224692992,3224694527,US 3224694528,3224694783,CA -3224694784,3224695039,US -3224695808,3224697343,US -3224697856,3224698111,US +3224694784,3224698111,US 3224698112,3224698623,NL -3224698880,3224699135,US +3224698624,3224699135,US 3224699136,3224699647,BE 3224699648,3224725247,US -3224725248,3224725503,DE -3224725504,3224725759,NL +3224725248,3224725759,NL 3224725760,3224739071,US 3224739072,3224739327,FI 3224739328,3224772351,US -3224772352,3224778751,DE +3224772352,3224776447,DE +3224776448,3224776703,GB +3224776704,3224777983,DE +3224777984,3224778239,US 3224779776,3224785151,DE -3224785152,3224787967,US -3224788480,3224791039,US +3224785152,3224791039,US 3224791040,3224791295,NL 3224791296,3224791807,AU 3224791808,3224793343,US @@ -56924,7 +64002,7 @@ 3224793856,3224795391,DK 3224795392,3224795647,CA 3224795648,3224795903,CH -3224796160,3224796415,US +3224795904,3224796415,US 3224796416,3224797439,DE 3224797440,3224797695,US 3224797696,3224797951,AU @@ -56932,9 +64010,11 @@ 3224798208,3224798463,NL 3224798464,3224798975,US 3224798976,3224799231,AU +3224799232,3224799487,US 3224799488,3224799743,AU 3224799744,3224799999,US 3224800000,3224800255,NL +3224800256,3224800511,US 3224800512,3224816639,FR 3224816640,3224816895,IL 3224816896,3224820735,FR @@ -56942,8 +64022,7 @@ 3224820992,3224821247,DE 3224821248,3224822015,US 3224822016,3224822271,NL -3224822272,3224822527,US -3224822784,3224823039,US +3224822272,3224823039,US 3224823296,3224826367,US 3224826368,3224826623,CA 3224826624,3224826879,US @@ -56952,25 +64031,23 @@ 3224827648,3224827903,AU 3224827904,3224828671,US 3224828672,3224828927,AU -3224829184,3224829439,US +3224828928,3224829439,US 3224829440,3224829695,NL -3224829952,3224834047,US +3224829696,3224834047,US 3224834048,3224834303,SG 3224834304,3224834559,US 3224834560,3224834815,TH 3224834816,3224850175,US 3224850176,3224850431,IN -3224850432,3224850943,US -3224851200,3224851455,US +3224850432,3224851455,US 3224851456,3224851711,NL -3224851968,3224852735,US +3224851712,3224852735,US 3224852736,3224852991,NL -3224852992,3224854527,US -3224854784,3224855039,US +3224852992,3224855039,US 3224855040,3224855551,AU 3224855552,3224855807,US 3224855808,3224856063,IT -3224856064,3224856575,US +3224856064,3224856831,US 3224856832,3224857087,NL 3224857088,3224857855,US 3224857856,3224858111,PL @@ -56981,8 +64058,10 @@ 3224859392,3224859647,NL 3224859648,3224860159,US 3224860160,3224860415,AU -3224860928,3224862719,US +3224860416,3224860671,CA +3224860672,3224862975,US 3224862976,3224863231,NL +3224863232,3224863487,CA 3224863488,3224863743,US 3224863744,3224863999,NL 3224864000,3224870655,US @@ -56991,32 +64070,31 @@ 3224878080,3224878335,NL 3224878336,3224878591,US 3224878592,3224878847,AU +3224878848,3224879359,US 3224879360,3224879615,NL 3224879616,3224879871,CA 3224879872,3224880383,US 3224880384,3224880639,NL 3224880640,3224880895,AU -3224880896,3224882431,US +3224880896,3224882687,US 3224882688,3224882943,CA 3224882944,3224883455,US 3224883456,3224883711,AU 3224883712,3224884223,US 3224884224,3224884479,NL -3224884480,3224884991,US +3224884480,3224885247,US 3224885248,3224885503,CA -3224885760,3224886015,US +3224885504,3224886015,US 3224886016,3224886527,AU 3224886528,3224887295,US 3224887296,3224887551,CA -3224887808,3224889087,US +3224887552,3224889343,US 3224889344,3224889599,AU 3224889600,3224890879,US 3224890880,3224891135,AU -3224891136,3224891647,US -3224892160,3224892415,CA +3224891136,3224892415,US 3224892416,3224892671,NL -3224892928,3224893183,US -3224893440,3224893951,US +3224892672,3224893951,US 3224894464,3224899071,US 3224899072,3224899327,AT 3224899328,3224908543,US @@ -57034,64 +64112,60 @@ 3225034752,3225035775,BG 3225035776,3225037055,US 3225037056,3225049599,FI -3225050112,3225051135,US -3225052672,3225056767,US -3225057024,3225057535,US +3225049600,3225057535,US 3225057536,3225057791,CA -3225057792,3225060351,US -3225060352,3225061631,AU +3225057792,3225060607,US +3225060608,3225061631,AU +3225061632,3225062399,US 3225062400,3225063423,VC -3225063424,3225064447,US -3225064704,3225075967,US +3225063424,3225076223,US 3225076224,3225076479,CA 3225076480,3225076991,US 3225076992,3225077247,SE -3225077504,3225081087,US +3225077248,3225081087,US 3225081088,3225081343,CA -3225081600,3225082367,US +3225081344,3225082367,US 3225082368,3225082623,NL -3225082880,3225084671,US +3225082624,3225084671,US 3225084672,3225085183,NL 3225085184,3225085439,ES 3225085440,3225089279,US 3225089280,3225089535,CA -3225089536,3225091071,US -3225091584,3225091839,US -3225092096,3225314303,US +3225089536,3225314303,US 3225314304,3225314559,GB -3225314560,3225419775,US -3225420032,3225420287,US +3225314560,3225420799,US 3225420800,3225423871,CA 3225423872,3225424383,US 3225424896,3225426943,US 3225426944,3225427199,NL +3225427200,3225427455,US +3225427456,3225427967,CA 3225427968,3225428991,US -3225429504,3225429759,CA -3225430016,3225431039,CA +3225428992,3225431039,CA 3225431040,3225431551,NL 3225431552,3225434111,US 3225434112,3225436159,CA -3225436160,3225437695,US -3225438208,3225442559,US -3225443328,3225444607,US +3225436160,3225445375,US 3225445376,3225446399,BE 3225446400,3225450495,US 3225450496,3225451263,AG 3225451264,3225451519,MS +3225451520,3225451775,US 3225451776,3225452031,NL 3225452544,3225456639,CA 3225456640,3225459711,US +3225459712,3225459967,CA 3225459968,3225460479,US -3225460480,3225462783,CA -3225462784,3225468927,US +3225460480,3225462015,CA +3225462016,3225468927,US 3225468928,3225469951,CA -3225470464,3225470719,US +3225470464,3225471487,US 3225471488,3225471743,NL -3225471744,3225472511,US -3225473024,3225498111,US +3225471744,3225472255,HK +3225472256,3225472511,US +3225473024,3225498367,US 3225498368,3225503487,NL -3225503488,3225505535,US -3225505792,3225506047,US +3225503488,3225506303,US 3225506304,3225508863,AU 3225508864,3225509631,CH 3225509632,3225509887,US @@ -57099,39 +64173,40 @@ 3225510144,3225518591,US 3225518592,3225518847,AU 3225518848,3225519359,NL -3225519872,3225520639,US +3225519360,3225520895,US 3225520896,3225521151,NL 3225521152,3225522175,US 3225522176,3225522943,GB 3225522944,3225524223,US 3225524224,3225524479,VE 3225524480,3225524735,GB -3225525248,3225526271,US +3225524736,3225526271,US 3225526272,3225528319,BB 3225529088,3225529343,US 3225529600,3225530367,US 3225530368,3225530623,PR -3225530624,3225530879,US -3225531136,3225531647,US +3225530624,3225531903,US 3225531904,3225532159,AU 3225532160,3225535999,CH 3225536000,3225540863,US 3225540864,3225541119,AU 3225541120,3225541375,US -3225541376,3225544703,GB +3225541376,3225543935,GB +3225543936,3225544703,US 3225544704,3225546751,CA -3225546752,3225548543,US +3225546752,3225548799,US 3225548800,3225549055,AU 3225549056,3225549311,US 3225549312,3225549567,AU -3225549568,3225550591,US +3225549568,3225550847,US 3225550848,3225616383,DK +3225616384,3225616639,US 3225616640,3225616895,AU +3225616896,3225617151,US 3225617152,3225617663,NL -3225617920,3225618175,US -3225618432,3225618687,US +3225617664,3225618687,US 3225618688,3225618943,CA -3225619200,3225619455,US +3225618944,3225619455,US 3225619456,3225619711,AU 3225619712,3225624575,US 3225624576,3225625599,CA @@ -57146,14 +64221,11 @@ 3225629184,3225629439,NL 3225629440,3225629695,US 3225629696,3225629951,NL -3225629952,3225630207,US +3225629952,3225630463,US 3225630464,3225630719,NL 3225630720,3225631231,US 3225631232,3225631487,NL -3225631488,3225632767,US -3225633536,3225633791,US -3225634048,3225634815,US -3225635072,3225635583,US +3225631488,3225635839,US 3225635840,3225636095,NL 3225636096,3225636607,US 3225636608,3225636863,NL @@ -57166,35 +64238,35 @@ 3225640704,3225641983,US 3225641984,3225643263,GB 3225643264,3225643775,CA -3225643776,3225649919,US -3225650176,3225650943,US +3225643776,3225650943,US 3225650944,3225651199,GB -3225651200,3225658367,US -3225658624,3225658879,US +3225651200,3225659135,US 3225659136,3225659391,DE 3225659392,3225659647,AU +3225659648,3225659903,US 3225659904,3225660159,DE 3225660160,3225660415,AU -3225660416,3225664511,US -3225664512,3225669887,DE +3225660416,3225664767,US +3225664768,3225669887,DE 3225669888,3225671935,US 3225671936,3225672191,AU 3225672192,3225672447,DE 3225672448,3225672703,US 3225672704,3225673215,NL +3225673216,3225673471,CA 3225673472,3225673727,IE 3225673728,3225679871,US 3225679872,3225680127,AU 3225680128,3225680383,GR -3225680640,3225681151,US -3225681408,3225681663,US +3225680384,3225680639,CA +3225680640,3225681663,US +3225681664,3225681919,CA 3225681920,3225682943,DE 3225682944,3225683199,AT 3225683200,3225687039,DE 3225687040,3225687807,US 3225687808,3225688063,NL -3225688064,3225689343,US -3225689600,3225689855,US +3225688064,3225689855,US 3225689856,3225694975,NL 3225694976,3225695231,PL 3225695232,3225695487,US @@ -57213,8 +64285,7 @@ 3225717504,3225717759,AU 3225717760,3225720063,US 3225720576,3225721343,GB -3225721344,3225722111,US -3225722624,3225723903,US +3225721344,3225723903,US 3225723904,3225725439,DE 3225725440,3225725695,GB 3225725696,3225726207,AU @@ -57302,13 +64373,17 @@ 3225874944,3225875199,GB 3225875456,3225875967,US 3225876480,3225878271,US -3225878528,3225881343,SE +3225878528,3225880319,SE +3225880320,3225880575,US +3225880576,3225881343,SE 3225881344,3225881599,IT 3225881600,3225885183,SE 3225885184,3225885695,AT 3225885696,3225887999,SE 3225888000,3225888255,GB -3225888256,3225905407,SE +3225888256,3225894399,SE +3225894400,3225894911,GB +3225894912,3225905407,SE 3225905408,3225905663,IT 3225905664,3225913855,SE 3225913856,3225914111,DE @@ -57351,7 +64426,7 @@ 3225942528,3225944063,SE 3225944064,3226008831,TW 3226008832,3226009343,US -3226009856,3226010879,US +3226009600,3226010879,US 3226010880,3226011135,CA 3226011136,3226012671,US 3226012672,3226012927,AU @@ -57397,7 +64472,6 @@ 3226194944,3226201087,CA 3226201088,3226201343,US 3226201344,3226201855,CA -3226201856,3226202111,US 3226202112,3226205439,CA 3226205440,3226205695,AE 3226205696,3226205951,CA @@ -57451,8 +64525,7 @@ 3226393600,3226393855,DE 3226393856,3226397695,US 3226397696,3226400255,DE -3226400256,3226470399,US -3226470656,3226473471,US +3226400256,3226473471,US 3226473472,3226473727,NL 3226473728,3226473983,PT 3226473984,3226474495,US @@ -57477,7 +64550,7 @@ 3226547200,3226548223,CA 3226548992,3226549247,BE 3226549248,3226550271,NL -3226551040,3226551807,US +3226550272,3226552319,US 3226552832,3226553087,US 3226553344,3226555391,US 3226555648,3226555903,CA @@ -57556,9 +64629,7 @@ 3226695680,3226695935,US 3226695936,3226696191,CA 3226696192,3226696703,AU -3226696704,3226698495,US -3226698496,3226698751,CA -3226698752,3226704895,US +3226696704,3226704895,US 3226705152,3226705407,AU 3226705408,3226705919,US 3226705920,3226706175,FR @@ -57592,7 +64663,8 @@ 3226733824,3226734079,NL 3226734080,3226734335,US 3226734336,3226734591,NL -3226734592,3226736383,US +3226734592,3226735615,US +3226735872,3226736383,US 3226736896,3226737407,US 3226737408,3226737663,AT 3226737664,3226738175,US @@ -57623,8 +64695,7 @@ 3226775040,3226775295,US 3226775552,3226782463,FI 3226782720,3226783743,FI -3226783744,3226783999,US -3226784256,3226784767,US +3226783744,3226784767,US 3226784768,3226785023,GB 3226785024,3226786559,US 3226786560,3226786815,AU @@ -57703,7 +64774,7 @@ 3227013120,3227013375,AU 3227013376,3227013887,US 3227013888,3227014399,NL -3227014400,3227014655,NZ +3227014400,3227014655,AU 3227014656,3227014911,NL 3227014912,3227017215,US 3227017472,3227017983,NL @@ -57750,7 +64821,7 @@ 3227237120,3227237631,US 3227237632,3227237887,NO 3227237888,3227238143,US -3227238144,3227238399,GB +3227238144,3227238399,NL 3227238400,3227239935,US 3227240192,3227240447,GB 3227240704,3227240959,GB @@ -57841,7 +64912,7 @@ 3227425792,3227427583,DK 3227427584,3227427839,ES 3227427840,3227429119,US -3227429120,3227429375,NZ +3227429120,3227429375,AU 3227429376,3227429887,US 3227429888,3227430143,NL 3227430144,3227430399,US @@ -57921,9 +64992,7 @@ 3227526656,3227526911,ZA 3227526912,3227533311,MU 3227533312,3227534335,US -3227534336,3227539455,MU -3227539456,3227539711,ZA -3227539712,3227541503,MU +3227534336,3227541503,MU 3227541504,3227541759,ZA 3227541760,3227557887,MU 3227557888,3227558911,US @@ -57944,13 +65013,19 @@ 3227722522,3227722522,US 3227722523,3227724031,CA 3227724032,3227724287,US -3227724288,3227748035,CA +3227724288,3227738879,CA +3227738880,3227739135,US +3227739136,3227748035,CA 3227748036,3227748039,US 3227748040,3227751868,CA 3227751869,3227751869,US -3227751870,3227756505,CA +3227751870,3227755775,CA +3227755776,3227756031,US +3227756032,3227756505,CA 3227756506,3227756506,US -3227756507,3227765503,CA +3227756507,3227762655,CA +3227762656,3227762671,US +3227762672,3227765503,CA 3227765504,3227765759,US 3227765760,3227777759,CA 3227777760,3227777763,US @@ -58017,11 +65092,11 @@ 3227834368,3227837439,MX 3227837440,3227837951,BR 3227837952,3227842303,MX -3227842560,3227842815,BR +3227842304,3227842815,BR 3227842816,3227843327,MX 3227843328,3227843583,BR 3227844096,3227844351,AR -3227844864,3227845119,ES +3227844864,3227845119,NL 3227845120,3227845631,US 3227845632,3227845887,NL 3227846144,3227846655,US @@ -58091,7 +65166,7 @@ 3227934720,3227947519,US 3227947520,3227955711,DE 3227955712,3227964927,US -3227964928,3227965183,GB +3227964928,3227965183,NL 3227965184,3227966975,US 3227967232,3227967487,US 3227967488,3227967999,NL @@ -58163,7 +65238,8 @@ 3228061696,3228061951,AU 3228061952,3228062207,US 3228062208,3228062463,GB -3228062464,3228077055,US +3228062464,3228069631,US +3228069888,3228077055,US 3228077056,3228077311,NL 3228077312,3228077567,US 3228077568,3228077823,NL @@ -58171,7 +65247,7 @@ 3228078848,3228079103,GR 3228079104,3228080639,US 3228080640,3228081151,NL -3228081152,3228081919,US +3228081152,3228082175,US 3228082944,3228083967,US 3228083968,3228084479,NL 3228084480,3228085247,US @@ -58281,8 +65357,7 @@ 3228347392,3228348159,SK 3228348160,3228353279,US 3228353280,3228358399,SE -3228358400,3228361471,US -3228361728,3228362239,US +3228358400,3228362239,US 3228362240,3228362495,AU 3228362496,3228362751,US 3228363008,3228363263,US @@ -58298,7 +65373,8 @@ 3228405504,3228405759,SG 3228405760,3228406015,IN 3228406016,3228406271,US -3228406272,3228407039,FR +3228406272,3228406527,IN +3228406528,3228407039,FR 3228407040,3228420095,DE 3228420608,3228424703,DE 3228424704,3228424959,US @@ -58380,20 +65456,16 @@ 3228628992,3228630527,US 3228630528,3228630783,NL 3228631040,3228696575,NL -3228696576,3228826371,IL +3228696576,3228714764,IL +3228714765,3228714765,CA +3228714766,3228826371,IL 3228826372,3228826372,US 3228826373,3228830719,IL 3228830720,3228833791,PS 3228833792,3229024255,IL 3229024512,3229024767,US 3229025280,3229058047,US -3229058816,3229061119,US -3229061120,3229062433,CA -3229062434,3229062450,US -3229062451,3229064951,CA -3229064952,3229064955,US -3229064956,3229065215,CA -3229065216,3229092095,US +3229058816,3229092095,US 3229092096,3229093887,AU 3229093888,3229104895,US 3229104896,3229105151,ES @@ -58411,9 +65483,11 @@ 3229160960,3229161471,DE 3229161472,3229161727,SE 3229161728,3229161983,GB -3229161984,3229164543,SE +3229161984,3229164287,SE +3229164288,3229164543,DK 3229164544,3229165055,GB -3229165056,3229167103,SE +3229165056,3229165311,NO +3229165312,3229167103,SE 3229167104,3229167615,IT 3229167616,3229171711,SE 3229171712,3229172223,GB @@ -58421,15 +65495,20 @@ 3229182464,3229182975,GB 3229182976,3229183999,SE 3229184000,3229184511,GB -3229184512,3229195263,SE +3229184512,3229186815,SE +3229186816,3229187327,ES +3229187328,3229187583,SE +3229187584,3229187839,DK +3229187840,3229195263,SE 3229195264,3229196287,DE 3229196288,3229196799,SE 3229196800,3229197311,NL 3229197312,3229197823,SE 3229197824,3229198335,GB -3229198336,3229198847,SE +3229198336,3229198591,SE +3229198592,3229198847,ES 3229198848,3229199103,CH -3229199104,3229199359,AT +3229199104,3229199359,IT 3229199360,3229200383,SE 3229200384,3229200895,GB 3229200896,3229201151,DE @@ -58452,7 +65531,7 @@ 3229264896,3229265919,US 3229265920,3229266175,AU 3229266176,3229266943,US -3229266944,3229267199,NZ +3229266944,3229267199,AU 3229267200,3229272319,US 3229273856,3229274623,US 3229274624,3229274879,AU @@ -58539,7 +65618,9 @@ 3229844736,3229844991,US 3229845248,3229845503,US 3229845504,3229847295,CA -3229847296,3229870335,US +3229847296,3229849599,US +3229849600,3229849855,AU +3229849856,3229870335,US 3229870848,3229874943,US 3229874944,3229875455,AU 3229875456,3229875967,US @@ -58583,9 +65664,7 @@ 3229940736,3229940991,CH 3229940992,3229941247,AU 3229941248,3229941503,US -3229942272,3229942783,US -3229943040,3229943295,US -3229943552,3229944319,US +3229941760,3229944319,US 3229944320,3229944575,AU 3229944576,3229945087,US 3229945344,3229945599,AU @@ -58595,7 +65674,7 @@ 3229947392,3229948927,US 3229948928,3229949183,IT 3229949184,3229949695,US -3229949696,3229949951,NZ +3229949696,3229949951,AU 3229949952,3229950207,NL 3229950208,3229950975,US 3229950976,3229951231,NL @@ -58626,7 +65705,7 @@ 3230004224,3230004479,NL 3230004480,3230004991,US 3230005760,3230006015,MU -3230006016,3230007295,US +3230006016,3230007039,US 3230007296,3230072831,FR 3230072832,3230074623,US 3230074624,3230074879,DE @@ -58719,8 +65798,7 @@ 3230156544,3230164991,FI 3230165504,3230167295,US 3230167552,3230168063,CA -3230168832,3230174463,US -3230175232,3230177791,US +3230168832,3230177791,US 3230177792,3230178303,GB 3230178304,3230178559,CH 3230179328,3230210047,US @@ -58792,15 +65870,13 @@ 3230295040,3230295295,AU 3230295296,3230296319,US 3230296320,3230297343,NO -3230297344,3230299647,SE +3230297344,3230300159,SE 3230301696,3230302207,US -3230302464,3230302719,CA 3230302976,3230307327,US 3230307584,3230309119,US 3230309120,3230309375,NO 3230309376,3230310143,GB -3230310144,3230310655,US -3230310912,3230316287,US +3230310144,3230316287,US 3230316288,3230316543,NL 3230316544,3230316799,US 3230316800,3230317311,CA @@ -58837,9 +65913,12 @@ 3230372864,3230383359,CA 3230383616,3230384127,CA 3230384384,3230387455,CA -3230387712,3230400255,CA +3230387712,3230390015,CA +3230390016,3230390271,US +3230390272,3230400255,CA 3230681088,3230683135,FR -3230787584,3230797311,US +3230787584,3230793727,US +3230793984,3230797311,US 3230797312,3230797567,SG 3230797568,3230823679,US 3230823680,3230823935,NL @@ -58874,7 +65953,7 @@ 3230842112,3230842367,AU 3230842624,3230843135,US 3230843136,3230843391,NL -3230843392,3230844671,US +3230843392,3230844927,US 3230844928,3230845183,AU 3230845184,3230845951,US 3230845952,3230846207,CZ @@ -59233,6 +66312,7 @@ 3231285248,3231291647,US 3231291648,3231291903,NL 3231291904,3231292159,US +3231292160,3231292415,MX 3231292416,3231292927,US 3231292928,3231293183,AU 3231293184,3231294975,US @@ -59247,7 +66327,7 @@ 3231300352,3231300607,US 3231300608,3231301119,NL 3231301120,3231302143,US -3231302144,3231302399,NO +3231302144,3231302399,NL 3231302400,3231302655,US 3231302656,3231303167,AU 3231303168,3231307007,US @@ -59263,11 +66343,16 @@ 3231319040,3231322111,US 3231322112,3231324671,SG 3231325184,3231326207,CA -3231326208,3231352831,US +3231326208,3231349759,US +3231350528,3231352831,US 3231352832,3231358975,CA -3231358976,3231383551,US +3231358976,3231369215,US +3231369216,3231369471,TW +3231369472,3231383551,US 3231383552,3231385599,NO -3231385600,3231477759,US +3231385600,3231444071,US +3231444072,3231444079,CA +3231444080,3231477759,US 3231477760,3231478015,CA 3231478016,3231482879,US 3231482880,3231483135,BE @@ -59312,9 +66397,7 @@ 3231513600,3231514367,US 3231514624,3231515647,NO 3231515648,3231516159,US -3231516672,3231518719,SE -3231518720,3231518975,BR -3231518976,3231519231,SE +3231516672,3231519231,SE 3231519744,3231521791,US 3231522560,3231528959,US 3231528960,3231528991,CA @@ -59367,8 +66450,8 @@ 3231588864,3231589119,GB 3231589120,3231591679,US 3231591680,3231591935,AU -3231591936,3231593983,US -3231593984,3231594495,GB +3231591936,3231594239,US +3231594240,3231594495,GB 3231594496,3231641855,US 3231641856,3231642111,SG 3231642112,3231644927,US @@ -59406,7 +66489,7 @@ 3231711232,3231713023,US 3231713024,3231713279,CA 3231713280,3231713791,US -3231713792,3231714047,GB +3231713792,3231714047,NL 3231714048,3231715071,US 3231715072,3231715327,NL 3231715328,3231715583,AU @@ -59429,8 +66512,7 @@ 3231723008,3231723519,US 3231723776,3231724031,US 3231724032,3231724287,BR -3231724288,3231725055,US -3231725312,3231727871,US +3231724288,3231727871,US 3231727872,3231728127,NL 3231728384,3231728639,NL 3231728640,3231729407,US @@ -59441,7 +66523,8 @@ 3231737600,3231738367,US 3231738368,3231738623,NL 3231738624,3231739135,US -3231739136,3231739647,NL +3231739136,3231739391,GB +3231739392,3231739647,NL 3231739648,3231739903,BR 3231739904,3231742719,US 3231742720,3231742975,NL @@ -59491,8 +66574,7 @@ 3231800320,3231801343,CN 3231801344,3231809535,CA 3231809536,3231810047,AU -3231810560,3231825919,US -3231825920,3231842303,CA +3231810560,3231842303,US 3231842304,3231843327,RU 3231843328,3231844351,NO 3231844352,3231845375,RU @@ -59571,7 +66653,9 @@ 3232065792,3232066303,GB 3232066304,3232066559,SE 3232066560,3232066815,NO -3232066816,3232079871,SE +3232066816,3232070399,SE +3232070400,3232070655,ES +3232070656,3232079871,SE 3232079872,3232080895,GB 3232080896,3232082687,SE 3232082688,3232083199,GB @@ -59594,11 +66678,16 @@ 3232098304,3232100095,SE 3232100096,3232100351,IE 3232100352,3232101119,GB -3232101120,3232104447,SE +3232101120,3232102143,SE +3232102144,3232102144,DK +3232102145,3232102145,SE +3232102146,3232102399,DK +3232102400,3232104447,SE 3232104448,3232106495,DE 3232107520,3232108543,RU 3232108544,3232112639,DE -3232116736,3232129023,DE +3232116736,3232125183,DE +3232125952,3232129023,DE 3232129024,3232130047,NL 3232130048,3232131071,UA 3232131072,3232133119,DE @@ -59676,9 +66765,9 @@ 3232724152,3232724159,US 3232724160,3232727039,CA 3232727040,3232759807,US -3232759808,3232772095,SE -3232772096,3232774143,IT -3232774144,3232774911,SE +3232759808,3232765951,SE +3232765952,3232766207,NO +3232766208,3232774911,SE 3232774912,3232775167,IE 3232775168,3232794879,SE 3232794880,3232795135,DE @@ -59771,8 +66860,7 @@ 3233590528,3233590783,PR 3233590784,3233591295,AU 3233591552,3233593599,US -3233593600,3233593855,NZ -3233593856,3233594111,AU +3233593600,3233594111,AU 3233594112,3233594367,NL 3233594368,3233594623,US 3233594624,3233594879,NL @@ -59806,7 +66894,7 @@ 3233625600,3233625855,AU 3233625856,3233626111,NL 3233626112,3233626879,US -3233627136,3233628671,US +3233627136,3233628415,US 3233628672,3233628927,FR 3233628928,3233629439,CA 3233629440,3233629695,GB @@ -59839,7 +66927,7 @@ 3233654272,3233655551,GB 3233655552,3233662975,US 3233663488,3233663999,NL -3233664256,3233665023,US +3233664000,3233665023,US 3233665024,3233666047,AU 3233666048,3233668863,US 3233668864,3233669119,AU @@ -59852,6 +66940,7 @@ 3233677312,3233679103,US 3233679360,3233682431,US 3233682944,3233684991,US +3233684992,3233685247,MX 3233685248,3233685503,BR 3233685760,3233688063,US 3233688576,3233688831,NL @@ -59955,11 +67044,7 @@ 3233808384,3233873919,TW 3233873920,3233874175,US 3233874176,3233874687,AU -3233874688,3233903615,US -3233903616,3233903743,GB -3233903744,3233903807,US -3233903808,3233903871,GB -3233903872,3233926294,US +3233874688,3233926294,US 3233926295,3233926295,MX 3233926296,3233939455,US 3233939456,3234004991,FI @@ -60065,13 +67150,16 @@ 3234232576,3234232831,US 3234232832,3234233087,BR 3234233088,3234238975,US -3234238976,3234239487,MY -3234239488,3234240383,US +3234238976,3234239231,MY +3234239232,3234239327,US +3234239328,3234239329,MY +3234239330,3234240383,US 3234240384,3234240387,IE 3234240388,3234240607,US 3234240608,3234240611,IL 3234240612,3234247167,US -3234247680,3234269695,US +3234247680,3234267135,US +3234267392,3234269695,US 3234270208,3234271231,CA 3234271232,3234275327,PT 3234275328,3234279423,AU @@ -60083,7 +67171,14 @@ 3234316288,3234320383,CA 3234320384,3234332671,US 3234332928,3234334975,US -3234335744,3234349055,US +3234335744,3234338815,US +3234338816,3234339071,CN +3234339072,3234339327,MT +3234339328,3234339583,LB +3234339584,3234339839,PA +3234339840,3234340095,US +3234340096,3234340351,IN +3234340352,3234349055,US 3234349056,3234353151,NZ 3234353152,3234549759,US 3234549760,3234550015,RU @@ -60129,7 +67224,8 @@ 3234726144,3234726399,CA 3234726400,3234726911,US 3234726912,3234727935,CA -3234727936,3234733055,US +3234727936,3234730495,US +3234730752,3234733055,US 3234733056,3234733311,CA 3234733312,3234735103,US 3234735616,3234737407,US @@ -60160,7 +67256,8 @@ 3234781440,3234781951,CA 3234781952,3234782719,US 3234782720,3234783999,IL -3234784000,3234791167,US +3234784000,3234786815,US +3234787328,3234791167,US 3234791424,3234794495,US 3234794752,3234795007,US 3234795008,3234795263,NL @@ -60227,15 +67324,15 @@ 3234861056,3234886143,US 3234886656,3234926847,US 3234927616,3234988031,US -3234988032,3234990847,CA +3234988032,3234991103,CA 3234991104,3234998783,US 3234999296,3235004415,US 3235004416,3235021823,CA 3235021824,3235026943,US -3235026944,3235028991,CA -3235028992,3235045375,US -3235045376,3235046143,CA -3235046144,3235085311,US +3235026944,3235027967,CA +3235027968,3235045375,US +3235045376,3235045887,CA +3235045888,3235085311,US 3235085312,3235086335,CA 3235086336,3235184639,US 3235184640,3235184895,CA @@ -60345,7 +67442,12 @@ 3236233216,3236238591,US 3236239360,3236241407,CA 3236241408,3236302847,US -3236306944,3236364287,US +3236306944,3236312063,US +3236312064,3236312319,MO +3236312320,3236312575,GH +3236312576,3236312831,GR +3236312832,3236313087,QA +3236313088,3236364287,US 3236364544,3236365567,US 3236365824,3236368127,US 3236368128,3236368383,AU @@ -60475,10 +67577,7 @@ 3236826112,3236827135,CA 3236827136,3236958207,US 3236958208,3236962303,AU -3236962304,3236966143,US -3236966400,3237021695,US -3237021696,3237023743,CA -3237023744,3237038079,US +3236962304,3237038079,US 3237038080,3237038335,CA 3237038336,3237043967,US 3237043968,3237044223,CH @@ -60525,8 +67624,7 @@ 3237308672,3237310719,AU 3237310720,3237312767,US 3237312768,3237313023,BO -3237313024,3237317631,US -3237317888,3237319679,US +3237313024,3237319679,US 3237319680,3237319935,MU 3237319936,3237320703,US 3237320704,3237320959,UA @@ -60586,7 +67684,9 @@ 3237634310,3237634310,GB 3237634311,3237647103,US 3237647104,3237647359,AU -3237647360,3237679359,US +3237647360,3237648639,US +3237648640,3237648895,AU +3237648896,3237679359,US 3237679872,3237681663,US 3237681664,3237682943,CA 3237682944,3237684991,US @@ -60621,7 +67721,7 @@ 3237781504,3237785599,CA 3237785600,3237797887,US 3237797888,3237801983,CA -3237806080,3237857535,US +3237801984,3237857535,US 3237858304,3237863423,CA 3237863424,3237867519,US 3237867520,3237867775,HK @@ -60662,7 +67762,7 @@ 3237961472,3237961727,HT 3237961728,3238002687,US 3238002688,3238008831,NL -3238008832,3238010879,PL +3238008832,3238010879,GB 3238010880,3238017023,CH 3238017024,3238018303,DK 3238018304,3238018559,UA @@ -60743,7 +67843,7 @@ 3238536192,3238537215,DK 3238537216,3238538495,CH 3238538496,3238538751,PL -3238538752,3238539263,RU +3238538752,3238539263,UA 3238539264,3238541567,CH 3238541568,3238541823,PL 3238541824,3238542591,CH @@ -60826,8 +67926,8 @@ 3238867968,3238887423,SE 3238887424,3238888447,NL 3238888448,3238893567,SE -3238893568,3238894591,NL -3238894592,3238897663,SE +3238893568,3238895615,NL +3238895616,3238897663,SE 3238897664,3238899711,NL 3238899712,3238901759,SE 3238901760,3238902783,NL @@ -60856,7 +67956,9 @@ 3238993920,3238995967,HR 3238995968,3239001087,SE 3239001088,3239002111,NL -3239002112,3239008255,SE +3239002112,3239006207,SE +3239006208,3239007231,NL +3239007232,3239008255,SE 3239008256,3239009279,NL 3239009280,3239018495,SE 3239018496,3239020543,HR @@ -60866,7 +67968,6 @@ 3239026688,3239028735,HR 3239028736,3239051263,SE 3239051264,3239053311,DE -3239054336,3239054847,DE 3239055360,3239059455,DE 3239062272,3239062527,ES 3239062528,3239062783,CH @@ -61044,9 +68145,7 @@ 3239275520,3239276543,UA 3239276544,3239277055,LU 3239277056,3239277567,DE -3239277568,3239278079,RU -3239278080,3239278591,UA -3239278592,3239279103,RU +3239277568,3239279103,RU 3239279104,3239280127,PL 3239280128,3239280639,RU 3239281664,3239282687,RU @@ -61104,7 +68203,7 @@ 3239468288,3239468543,RO 3239468544,3239468799,NO 3239468800,3239469055,RO -3239469056,3239470591,DE +3239470080,3239470591,DE 3239470592,3239470847,CH 3239470848,3239471103,BG 3239471872,3239472127,FR @@ -61114,7 +68213,7 @@ 3239480320,3239480575,UA 3239480832,3239481087,CH 3239481088,3239481343,FR -3239481344,3239486719,DE +3239485440,3239486719,DE 3239486720,3239486975,ES 3239486976,3239487487,DE 3239487744,3239487999,PL @@ -61166,9 +68265,8 @@ 3239541248,3239541503,UA 3239541504,3239541759,FR 3239541760,3239542015,GB -3239542016,3239542271,PL 3239542272,3239542527,RU -3239542784,3239544831,DE +3239543808,3239544831,DE 3239544832,3239545087,GB 3239545088,3239545343,SI 3239545344,3239545855,HU @@ -61202,7 +68300,9 @@ 3239574016,3239574783,DE 3239575040,3239575295,DE 3239575296,3239575551,DK -3239575552,3239578879,DE +3239576064,3239576319,DE +3239576576,3239576831,DE +3239577088,3239578879,DE 3239579136,3239579391,PL 3239579392,3239581695,DE 3239581696,3239581951,PL @@ -61215,7 +68315,8 @@ 3239583744,3239584767,DE 3239585024,3239585279,DE 3239587840,3239591935,DE -3239591936,3239592447,FI +3239591936,3239592191,FI +3239592192,3239592447,CN 3239592448,3239592703,US 3239592704,3239593983,FI 3239593984,3239624703,DE @@ -61447,7 +68548,7 @@ 3239896064,3239896575,DE 3239896576,3239896831,PL 3239896832,3239897087,HU -3239897088,3239897343,IE +3239897088,3239897343,GB 3239897344,3239897599,FR 3239897600,3239897855,RU 3239897856,3239898111,FR @@ -61460,7 +68561,7 @@ 3239902464,3239902719,RU 3239902720,3239902975,EE 3239903232,3239904255,DE -3239904512,3239904767,DE +3239904512,3239904767,GB 3239905024,3239907327,DE 3239907328,3239907583,UA 3239907584,3239907839,DE @@ -61477,11 +68578,8 @@ 3239916800,3239917055,KZ 3239917056,3239917311,DE 3239917312,3239917567,BG -3239919616,3239922687,DE -3239922688,3239922724,LU -3239922725,3239922725,DE -3239922726,3239922943,LU -3239922944,3239935999,DE +3239919616,3239927807,DE +3239931904,3239935999,DE 3239936512,3239938815,DE 3239938816,3239939071,NL 3239939072,3239949311,DE @@ -61501,7 +68599,8 @@ 3239960064,3239960319,FR 3239960320,3239960575,GB 3239960576,3239966719,DE -3239967232,3239968255,DE +3239967232,3239967487,DE +3239967744,3239968255,DE 3239968512,3239968767,PL 3239968768,3239969023,NO 3239969536,3239971839,DE @@ -61514,7 +68613,8 @@ 3239978752,3239979007,RU 3239979264,3239979519,GB 3239979520,3239979775,DE -3239980032,3239996415,DE +3239980032,3239993343,DE +3239995392,3239996415,DE 3239996416,3239996671,GB 3239996928,3239997183,BE 3239997184,3239997439,GB @@ -61549,7 +68649,7 @@ 3240085504,3240087551,KZ 3240087552,3240097791,DE 3240098816,3240099327,CH -3240100352,3240100863,GB +3240100608,3240100863,GB 3240101376,3240101887,GB 3240102144,3240102399,GB 3240102912,3240103935,UA @@ -61580,11 +68680,7 @@ 3240120832,3240121343,GB 3240122368,3240123391,GB 3240125440,3240125695,RO -3240125696,3240132607,GB -3240140800,3240142847,GB -3240153600,3240154111,GB -3240161536,3240161791,GB -3240163840,3240165375,GB +3240125696,3240165375,GB 3240165376,3240165887,PL 3240165888,3240166399,ES 3240166400,3240166911,PL @@ -61756,7 +68852,6 @@ 3240280704,3240280831,RU 3240280832,3240280959,GB 3240280960,3240281215,PL -3240281216,3240281343,FR 3240281344,3240281471,PL 3240281472,3240281599,FR 3240281600,3240281727,JO @@ -61852,7 +68947,7 @@ 3240423424,3240435711,GB 3240436480,3240436735,GB 3240436736,3240437759,DE -3240438784,3240443903,GB +3240438784,3240439807,GB 3240450048,3240454911,GB 3240454912,3240455167,IN 3240456192,3240460287,GB @@ -61882,7 +68977,8 @@ 3240467968,3240468223,DE 3240468224,3240468479,CH 3240468480,3240476671,GB -3240484864,3240486911,GB +3240485120,3240485375,GB +3240485632,3240486399,GB 3240487424,3240487935,GB 3240487936,3240488191,CH 3240488192,3240488447,GB @@ -61899,7 +68995,8 @@ 3240534016,3240536640,GB 3240536641,3240536641,US 3240536642,3240550399,GB -3240558592,3240575487,GB +3240558592,3240560127,GB +3240560640,3240575487,GB 3240575488,3240575743,RO 3240575744,3240575999,GB 3240576000,3240576255,DE @@ -61922,7 +69019,7 @@ 3240588800,3240589055,UA 3240589056,3240589311,RO 3240589312,3240593407,SE -3240593408,3240594175,GB +3240593408,3240593663,GB 3240594176,3240594431,DK 3240594432,3240599551,GB 3240602624,3240605695,GB @@ -61931,7 +69028,6 @@ 3240615936,3240622079,GB 3240622080,3240622591,RU 3240622592,3240623103,GB -3240623872,3240624127,GB 3240624128,3240689663,EE 3240689664,3240690175,GB 3240690176,3240690687,TR @@ -62037,7 +69133,8 @@ 3240754176,3240755199,DE 3240755200,3240759295,IT 3240771584,3240779775,IT -3240788992,3240791551,IT +3240788992,3240790015,IT +3240790528,3240791551,IT 3240791552,3240791807,RU 3240791808,3240792063,ES 3240792064,3240792319,GB @@ -62065,11 +69162,7 @@ 3240812288,3240812543,KW 3240813568,3240814591,PL 3240814592,3240816639,IT -3240818688,3240819711,NL -3240819712,3240819715,GB -3240819716,3240819716,NL -3240819717,3240819967,GB -3240819968,3240820735,NL +3240818688,3240820735,NL 3240820736,3240820799,FR 3240820800,3240820831,CY 3240820832,3240820863,GB @@ -62082,7 +69175,7 @@ 3240827392,3240827647,BG 3240827648,3240827903,CH 3240828160,3240828415,DE -3240828416,3240837119,IT +3240828928,3240837119,IT 3240839424,3240839679,IT 3240840192,3240840447,IT 3240840448,3240840703,PL @@ -62096,7 +69189,8 @@ 3240845312,3240845823,IT 3240846336,3240846847,IT 3240846848,3240847359,VA -3240847360,3240852735,IT +3240847360,3240848895,IT +3240849152,3240852735,IT 3240852736,3240852991,GB 3240853248,3240853503,RU 3240853504,3240854527,VA @@ -62131,7 +69225,8 @@ 3240886272,3241017343,SE 3241017344,3241017855,AT 3241017856,3241018111,RU -3241018112,3241029119,AT +3241018112,3241018367,FR +3241018368,3241029119,AT 3241029120,3241029375,UA 3241029376,3241029631,PL 3241029632,3241031679,AT @@ -62254,15 +69349,19 @@ 3241146624,3241146879,RO 3241146880,3241147903,CH 3241148160,3241148415,CH -3241148416,3241476095,FR -3241476608,3241477631,BE +3241148416,3241416767,FR +3241416768,3241416831,US +3241416832,3241476095,FR +3241476608,3241477375,BE 3241477632,3241477887,GB 3241478144,3241481727,BE 3241481728,3241481983,PT 3241481984,3241482239,DE 3241482240,3241484799,SE 3241484800,3241485055,BE -3241485312,3241496575,BE +3241485312,3241486591,BE +3241486592,3241487615,SE +3241487616,3241496575,BE 3241496576,3241496831,AT 3241497344,3241497599,UA 3241497600,3241497855,SE @@ -62284,8 +69383,10 @@ 3241508864,3241541375,BE 3241541376,3241541631,PL 3241541632,3241672703,FR -3241673472,3241689087,FR -3241691136,3241699327,FR +3241673728,3241678847,FR +3241680896,3241689087,FR +3241691136,3241692159,FR +3241693184,3241699327,FR 3241699584,3241699839,FR 3241699840,3241700095,SE 3241700096,3241723903,FR @@ -62316,7 +69417,6 @@ 3241842688,3241843455,BE 3241843456,3241843711,CH 3241843712,3241848063,BE -3241851904,3241852927,GB 3241852928,3241854463,SK 3241854464,3241854975,GB 3241854976,3241855999,DE @@ -62368,9 +69468,7 @@ 3243238400,3243245567,NL 3243245568,3243376639,AT 3243376640,3243442175,GB -3243442176,3243443199,AT -3243443200,3243443455,DE -3243443456,3243507711,AT +3243442176,3243507711,AT 3243507712,3243507967,GB 3243509248,3243509759,CZ 3243509760,3243510015,RU @@ -62735,7 +69833,6 @@ 3244882176,3244882431,UA 3244882432,3244882687,IT 3244882688,3244882943,PL -3244882944,3244883199,NL 3244883200,3244883455,RU 3244883456,3244883711,CZ 3244883712,3244883967,NL @@ -62963,7 +70060,6 @@ 3244945664,3244945919,NL 3244945920,3244946175,PL 3244946176,3244946431,TR -3244946432,3244946687,RO 3244946688,3244946943,RU 3244946944,3244947455,DE 3244947456,3244947711,PL @@ -63142,10 +70238,7 @@ 3245126656,3245126911,FR 3245126912,3245127167,DE 3245127168,3245127423,RU -3245127424,3245127679,AT -3245127680,3245127742,US -3245127743,3245127743,DE -3245127744,3245127935,US +3245127680,3245127935,DE 3245127936,3245128191,LV 3245128192,3245128447,IT 3245128448,3245128703,CH @@ -63161,7 +70254,6 @@ 3245132288,3245132543,PL 3245132544,3245132799,FR 3245132800,3245133311,IT -3245133312,3245133567,PL 3245134080,3245134335,UA 3245134336,3245134591,NL 3245134848,3245135103,AT @@ -63216,7 +70308,6 @@ 3245169152,3245169407,IT 3245169408,3245169663,PL 3245169920,3245170175,PT -3245170176,3245170431,GB 3245170432,3245170687,CH 3245170688,3245171711,DE 3245172736,3245173759,IT @@ -63291,8 +70382,7 @@ 3245219840,3245221887,FI 3245221888,3245223935,DE 3245223936,3245225471,NL -3245225472,3245225727,GB -3245225728,3245225983,NL +3245225472,3245225983,GB 3245225984,3245228031,HU 3245228032,3245229055,FI 3245229056,3245230079,DE @@ -63323,7 +70413,7 @@ 3245243392,3245244415,UA 3245244416,3245244671,ES 3245244672,3245244927,AT -3245244928,3245245183,BE +3245244928,3245245183,US 3245245440,3245245695,BG 3245245696,3245245951,DE 3245246720,3245246975,PL @@ -63470,8 +70560,6 @@ 3246129152,3246260223,RU 3246260224,3246325759,PT 3246351616,3246352639,ES -3246374400,3246374655,ES -3246376960,3246377215,ES 3246378752,3246379007,ES 3246379008,3246381055,GB 3246391296,3246613503,GB @@ -63479,8 +70567,7 @@ 3246614528,3246744543,GB 3246744544,3246744559,NG 3246744560,3246784511,GB -3246784512,3246825727,CH -3246825728,3246825983,GB +3246784512,3246825983,CH 3246825984,3246826239,US 3246826240,3246915583,CH 3246915584,3247046655,PT @@ -63574,9 +70661,9 @@ 3247112192,3247177727,FR 3247177728,3247243263,TR 3247243264,3247244287,DE -3247244288,3247252319,NL -3247252320,3247252327,DE -3247252328,3247253503,NL +3247244288,3247250175,NL +3247250176,3247250431,DE +3247250432,3247253503,NL 3247253504,3247254527,DE 3247254528,3247267839,NL 3247267840,3247268351,DE @@ -63590,7 +70677,8 @@ 3247309824,3247313663,FI 3247313664,3247313919,AM 3247313920,3247316479,FI -3247316480,3247316991,RU +3247316480,3247316735,IR +3247316736,3247316991,RU 3247321600,3247322111,FI 3247322368,3247322623,DE 3247322624,3247323135,FI @@ -63618,7 +70706,7 @@ 3247341312,3247341567,DE 3247343616,3247345663,FI 3247345920,3247346175,HU -3247346176,3247346943,FI +3247346432,3247346943,FI 3247346944,3247347199,SI 3247347200,3247347455,FI 3247347456,3247347711,IL @@ -63675,7 +70763,7 @@ 3247438848,3247439871,FI 3247439872,3247702015,ES 3247702016,3247702271,RO -3247702528,3247703551,ES +3247702528,3247703295,ES 3247703552,3247704063,FR 3247705856,3247706111,RU 3247708160,3247711743,ES @@ -63772,7 +70860,8 @@ 3247909888,3247910911,DE 3247910912,3247912959,PL 3247912960,3247913983,UA -3247913984,3247915007,DE +3247913984,3247914495,DE +3247914496,3247915007,AT 3247915008,3247917055,PL 3247917056,3247918079,NL 3247918080,3247919103,PL @@ -63813,7 +70902,6 @@ 3248521984,3248522239,RU 3248522240,3248522751,NO 3248523264,3248524287,NO -3248525312,3248525567,DE 3248526336,3248527359,NO 3248528384,3248528895,NO 3248528896,3248529151,RU @@ -63827,30 +70915,31 @@ 3248551936,3248553215,NO 3248553728,3248553983,RU 3248553984,3248554239,RO -3248554496,3248557055,NO 3248557056,3248558079,UA 3248558080,3248575487,NO 3248575488,3248576511,CZ -3248576512,3248591871,NO -3248592384,3248599039,NO +3248576512,3248582655,NO +3248584704,3248586751,NO +3248589312,3248589823,NO +3248590848,3248591871,NO +3248592896,3248599039,NO 3248599040,3248603135,SE 3248603136,3248603391,BG 3248603392,3248603647,RU 3248603648,3248604159,NO -3248604928,3248608767,NO -3248609280,3248619519,NO +3248606208,3248608255,NO +3248609280,3248610303,NO +3248611328,3248619519,NO 3248619520,3248624383,DK 3248624384,3248624639,US 3248624640,3248750591,DK 3248750592,3248750847,PT -3248751616,3248752127,PL 3248752640,3248752895,DE 3248752896,3248753151,TR 3248753408,3248753663,GB 3248753664,3248753919,FR 3248753920,3248754431,GB 3248754432,3248754687,AT -3248754688,3248758783,PL 3248758784,3248774143,SE 3248774144,3248775167,UA 3248775168,3248783615,GB @@ -63896,10 +70985,8 @@ 3248807936,3248808447,AT 3248808448,3248808959,GR 3248808960,3248810111,FR -3248810112,3248810143,RU 3248810144,3248810175,CY 3248810176,3248810207,FR -3248810208,3248810239,GB 3248810240,3248810495,CH 3248810496,3248812543,AT 3248812544,3248813055,GB @@ -63910,12 +70997,12 @@ 3248816128,3248881663,CZ 3248881664,3249012735,FI 3249012736,3249012991,DE -3249012992,3249014271,LU +3249012992,3249014015,LU 3249014272,3249014783,DE 3249014784,3249025023,LU 3249025536,3249025791,FR 3249026560,3249026815,PL -3249026816,3249045503,LU +3249027584,3249045503,LU 3249045504,3249078271,DE 3249078272,3249078783,RU 3249078784,3249079295,CH @@ -64022,28 +71109,28 @@ 3249141760,3249142271,RU 3249142784,3249143295,UA 3249143296,3249143807,GB -3249143808,3249242879,AT -3249242880,3249243135,DE -3249243136,3249274879,AT +3249143808,3249274879,AT 3249274880,3249405951,NL 3249405952,3249521279,DE 3249521280,3249521343,UA 3249521344,3249537023,DE 3249537024,3249537279,PT -3249537536,3249537791,NL 3249537792,3249538047,GB -3249538048,3249551359,NL +3249538048,3249541119,NL +3249545216,3249551359,NL 3249551360,3249552639,GB -3249552640,3249565695,NL +3249552640,3249553407,NL +3249561600,3249565695,NL 3249569792,3249574143,NL 3249574144,3249574399,RU 3249574400,3249574655,GB 3249574656,3249574911,UA -3249574912,3249583103,NL -3249583616,3249590527,NL +3249574912,3249576191,NL +3249577728,3249583103,NL +3249584128,3249590527,NL 3249590528,3249590783,FR -3249590784,3249591295,NL -3249591808,3249600255,NL +3249591808,3249595391,NL +3249595904,3249600255,NL 3249600256,3249600511,AT 3249600512,3249601535,UA 3249601536,3249601791,RU @@ -64056,9 +71143,11 @@ 3249677056,3249677311,SE 3249677312,3249678847,IE 3249679104,3249679359,CH -3249679360,3249683455,IE +3249679360,3249682943,IE 3249683456,3249684479,SE -3249684480,3249698047,IE +3249684480,3249696767,IE +3249697280,3249697535,IE +3249697792,3249698047,IE 3249698048,3249698303,PL 3249698304,3249698559,RU 3249698560,3249698815,HU @@ -64069,8 +71158,8 @@ 3249702144,3249702399,FI 3249702400,3249702655,FR 3249702656,3249702911,RU -3249702912,3249703679,FR -3249703680,3249703935,GB +3249702912,3249703167,FR +3249703424,3249703679,FR 3249703936,3249704191,FR 3249704192,3249704447,RO 3249704704,3249704959,PL @@ -64090,7 +71179,6 @@ 3249710592,3249710847,BG 3249710848,3249711103,PL 3249711104,3249711359,HU -3249711360,3249711615,DE 3249711872,3249712127,AT 3249712384,3249712639,GB 3249712896,3249713151,DK @@ -64113,7 +71201,6 @@ 3249723392,3249723647,IT 3249723648,3249723903,GB 3249724160,3249724415,LU -3249724416,3249724671,IL 3249724672,3249724927,RU 3249724928,3249725183,BG 3249725184,3249725439,GB @@ -64223,7 +71310,9 @@ 3250010368,3250010879,CH 3250010880,3250012159,SE 3250012160,3250013183,DE -3250013184,3250020863,SE +3250013184,3250015231,SE +3250015232,3250015743,FI +3250015744,3250020863,SE 3250020864,3250021375,IT 3250021376,3250022399,FR 3250022400,3250023423,SE @@ -64239,7 +71328,9 @@ 3250035456,3250035711,US 3250035712,3250038271,SE 3250038272,3250039295,ES -3250039296,3250042623,SE +3250039296,3250039807,SE +3250039808,3250040319,GB +3250040320,3250042623,SE 3250042624,3250043135,FR 3250043136,3250061311,SE 3250061312,3250192383,FI @@ -64254,7 +71345,7 @@ 3250194688,3250194943,UA 3250194944,3250195199,RO 3250195456,3250195711,DE -3250195712,3250196223,GB +3250195712,3250195967,GB 3250196224,3250196479,UA 3250196480,3250200575,AT 3250200576,3250200831,HU @@ -64312,8 +71403,7 @@ 3250357904,3250357919,FR 3250357920,3250357927,PL 3250357928,3250357959,CY -3250357960,3250357967,GB -3250357976,3250358015,GB +3250357984,3250357999,GB 3250358016,3250358527,LB 3250358528,3250358783,HU 3250359296,3250359807,HU @@ -64390,7 +71480,6 @@ 3250588928,3250589183,GB 3250589184,3250589439,DE 3250589504,3250589567,HR -3250589632,3250589695,NO 3250589696,3250593791,CH 3250593792,3250594815,GB 3250594816,3250595327,UA @@ -64415,7 +71504,6 @@ 3250667520,3250675711,PL 3250675712,3250683903,GB 3250683904,3250692095,CH -3250692096,3250692351,NO 3250692352,3250692607,NL 3250693376,3250693631,UA 3250693632,3250694143,DE @@ -64457,7 +71545,7 @@ 3250751488,3250751999,DE 3250752000,3250752511,CH 3250752512,3250753023,BG -3250753024,3250754047,DE +3250753536,3250754047,DE 3250754048,3250754303,AT 3250754560,3250755071,DE 3250755584,3250755839,FR @@ -64477,11 +71565,10 @@ 3251111168,3251111423,CH 3251111424,3251111679,AT 3251111680,3251111935,ES -3251111936,3251112191,BG 3251112192,3251112447,SK 3251112448,3251112703,RU 3251112704,3251112959,SE -3251112960,3251113983,BG +3251113472,3251113983,BG 3251114496,3251114751,RU 3251114752,3251115007,RO 3251115008,3251115263,PL @@ -64510,7 +71597,6 @@ 3251126784,3251127295,PL 3251127296,3251127807,UA 3251127808,3251128319,NL -3251128832,3251129343,SE 3251129344,3251129855,UA 3251129856,3251130367,CH 3251130368,3251130879,GB @@ -64567,7 +71653,6 @@ 3251152128,3251152639,RO 3251152640,3251152895,UA 3251152896,3251153151,RU -3251153152,3251153407,UA 3251153408,3251153663,TR 3251153664,3251153919,FR 3251153920,3251154175,DE @@ -64578,7 +71663,7 @@ 3251155456,3251155711,NL 3251155712,3251155967,UA 3251155968,3251156223,TR -3251156224,3251156735,FR +3251156480,3251156735,FR 3251156736,3251156991,UA 3251156992,3251157247,FR 3251157248,3251157503,BE @@ -64589,7 +71674,6 @@ 3251158784,3251159295,GB 3251159296,3251159551,DE 3251159808,3251160063,DE -3251160064,3251160319,JO 3251160320,3251160575,PL 3251160576,3251160831,NL 3251160832,3251161087,RU @@ -64630,7 +71714,6 @@ 3251171840,3251172095,RO 3251172096,3251172351,ES 3251172608,3251172863,GB -3251172864,3251173119,UA 3251173120,3251173375,SA 3251173376,3251173631,UA 3251173632,3251173887,DE @@ -64652,7 +71735,6 @@ 3251183872,3251184127,CH 3251184128,3251184383,PL 3251184640,3251184895,PL -3251184896,3251185151,DE 3251185408,3251185663,DK 3251185664,3251185919,IT 3251185920,3251186175,AT @@ -64660,7 +71742,6 @@ 3251186432,3251186687,SE 3251186688,3251186943,RO 3251186944,3251187199,SI -3251187200,3251187455,GR 3251187456,3251187711,GB 3251187712,3251188735,NL 3251188736,3251189759,DE @@ -64711,13 +71792,11 @@ 3251213312,3251213375,CY 3251213376,3251213439,DE 3251213504,3251213567,NL -3251213568,3251213631,FR 3251213632,3251213695,PL 3251213760,3251213823,CY 3251213824,3251213887,GB 3251213888,3251214015,CY 3251214080,3251214143,CY -3251214144,3251214207,AF 3251214272,3251214335,DE 3251214336,3251214463,RU 3251214464,3251214591,UA @@ -64744,11 +71823,9 @@ 3251220224,3251220479,UA 3251220480,3251222527,DE 3251222528,3251224575,GB -3251225088,3251225599,FR 3251225600,3251226111,GB 3251226112,3251226623,UA 3251226624,3251227135,GB -3251227136,3251227647,DE 3251227648,3251228159,GB 3251228160,3251228671,UA 3251229696,3251230719,SI @@ -64759,7 +71836,6 @@ 3251234816,3251235839,RO 3251235840,3251236863,DE 3251236864,3251237887,BG -3251238912,3251239935,FR 3251240960,3251241215,BE 3251241216,3251243007,GB 3251245056,3251245311,DE @@ -64775,7 +71851,7 @@ 3251252736,3251256831,CH 3251256832,3251257343,GB 3251257344,3251259903,BE -3251260672,3251261439,FR +3251260416,3251261439,FR 3251261440,3251264255,CH 3251264256,3251265535,FR 3251265536,3251267839,NL @@ -64805,23 +71881,25 @@ 3251302400,3251306495,LI 3251306496,3251306751,AT 3251306752,3251307007,MK -3251307008,3251307519,RS 3251307520,3251307775,MK 3251307776,3251308031,GB 3251308032,3251308543,RS -3251310592,3251311103,SI 3251311104,3251311615,RS 3251311616,3251312127,GB 3251312384,3251312639,CH -3251312640,3251314687,RS +3251313152,3251313663,RS 3251314688,3251315711,FR 3251315712,3251317759,RU 3251317760,3251318783,PL 3251318784,3251319807,UA 3251320832,3251321855,PL 3251321856,3251322879,RU -3251322880,3251331327,GB -3251331328,3251331583,FR +3251322880,3251331071,GB +3251331072,3251331262,FR +3251331263,3251331263,GB +3251331264,3251331321,FR +3251331322,3251331322,GB +3251331323,3251331583,FR 3251331584,3251332095,PL 3251332096,3251333119,RU 3251333120,3251333631,CH @@ -64850,7 +71928,6 @@ 3251362304,3251362815,UA 3251362816,3251363327,NL 3251363328,3251363839,PL -3251363840,3251364095,MK 3251364096,3251364607,NL 3251364608,3251364863,RO 3251364864,3251366911,IT @@ -64872,8 +71949,8 @@ 3252167680,3252176127,NL 3252176128,3252177919,SE 3252177920,3252178943,HR -3252178944,3252179455,SE -3252179456,3252189183,NL +3252178944,3252179199,SE +3252179200,3252189183,NL 3252189184,3252190719,SE 3252190720,3252190975,NO 3252190976,3252191231,SE @@ -64919,9 +71996,9 @@ 3252318976,3252319231,PL 3252319232,3252319743,AT 3252319744,3252319999,RU -3252320000,3252320255,GR 3252320256,3252320511,CZ -3252320768,3252321791,GR +3252320768,3252321023,GR +3252321280,3252321791,GR 3252321792,3252322303,PL 3252322304,3252323327,NO 3252323328,3252324351,PL @@ -64935,9 +72012,7 @@ 3252336640,3252337663,UA 3252337664,3252338687,RU 3252338688,3252340735,BE -3252340736,3252340991,TR 3252341248,3252341503,DE -3252341504,3252341759,GR 3252342016,3252342079,GB 3252342080,3252342239,CY 3252342240,3252342271,CH @@ -64948,7 +72023,6 @@ 3252342608,3252342655,CY 3252342656,3252342783,IL 3252342784,3252346367,DE -3252346368,3252346623,GB 3252346624,3252355071,GR 3252355072,3252356351,LT 3252357120,3252358911,LT @@ -64988,21 +72062,30 @@ 3252387584,3252387839,RU 3252387840,3252404223,LT 3252404224,3252405759,NO -3252405760,3252409663,LT +3252405760,3252406271,FR +3252406272,3252407295,NO +3252407296,3252409663,FR 3252409664,3252409679,CD -3252409680,3252421631,LT -3252421632,3252423679,NO -3252423680,3252448511,LT +3252409680,3252415487,FR +3252415488,3252415743,LT +3252415744,3252420607,FR +3252420608,3252424703,NO +3252424704,3252428799,FR +3252428800,3252429823,NO +3252429824,3252448511,FR 3252448512,3252448767,NO -3252448768,3252449791,LT +3252448768,3252449791,FR 3252449792,3252450047,DK -3252450048,3252452543,LT +3252450048,3252452543,FR 3252452544,3252452551,SS -3252452552,3252455679,LT +3252452552,3252455679,FR 3252455680,3252455807,BI -3252455808,3252469759,LT +3252455808,3252461567,FR +3252461568,3252469759,NO 3252469760,3252473855,NL -3252473856,3252486143,LT +3252473856,3252475903,NO +3252475904,3252477951,FR +3252477952,3252486143,NO 3252486144,3252490239,BE 3252490240,3252496127,SE 3252496128,3252496383,AU @@ -65032,7 +72115,8 @@ 3252527104,3252535295,BE 3252540416,3252541951,NL 3252541952,3252542207,CI -3252542208,3252551679,BE +3252542208,3252542719,BE +3252543488,3252551679,BE 3252551680,3252563967,CH 3252563968,3252564479,RU 3252564480,3252564735,GB @@ -65120,7 +72204,6 @@ 3252913152,3252913407,ES 3252913408,3252913663,FR 3252913664,3252913919,RU -3252913920,3252914175,NO 3252914176,3252916223,FR 3252916224,3252920319,DE 3252920320,3252928511,LB @@ -65140,7 +72223,6 @@ 3252939264,3252939775,DE 3252940288,3252940799,PT 3252940800,3252941311,RU -3252941312,3252941823,RO 3252941824,3252942847,GB 3252942848,3252943359,FR 3252943360,3252943871,UA @@ -65149,7 +72231,7 @@ 3252944896,3252945151,AT 3252945152,3252945407,GB 3252945408,3252945663,UA -3252945664,3252980735,AT +3252945664,3252976639,AT 3252980992,3252981247,GB 3252981248,3252981503,RU 3252981504,3252981759,SE @@ -65165,11 +72247,12 @@ 3252984832,3252985087,FR 3252985088,3252985343,SE 3252985344,3252985855,RU -3252985856,3252989439,AT +3252985856,3252989183,AT 3252989440,3252989695,PL 3252989696,3253004799,AT 3253004800,3253005055,CZ -3253005056,3253010431,AT +3253005056,3253006335,AT +3253006336,3253010431,DE 3253010432,3253075967,FI 3253075968,3253207039,RO 3253207040,3253270527,RU @@ -65200,11 +72283,15 @@ 3253403648,3253403903,PL 3253403904,3253409791,SE 3253409792,3253410047,GB -3253410048,3253412351,SE +3253410048,3253411327,SE +3253411328,3253411583,NO +3253411584,3253412351,SE 3253412352,3253412607,US 3253412608,3253416447,SE 3253416448,3253416703,GB -3253416704,3253428223,SE +3253416704,3253419519,SE +3253419520,3253419775,GB +3253419776,3253428223,SE 3253428224,3253428479,DE 3253428480,3253429247,SE 3253429248,3253429759,JP @@ -65222,7 +72309,8 @@ 3253436416,3253440511,SE 3253440512,3253440767,FR 3253440768,3253441023,SE -3253441024,3253441535,AT +3253441024,3253441279,CL +3253441280,3253441535,NL 3253441536,3253443839,SE 3253443840,3253444351,NO 3253444352,3253453311,SE @@ -65291,7 +72379,6 @@ 3253658624,3253659647,DE 3253659648,3253660671,GB 3253661696,3253662719,NL -3253662720,3253663743,RO 3253663744,3253664767,NL 3253664768,3253665791,DE 3253665792,3253666815,CZ @@ -65313,7 +72400,6 @@ 3253683200,3253685247,UA 3253685248,3253686271,FR 3253686272,3253687295,PL -3253687296,3253688319,RU 3253688320,3253690367,NL 3253690368,3253691391,DK 3253691392,3253692415,PL @@ -65385,7 +72471,11 @@ 3253737856,3253738559,GB 3253738560,3253738567,CZ 3253738568,3253738575,BE -3253738576,3253741679,GB +3253738576,3253739263,GB +3253739264,3253739519,FR +3253739520,3253741055,GB +3253741056,3253741311,BE +3253741312,3253741679,GB 3253741680,3253741695,RU 3253741696,3253745151,GB 3253745152,3253745279,NO @@ -65415,7 +72505,9 @@ 3253765280,3253765295,NL 3253765296,3253765311,BE 3253765312,3253765375,TR -3253765376,3253796863,GB +3253765376,3253767711,GB +3253767712,3253767743,DE +3253767744,3253796863,GB 3253796864,3253862399,SE 3253862400,3253862655,GB 3253862656,3253882879,FR @@ -65423,14 +72515,12 @@ 3253886976,3253887231,GB 3253887232,3253887487,NL 3253887488,3253887743,ES -3253887744,3253887999,GB 3253888000,3253888255,PL 3253888256,3253888511,BE 3253888512,3253888767,GB 3253888768,3253889023,SE 3253889024,3253889279,RO 3253889280,3253889535,CH -3253889536,3253889791,DE 3253889792,3253890047,DK 3253890048,3253890303,NL 3253890560,3253890815,GB @@ -65508,23 +72598,30 @@ 3253967872,3253968895,UA 3253968896,3253969151,DE 3253969408,3253969919,AT -3253969920,3253970431,NL 3253970432,3253970687,RU 3253970688,3253970943,UA 3253970944,3253971967,RS 3253971968,3253972991,RU 3253972992,3253974527,GB -3253974784,3253974847,NO -3253974848,3253974911,SE -3253974976,3253975039,SE +3253974784,3253975039,SE 3253975040,3253977087,DE 3253977088,3253985279,TR 3253985280,3253993471,GB -3253993472,3254124543,BE +3253993472,3254001919,BE +3254001920,3254002175,NL +3254002176,3254079743,BE +3254079744,3254079999,HU +3254080000,3254124543,BE 3254124544,3254255615,CH -3254255616,3254263807,FR -3254263808,3254264063,GF -3254264064,3254488431,FR +3254255616,3254256127,FR +3254256128,3254256383,GP +3254256384,3254260991,FR +3254260992,3254262015,YT +3254262016,3254266367,FR +3254266368,3254266623,RE +3254266624,3254277119,FR +3254277120,3254278143,YT +3254278144,3254488431,FR 3254488432,3254488447,MG 3254488448,3254489407,FR 3254489408,3254489439,MR @@ -65556,27 +72653,23 @@ 3254508800,3254508831,MQ 3254508832,3254521855,FR 3254521856,3254522111,GB -3254522112,3254607871,FR -3254607872,3254610175,RE -3254610176,3254610431,FR -3254610432,3254610687,RE -3254610688,3254611455,FR -3254611456,3254611456,YT -3254611457,3254611711,FR -3254611712,3254611712,YT -3254611713,3254611967,FR -3254611968,3254612991,RE -3254612992,3254613247,FR -3254613248,3254614015,RE -3254614016,3254614527,FR -3254614528,3254615039,RE -3254615040,3254615551,FR -3254615552,3254615552,YT -3254615553,3254615807,FR -3254615808,3254615808,YT -3254615809,3254648831,FR -3254648832,3254649087,GB -3254649088,3254649855,AL +3254522112,3254608895,FR +3254608896,3254609151,RE +3254609152,3254609407,FR +3254609408,3254609663,RE +3254609664,3254609919,FR +3254609920,3254610431,RE +3254610432,3254610687,FR +3254610688,3254610943,RE +3254610944,3254611199,FR +3254611200,3254611455,RE +3254611456,3254611967,YT +3254611968,3254612991,FR +3254612992,3254613247,RE +3254613248,3254615551,FR +3254615552,3254616063,YT +3254616064,3254648831,FR +3254648832,3254649855,AL 3254649856,3254650879,SE 3254653440,3254654847,DE 3254654848,3254654975,DK @@ -65584,7 +72677,8 @@ 3254656256,3254656511,BG 3254656512,3254656767,DE 3254656768,3254657023,GB -3254657024,3254665215,RO +3254657024,3254661119,ES +3254661120,3254665215,RO 3254681600,3254697983,DE 3254697984,3254698495,SE 3254698496,3254699007,GB @@ -65698,7 +72792,6 @@ 3254822144,3254822399,DE 3254822400,3254822655,FR 3254822656,3254822911,PL -3254822912,3254823167,CH 3254823168,3254823423,NO 3254823424,3254823679,NL 3254823680,3254823935,PL @@ -65729,7 +72822,6 @@ 3254832128,3254832383,RO 3254832384,3254832639,BE 3254832640,3254832895,UA -3254832896,3254833151,LV 3254833152,3254833407,DE 3254833408,3254833663,RU 3254833664,3254833919,GB @@ -65759,7 +72851,6 @@ 3254841344,3254841599,PL 3254841600,3254841855,IE 3254841856,3254842111,LV -3254842624,3254842879,RU 3254842880,3254843135,SE 3254843136,3254843391,DE 3254843648,3254843903,FR @@ -65831,7 +72922,6 @@ 3254901760,3254902271,UA 3254902272,3254904831,SK 3254904832,3254907903,RU -3254907904,3254908159,SK 3254908160,3254908415,CH 3254908416,3254908671,PL 3254908672,3254908927,MT @@ -65841,34 +72931,30 @@ 3254910976,3255044095,FR 3255044608,3255056383,FR 3255058432,3255067647,FR -3255068672,3255114751,FR +3255068672,3255081727,FR +3255081984,3255114751,FR 3255115264,3255117823,FR 3255118336,3255120127,FR 3255120384,3255120639,FR 3255120640,3255120895,DE 3255120896,3255123711,FR 3255123712,3255123967,DE -3255123968,3255127551,FR +3255123968,3255125503,FR +3255126016,3255127551,FR 3255127808,3255128575,FR 3255129856,3255130111,HR -3255130112,3255146495,FR +3255130112,3255134207,FR +3255135232,3255146495,FR 3255148544,3255153151,FR -3255153664,3255166975,FR -3255167488,3255172351,FR +3255153664,3255164927,FR +3255166720,3255166975,FR +3255167488,3255171071,FR 3255172352,3255172607,DE 3255172608,3255173119,FR 3255173120,3255173631,SH 3255173648,3255173711,GB 3255173760,3255173823,GB -3255173840,3255174151,GB -3255174160,3255174167,GB -3255174200,3255174207,GB -3255174216,3255174247,GB -3255174272,3255174279,GB -3255174312,3255174319,GB -3255174328,3255174335,GB -3255174376,3255174383,GB -3255174400,3255175167,GB +3255173840,3255175167,GB 3255175200,3255175231,GB 3255175248,3255175263,GB 3255175280,3255175295,GB @@ -65936,7 +73022,7 @@ 3255304192,3255304447,DE 3255304448,3255305215,LV 3255305216,3255305471,BG -3255305472,3255307775,LV +3255305472,3255307263,LV 3255307776,3255308031,PL 3255308032,3255308287,CH 3255308288,3255311359,LV @@ -66076,7 +73162,7 @@ 3255562240,3255563263,CH 3255563776,3255564031,CH 3255564032,3255564287,RU -3255564288,3255565311,CH +3255564288,3255564799,CH 3255565312,3255565955,DE 3255565956,3255565956,CH 3255565957,3255566079,DE @@ -66104,7 +73190,11 @@ 3255743232,3255743487,IT 3255743488,3255743743,DE 3255743744,3255743999,US -3255744000,3255762943,SE +3255744000,3255745535,SE +3255745536,3255745791,DK +3255745792,3255752959,SE +3255752960,3255753215,LI +3255753216,3255762943,SE 3255762944,3255771135,DE 3255779328,3255791615,DE 3255791616,3255792639,UA @@ -66121,8 +73211,11 @@ 3255817472,3255817727,ES 3255817728,3255820287,DE 3255821312,3255822335,CH -3255822336,3255828479,DE -3255828480,3256025087,SE +3255822336,3255826943,DE +3255827456,3255828479,DE +3255828480,3255939623,SE +3255939624,3255939624,GB +3255939625,3256025087,SE 3256025088,3256057855,NO 3256057856,3256082431,DK 3256082432,3256090623,LV @@ -66161,7 +73254,6 @@ 3256415232,3256415743,PL 3256415744,3256416255,UA 3256416256,3256416767,RS -3256417024,3256417279,GB 3256417280,3256417791,NO 3256417792,3256418303,GB 3256418304,3256483839,DE @@ -66174,7 +73266,6 @@ 3256513280,3256524287,NL 3256524288,3256524799,DE 3256524800,3256528895,NL -3256530688,3256530943,DE 3256530944,3256549375,NL 3256549376,3256614911,TR 3256614912,3256615935,FI @@ -66233,6 +73324,7 @@ 3256692736,3256693759,GR 3256694784,3256695807,DE 3256695808,3256696831,UA +3256698368,3256698623,NL 3256699392,3256699647,GB 3256705024,3256705279,IE 3256705536,3256705791,BE @@ -66254,7 +73346,6 @@ 3256745984,3256778751,ES 3256778752,3256786943,CY 3256786944,3256787199,NL -3256787200,3256787455,RO 3256787456,3256787711,DE 3256787712,3256787967,UA 3256787968,3256788223,PL @@ -66298,7 +73389,9 @@ 3256827136,3256827391,IS 3256827392,3256827647,GB 3256827648,3256827903,PL -3256827904,3256864511,DE +3256827904,3256844287,DE +3256860672,3256863743,DE +3256864256,3256864511,DE 3256864512,3256864767,CH 3256864768,3256870911,DE 3256870912,3256871167,RU @@ -66316,7 +73409,8 @@ 3256899584,3256915455,GB 3256915456,3256915711,RS 3256915712,3256915967,SE -3256915968,3256945663,GB +3256915968,3256944639,GB +3256944896,3256945151,GB 3256945664,3256945919,SI 3256945920,3256946175,GB 3256946176,3256946431,RO @@ -66352,8 +73446,7 @@ 3256973312,3256973823,DE 3256973824,3256975359,IR 3256975360,3256988671,GB -3256988672,3256988927,RU -3256988928,3256989183,UA +3256988672,3256989183,UA 3256989440,3256989695,GB 3256989696,3256989951,HU 3256989952,3256990207,PL @@ -66368,12 +73461,14 @@ 3257024512,3257032703,AU 3257032704,3257040895,GB 3257042944,3257051135,GB -3257052160,3257057279,GB +3257052160,3257052927,GB +3257053184,3257057279,GB 3257058816,3257059071,PL 3257059072,3257092607,GB 3257092608,3257092863,RO -3257092864,3257121535,GB -3257121792,3257139199,GB +3257092864,3257095167,GB +3257097472,3257097983,GB +3257098240,3257139199,GB 3257139200,3257139455,DK 3257139456,3257143295,GB 3257143296,3257143807,RU @@ -66396,7 +73491,7 @@ 3257181440,3257181695,PL 3257181696,3257181951,FR 3257182208,3257182463,PL -3257182464,3257186303,GB +3257182720,3257186303,GB 3257188352,3257196543,GB 3257196544,3257200639,LU 3257200640,3257204735,GB @@ -66414,7 +73509,7 @@ 3257303040,3257311231,PT 3257311232,3257335807,CH 3257335808,3257355775,DE -3257356288,3257357311,DE +3257356288,3257356799,DE 3257357312,3257357567,PT 3257357568,3257357823,SI 3257357824,3257371903,DE @@ -66423,16 +73518,19 @@ 3257372672,3257382911,DE 3257382912,3257383167,NL 3257383168,3257383679,DE -3257383936,3257388799,DE +3257383936,3257387007,DE +3257388544,3257388799,DE 3257388800,3257389055,FR 3257389056,3257390079,DE -3257390592,3257401343,DE +3257390592,3257395199,DE +3257396224,3257401343,DE 3257401344,3257453567,CH 3257453568,3257454591,RO 3257454592,3257455103,IT 3257455104,3257455359,RO 3257455360,3257455615,SI -3257455616,3257466879,CH +3257455616,3257461759,CH +3257462016,3257466879,CH 3257466880,3257467135,DE 3257467392,3257467903,SE 3257467904,3257468927,IT @@ -66442,8 +73540,7 @@ 3257470976,3257471999,FI 3257472000,3257472511,SG 3257472512,3257475071,FI -3257476096,3257477119,DE -3257480192,3257480447,GB +3257476864,3257477119,DE 3257481216,3257481471,GB 3257481472,3257481727,DE 3257481728,3257481983,FI @@ -66468,9 +73565,7 @@ 3257546688,3257546719,DE 3257546720,3257546751,DK 3257546752,3257548799,IE -3257548800,3257555199,GB -3257555200,3257555455,CH -3257555456,3257556991,GB +3257548800,3257556991,GB 3257557504,3257558015,LU 3257558016,3257559039,RO 3257559552,3257560063,UA @@ -66505,23 +73600,42 @@ 3257742336,3257743359,DE 3257743360,3257748479,NL 3257748480,3257749503,DE -3257749504,3257753087,NL -3257753088,3257753343,DE -3257753344,3257759631,NL -3257759632,3257759639,DE -3257759640,3257765887,NL +3257749504,3257765887,NL 3257765888,3257767935,DE 3257767936,3257782271,NL 3257782272,3257784319,DE 3257784320,3257794559,NL 3257794560,3257835519,GB -3257835520,3257843711,IE -3257843712,3257844735,GB +3257835520,3257836287,IE +3257836288,3257836543,GB +3257836544,3257836799,IE +3257836800,3257837055,GB +3257837056,3257837311,IE +3257837312,3257837567,GB +3257837568,3257837823,IE +3257837824,3257838335,GB +3257838336,3257838591,IE +3257838592,3257839103,GB +3257839104,3257839359,IE +3257839360,3257839615,GB +3257839616,3257839871,IE +3257839872,3257840127,GB +3257840128,3257840383,IE +3257840384,3257840639,GB +3257840640,3257840895,IE +3257840896,3257841151,GB +3257841152,3257841407,IE +3257841408,3257841663,GB +3257841664,3257841919,IE +3257841920,3257842943,GB +3257842944,3257843199,IE +3257843200,3257844735,GB 3257844736,3257860095,IE 3257860096,3257925631,SE 3257925632,3257925887,AT 3257925888,3257926143,SE -3257926144,3257977855,AT +3257926144,3257926399,AT +3257926656,3257977855,AT 3257977856,3257978111,GB 3257978112,3257978367,SE 3257978368,3257978623,BG @@ -66529,7 +73643,6 @@ 3257978880,3257979135,FR 3257979136,3257979391,UA 3257979392,3257979647,GB -3257979648,3257979903,DE 3257979904,3257980159,UA 3257980160,3257980415,SE 3257980416,3257980671,NL @@ -66538,15 +73651,16 @@ 3257981184,3257981439,GB 3257981440,3257981695,RU 3257981696,3257981951,PL -3257981952,3257987327,AT +3257986048,3257987327,AT 3257987328,3257987583,CZ -3257987584,3257988095,AT +3257987840,3257988095,AT 3257989120,3257991167,AT -3257991168,3257995519,DE +3257991168,3257995263,DE 3257996032,3258003967,DE 3258003968,3258004479,RU -3258004480,3258018815,DE -3258019328,3258021887,DE +3258004992,3258018815,DE +3258019328,3258019583,DE +3258019840,3258021887,DE 3258021888,3258022911,RU 3258022912,3258023167,PL 3258023168,3258023423,DE @@ -66555,12 +73669,12 @@ 3258023936,3258056703,DE 3258057216,3258057471,CZ 3258058240,3258058495,RU -3258058496,3258059007,RO +3258058496,3258058751,RO 3258059008,3258059263,UA 3258059264,3258059519,RU 3258059520,3258059775,RO 3258062848,3258063103,RU -3258063104,3258063871,CZ +3258063360,3258063871,CZ 3258063872,3258064127,AT 3258064128,3258064383,FR 3258064384,3258065151,GB @@ -66583,7 +73697,6 @@ 3258070528,3258071295,GB 3258071296,3258071551,DK 3258071552,3258071807,DE -3258071808,3258072063,GB 3258072064,3258072319,FR 3258072320,3258072575,PL 3258072576,3258072831,BE @@ -66622,7 +73735,6 @@ 3258084352,3258084607,GB 3258084608,3258084863,AT 3258084864,3258085119,PL -3258085120,3258085375,LT 3258085376,3258085631,NL 3258085632,3258085887,DE 3258085888,3258086143,UA @@ -66672,14 +73784,14 @@ 3258103040,3258103295,SE 3258103296,3258103551,DE 3258103552,3258103807,AE -3258104064,3258104319,GB 3258104320,3258104575,PL 3258104576,3258104831,DE 3258105088,3258105599,CZ 3258105600,3258105855,DE 3258105856,3258109951,CZ 3258109952,3258110207,DK -3258110208,3258111487,CZ +3258110208,3258110975,CZ +3258111232,3258111487,CZ 3258111488,3258111743,PL 3258111744,3258118399,CZ 3258118400,3258118655,UA @@ -66734,11 +73846,15 @@ 3258368000,3258384383,KW 3258384384,3258385407,DE 3258386432,3258411007,DE -3258411520,3258427647,DE +3258411520,3258423295,DE +3258424320,3258424575,DE +3258424832,3258426367,DE +3258427392,3258427647,DE 3258427648,3258427903,RO 3258427904,3258428159,DE 3258428416,3258449919,DE -3258449920,3258486783,CH +3258449920,3258468351,CH +3258474496,3258486783,CH 3258486784,3258487807,LI 3258487808,3258503935,CH 3258503936,3258504191,PL @@ -66750,11 +73866,12 @@ 3258507008,3258515455,CH 3258515456,3258580991,FR 3258580992,3258646527,RU -3258646528,3258691583,DE +3258646528,3258660351,DE +3258660864,3258681343,DE +3258683136,3258691583,DE 3258691840,3258692351,AT 3258692352,3258692607,DE 3258692608,3258692863,FR -3258692864,3258693119,DE 3258693120,3258693375,SI 3258693376,3258693631,DE 3258693632,3258693887,RU @@ -66780,10 +73897,11 @@ 3258732544,3258732799,SE 3258732800,3258733055,CH 3258733056,3258733311,RO -3258733312,3258734591,GB +3258733312,3258734079,GB +3258734336,3258734591,GB 3258735104,3258735359,GB 3258736640,3258745855,GB -3258746880,3258762751,GB +3258746880,3258762239,GB 3258763264,3258764287,GB 3258764288,3258764543,DE 3258764800,3258765055,BE @@ -66816,17 +73934,21 @@ 3258796032,3258802175,GB 3258802176,3258806271,LU 3258806272,3258813439,GB -3258814464,3258818047,GB +3258814464,3258817535,GB +3258817792,3258818047,GB 3258818048,3258818303,SE 3258818560,3258843135,GB 3258843136,3258843391,RU -3258843648,3258847231,GB +3258844672,3258847231,GB 3258848256,3258848767,GB 3258848768,3258849023,RO 3258849024,3258849279,DE 3258849280,3258859519,GB 3258859520,3258859775,BY -3258859776,3258900479,GB +3258859776,3258860031,GB +3258860288,3258882047,GB +3258883072,3258883327,GB +3258884096,3258900479,GB 3258901504,3258902783,GB 3258903040,3258903295,FR 3258903296,3258903551,GB @@ -66850,16 +73972,15 @@ 3259226112,3259227391,RU 3259227392,3259227647,KZ 3259227648,3259236351,RU -3259236352,3259236863,SE -3259236864,3259237119,CH -3259237120,3259237887,SE +3259236352,3259237887,SE 3259237888,3259238143,FR 3259238144,3259243007,SE 3259243008,3259243519,AT 3259243520,3259244543,US 3259244544,3259246591,SE 3259246592,3259247615,IT -3259247616,3259248127,SE +3259247616,3259247871,LI +3259247872,3259248127,SE 3259248128,3259248383,GB 3259248384,3259248895,SE 3259248896,3259249151,GB @@ -66881,7 +74002,9 @@ 3259285760,3259286015,GB 3259286016,3259290879,SE 3259290880,3259291135,US -3259291136,3259297535,SE +3259291136,3259293951,SE +3259293952,3259294207,LI +3259294208,3259297535,SE 3259297536,3259297791,GB 3259297792,3259301887,SE 3259301888,3259302143,DE @@ -66912,7 +74035,9 @@ 3259438080,3259438335,ES 3259438336,3259457279,SE 3259457280,3259457535,IT -3259457536,3259470847,SE +3259457536,3259466239,SE +3259466240,3259466495,LI +3259466496,3259470847,SE 3259470848,3259471871,US 3259471872,3259479807,SE 3259479808,3259480063,DK @@ -66920,11 +74045,15 @@ 3259480832,3259481087,ES 3259481088,3259490303,SE 3259490304,3259490815,IN -3259490816,3259498495,SE +3259490816,3259491071,SE +3259491072,3259491327,LI +3259491328,3259498495,SE 3259498496,3259541503,GB 3259541504,3259543551,NL 3259543552,3259760639,GB -3259760640,3259814399,DE +3259761152,3259767807,DE +3259768064,3259787263,DE +3259787520,3259814399,DE 3259814400,3259814655,AT 3259814656,3259816447,DE 3259816704,3259821055,DE @@ -66933,8 +74062,7 @@ 3259823104,3259823615,RO 3259823616,3259823871,NO 3259823872,3259824127,IE -3259824128,3259825919,DE -3259826176,3259891711,DE +3259824128,3259891711,DE 3259891712,3259957247,BE 3259957248,3259958271,DE 3259958272,3259959295,RU @@ -66977,7 +74105,6 @@ 3260549376,3260549631,CH 3260549632,3260549887,DE 3260550144,3260550399,PL -3260550400,3260550655,DE 3260550656,3260551167,RU 3260551168,3260553983,DE 3260553984,3260554239,GB @@ -67030,8 +74157,7 @@ 3260678144,3260743679,IL 3260743680,3260809215,IT 3260809216,3260874751,PL -3260891136,3260893439,DK -3260893440,3260894207,SE +3260893184,3260894207,SE 3260894208,3260895231,AT 3260895232,3260898303,SE 3260898304,3260899327,ES @@ -67041,7 +74167,7 @@ 3260900608,3260901119,NL 3260901120,3260903423,DE 3260903424,3260906239,CH -3260906240,3260906495,DE +3260906368,3260906495,DE 3260906496,3260907519,PL 3260907520,3260915711,GB 3260915712,3260923903,UA @@ -67072,10 +74198,11 @@ 3261534720,3261534975,US 3261534976,3261539327,SE 3261539328,3261540351,SG -3261540352,3261595647,SE +3261540352,3261554175,SE +3261554176,3261554431,DK +3261554432,3261595647,SE 3261595648,3261599743,NL -3261600768,3261627903,NL -3261628160,3261632511,NL +3261600768,3261632511,NL 3261633536,3261636095,NL 3261636352,3261643775,NL 3261644800,3261661183,NL @@ -67088,9 +74215,7 @@ 3261677568,3261685759,GB 3261685760,3261687807,DE 3261687808,3261689855,RO -3261689856,3261690623,GB -3261690624,3261690879,AU -3261690880,3261691903,GB +3261689856,3261691903,GB 3261691904,3261692997,NL 3261692998,3261692998,US 3261692999,3261694463,NL @@ -67143,14 +74268,17 @@ 3261797632,3261797887,RU 3261797888,3261798143,TR 3261798144,3261798399,RU -3261798400,3261812735,AT +3261798400,3261805567,AT +3261805568,3261806591,DE +3261806592,3261810687,AT 3261812736,3261812991,RU -3261812992,3261816575,AT +3261812992,3261815807,AT +3261816064,3261816575,AT 3261816576,3261816831,DE 3261816832,3261820927,AT 3261820928,3261821183,RO 3261821184,3261821439,AT -3261821440,3261821695,NL +3261821440,3261821695,GB 3261821696,3261821951,UA 3261821952,3261822207,RU 3261822208,3261822463,UA @@ -67163,21 +74291,19 @@ 3261824000,3261824255,RU 3261824512,3261824767,FR 3261824768,3261825023,PT -3261825024,3261837311,AT -3261839360,3261855743,AT +3261825280,3261855743,AT 3261857792,3261923327,CZ 3261923328,3261988863,NL 3261988864,3261989119,SE -3261989120,3261989631,FI -3261990144,3261990399,FI +3261989120,3261989375,FI 3261990400,3261990655,UA -3261990656,3261990911,FI -3261992448,3261993215,FI +3261992448,3261992703,FI 3261993472,3261993727,RU -3261993728,3261995263,FI +3261993728,3261993983,FI +3261994752,3261995263,FI 3261995264,3261995519,DE 3261995520,3261995775,PL -3261995776,3262005247,FI +3261996800,3262005247,FI 3262005248,3262005759,PL 3262005760,3262006015,RU 3262006016,3262006271,NL @@ -67191,20 +74317,17 @@ 3262008576,3262008831,PL 3262008832,3262009087,AT 3262009088,3262009343,UA -3262009344,3262010367,FI -3262011392,3262013439,FI +3262010112,3262010367,FI 3262013440,3262017535,SE -3262017536,3262018559,FI +3262018304,3262018559,FI 3262018560,3262018815,PL -3262018816,3262019071,FI -3262020096,3262021119,FI 3262021120,3262021375,UA 3262021376,3262021631,PL 3262021632,3262021887,CH 3262021888,3262022143,UA 3262022912,3262023167,DE 3262023680,3262023935,DK -3262023936,3262025727,FI +3262025216,3262025471,FI 3262027264,3262027519,TR 3262027520,3262027775,BE 3262027776,3262028287,RU @@ -67295,10 +74418,11 @@ 3262185472,3262191615,DE 3262192128,3262192383,DE 3262192640,3262196479,DE -3262196736,3262203903,DE -3262204928,3262224383,DE +3262196736,3262200319,DE +3262200576,3262218239,DE +3262219264,3262224383,DE 3262224896,3262225151,AT -3262225152,3262227711,DE +3262225408,3262227455,DE 3262227712,3262227967,RO 3262227968,3262229247,DE 3262229248,3262229503,NL @@ -67376,7 +74500,6 @@ 3262461312,3262461439,NO 3262461440,3262461567,DE 3262461568,3262461695,GB -3262461696,3262461823,UA 3262461824,3262461951,RO 3262461952,3262463999,IQ 3262464000,3262472191,RU @@ -67456,7 +74579,9 @@ 3262478308,3262478311,ES 3262478312,3262478319,DE 3262478320,3262478323,GB -3262478324,3262478389,DE +3262478324,3262478345,DE +3262478346,3262478346,PT +3262478347,3262478389,DE 3262478390,3262478390,ES 3262478391,3262478404,DE 3262478405,3262478405,GB @@ -67490,7 +74615,6 @@ 3262480384,3262488575,GB 3262488576,3262496767,SE 3262496768,3262504959,FR -3262504960,3262505471,DE 3262505472,3262505983,GB 3262505984,3262506495,PL 3262506496,3262507007,RO @@ -67502,11 +74626,7 @@ 3262511104,3262511615,GB 3262512128,3262512639,UA 3262512640,3262513151,DE -3262513152,3262550271,AT -3262550272,3262550527,DE -3262550528,3262562815,AT -3262562816,3262563071,HU -3262563072,3262578687,AT +3262513152,3262578687,AT 3262578688,3262611455,FR 3262611456,3262627839,GB 3262627840,3262636031,IT @@ -67515,9 +74635,7 @@ 3262648320,3262648575,DE 3262648576,3262654463,NL 3262654464,3262654719,DE -3262654720,3262658967,NL -3262658968,3262658975,DE -3262658976,3262664703,NL +3262654720,3262664703,NL 3262664704,3262670847,DE 3262670848,3262690815,NL 3262690816,3262691583,DE @@ -67525,9 +74643,7 @@ 3262693376,3262701567,DE 3262701568,3262715135,NL 3262715136,3262715391,DE -3262715392,3262718463,NL -3262718464,3262718471,DE -3262718472,3262722815,NL +3262715392,3262722815,NL 3262722816,3262723071,DE 3262723072,3262732799,NL 3262732800,3262733055,DE @@ -67538,7 +74654,8 @@ 3262840320,3262906367,NL 3262906368,3262954495,CH 3262954496,3262955519,LI -3262955520,3262964991,CH +3262955520,3262958591,CH +3262959104,3262964991,CH 3262964992,3262965247,DE 3262965248,3262971903,CH 3262971904,3263029247,IE @@ -67557,7 +74674,6 @@ 3263062016,3263070207,EE 3263070208,3263070719,FR 3263070720,3263070975,NL -3263070976,3263071487,DE 3263072256,3263074303,LB 3263074304,3263074815,CH 3263074816,3263075327,RO @@ -67573,7 +74689,7 @@ 3263085568,3263086591,CH 3263086592,3263086847,DK 3263086848,3263087103,NL -3263087104,3263087871,DE +3263087360,3263087871,DE 3263087872,3263088127,SI 3263088128,3263088383,DE 3263088384,3263088639,LV @@ -67599,12 +74715,12 @@ 3263094784,3263095039,UA 3263095040,3263095295,ES 3263095296,3263095551,FR -3263095552,3263095807,RO 3263095808,3263096063,DE 3263096064,3263096319,PL 3263096320,3263096575,TR 3263096576,3263096831,SA 3263096832,3263097087,PL +3263097088,3263097343,FR 3263097344,3263097599,DK 3263097600,3263097855,NL 3263097856,3263098111,FR @@ -67632,11 +74748,13 @@ 3263104042,3263121420,DE 3263121421,3263121421,BE 3263121422,3263131647,DE -3263132672,3263137791,DE +3263133184,3263133439,DE +3263133696,3263137791,DE 3263137792,3263138303,PL 3263138304,3263138551,DE 3263138552,3263138815,AT -3263138816,3263168511,DE +3263138816,3263165439,DE +3263166464,3263168511,DE 3263168512,3263430655,GB 3263430656,3263436543,SE 3263436544,3263436799,ES @@ -67652,9 +74770,7 @@ 3263478528,3263478783,ES 3263478784,3263480831,SE 3263480832,3263481855,JP -3263481856,3263482879,SE -3263482880,3263483903,IT -3263483904,3263496191,SE +3263481856,3263496191,SE 3263496192,3263501519,GB 3263501520,3263501527,IE 3263501528,3263503103,GB @@ -67683,7 +74799,11 @@ 3263692800,3263823871,FI 3263823872,3263826943,DE 3263826944,3263827199,AT -3263827200,3263878145,DE +3263827200,3263833855,DE +3263833856,3263833903,GB +3263833904,3263833919,DE +3263833920,3263834111,GB +3263834112,3263878145,DE 3263878146,3263878146,US 3263878147,3263886079,DE 3263886080,3263886335,SG @@ -67692,7 +74812,8 @@ 3263979520,3263987711,DE 3263987712,3264004095,ES 3264004096,3264012287,HU -3264012544,3264013055,GB +3264012544,3264012799,FR +3264012800,3264013055,GB 3264013056,3264013311,TR 3264013312,3264013567,UA 3264013824,3264014079,NL @@ -67746,18 +74867,15 @@ 3264307200,3264311295,PL 3264311808,3264312063,DE 3264312064,3264312319,CH -3264312320,3264312575,PL 3264312576,3264312831,UA 3264312832,3264313087,DE 3264313088,3264313343,NL 3264313344,3264313599,RO 3264313600,3264313855,PT 3264313856,3264314623,DE -3264314624,3264314879,SE 3264314880,3264315135,GB 3264315392,3264317439,IE 3264318464,3264318975,ES -3264318976,3264319487,DE 3264319488,3264319743,FR 3264319744,3264319999,SE 3264320000,3264320255,DE @@ -67765,7 +74883,6 @@ 3264321024,3264321535,DE 3264321792,3264322047,RS 3264322048,3264322303,FR -3264322304,3264322559,RO 3264322560,3264322815,HU 3264322816,3264323071,CH 3264323072,3264323327,RU @@ -67808,7 +74925,8 @@ 3264345088,3264346111,NL 3264346112,3264347135,SE 3264347136,3264348159,DE -3264348672,3264372223,FR +3264348160,3264360191,FR +3264360448,3264372223,FR 3264372736,3264375039,FR 3264375040,3264376063,SE 3264376064,3264376319,HR @@ -67852,26 +74970,28 @@ 3264411648,3264413695,PL 3264417536,3264419327,CH 3264423424,3264428031,CH -3264430592,3264431103,CH +3264430592,3264430847,CH 3264431104,3264431615,LI 3264431616,3264431871,CH 3264432128,3264434687,CH 3264434944,3264438783,CH 3264439296,3264439551,CH -3264439808,3264441343,CH +3264439808,3264440831,CH 3264441344,3264441599,PL -3264442112,3264444415,CH -3264444672,3264444927,CH +3264442368,3264444415,CH 3264444928,3264445183,DE 3264445184,3264445439,CH 3264447488,3264447743,CH 3264447744,3264447999,DE -3264448000,3264452607,CH +3264448000,3264448511,CH +3264449536,3264450047,CH +3264450304,3264452607,CH 3264454656,3264456191,CH 3264456704,3264463871,CH 3264463872,3264466943,LI 3264466944,3264474623,CH -3264474880,3264476671,CH +3264475136,3264475391,CH +3264476416,3264476671,CH 3264476672,3264477183,RU 3264477184,3264477439,PL 3264477440,3264477695,RU @@ -67912,7 +75032,7 @@ 3264624640,3264624671,US 3264624672,3264626687,GB 3264626688,3264627711,EE -3264628736,3264630783,UA +3264628736,3264629759,UA 3264630784,3264631807,DE 3264631808,3264632831,RO 3264632832,3264633855,RU @@ -68038,19 +75158,16 @@ 3264846208,3264846335,AE 3264846336,3264846463,GB 3264846464,3264846591,NO -3264846592,3264846719,US 3264846720,3264846847,RU 3264846848,3264846911,DK 3264846912,3264847103,CY 3264847168,3264847199,IE -3264847200,3264847231,NO 3264847232,3264847263,CH 3264847264,3264847295,LI 3264847296,3264847359,CY 3264847488,3264847615,RU 3264847616,3264847679,PL 3264847680,3264847743,FI -3264847744,3264847807,BE 3264847808,3264847871,SE 3264847872,3264849919,DE 3264849920,3264850431,GB @@ -68078,24 +75195,29 @@ 3264921600,3264929791,LU 3264929792,3264937983,SK 3264937984,3265003519,GB -3265003520,3265018879,DE +3265003520,3265006591,DE +3265007616,3265018879,DE 3265018880,3265019903,HK 3265036288,3265042943,DE -3265043456,3265045759,DE +3265043456,3265044991,DE +3265045504,3265045759,DE 3265045760,3265046015,TR -3265046016,3265055231,DE +3265046016,3265048575,DE +3265050624,3265054719,DE 3265055232,3265055743,FR 3265055744,3265069055,DE 3265069056,3265134591,FI 3265134592,3265137983,CH 3265137984,3265138047,NL -3265138048,3265138863,CH +3265138048,3265138599,CH +3265138600,3265138607,NL +3265138608,3265138863,CH 3265138864,3265138879,SE 3265138880,3265139999,CH 3265140000,3265140015,BE -3265140016,3265140991,CH -3265140992,3265141247,GB -3265141248,3265141551,CH +3265140016,3265141135,CH +3265141136,3265141151,GB +3265141152,3265141551,CH 3265141552,3265141555,IE 3265141556,3265141759,CH 3265141760,3265141775,GB @@ -68125,7 +75247,7 @@ 3265371136,3265376255,DE 3265377280,3265378303,GB 3265378304,3265379327,NL -3265380352,3265382399,GB +3265380352,3265382911,GB 3265386496,3265386751,NL 3265387008,3265387263,NL 3265388544,3265392639,GB @@ -68137,7 +75259,6 @@ 3265593344,3265594367,RU 3265594880,3265595391,UA 3265595392,3265595903,PL -3265595904,3265596415,RU 3265596416,3265596927,GB 3265596928,3265597439,FR 3265597440,3265599999,RU @@ -68149,7 +75270,6 @@ 3265602048,3265602303,NL 3265602560,3265602815,IT 3265602816,3265603071,IE -3265603072,3265603327,DK 3265603328,3265603583,MD 3265603584,3265603839,DE 3265603840,3265604095,PL @@ -68184,7 +75304,8 @@ 3265824768,3265825023,US 3265825024,3265877247,GB 3265877504,3265879039,GB -3265880064,3265887487,GB +3265880064,3265886207,GB +3265887232,3265887487,GB 3265887488,3265887743,PT 3265887744,3265888255,PL 3265888256,3265902335,GB @@ -68214,7 +75335,6 @@ 3265911808,3265912063,PL 3265912064,3265912319,GB 3265912320,3265912575,DE -3265912576,3265912831,RO 3265912832,3265913087,CZ 3265913088,3265913343,SE 3265913344,3265914367,PL @@ -68297,17 +75417,18 @@ 3266420736,3266428927,GB 3266428928,3266437119,GR 3266437120,3266445311,GL -3266445312,3266472959,NL -3266472960,3266473215,SE -3266473216,3266510847,NL +3266445312,3266510847,NL 3266510848,3266543615,ES 3266543616,3266576383,IT 3266576384,3266582783,DE 3266583040,3266588927,DE -3266589184,3266603519,DE -3266604032,3266617327,DE +3266589440,3266603007,DE +3266603264,3266603519,DE +3266604032,3266617279,DE +3266617312,3266617327,DE 3266617328,3266617343,GB -3266617344,3266634383,DE +3266617344,3266621439,DE +3266624512,3266634383,DE 3266634392,3266634399,EE 3266634400,3266634431,DE 3266634464,3266634751,DE @@ -68318,9 +75439,7 @@ 3266772992,3266781183,IT 3266781184,3266789375,PL 3266789376,3266797567,SM -3266797568,3266797823,GB -3266797824,3266798079,ES -3266798080,3266805759,GB +3266797568,3266805759,GB 3266805760,3266813951,AT 3266813952,3266822143,UA 3266822144,3266830335,FR @@ -68406,6 +75525,7 @@ 3267537920,3267538943,FR 3267549184,3267550207,DK 3267559424,3267624959,DE +3267628400,3267628415,FR 3267630080,3267631095,GB 3267631096,3267631103,IT 3267631104,3267631615,GB @@ -68413,11 +75533,19 @@ 3267636864,3267636991,ZA 3267648320,3267648335,GB 3267650320,3267650335,AT +3267657576,3267657583,RO +3267657696,3267657703,RO +3267657712,3267657727,RO 3267660608,3267660671,ES +3267661904,3267661967,ES +3267662896,3267662911,IE 3267665920,3267666943,GB 3267667456,3267667967,GB 3267670016,3267671039,ZA 3267674208,3267674239,GB +3267681312,3267681327,FR +3267681888,3267681903,FR +3267683936,3267683967,PL 3267684352,3267684863,GB 3267690496,3267691519,FI 3267691520,3267692543,SE @@ -68449,7 +75577,7 @@ 3268223200,3268223231,GB 3268224768,3268225023,US 3268226368,3268226399,GB -3268226496,3268226663,GB +3268226496,3268226655,GB 3268226688,3268226815,GB 3268227328,3268227391,GB 3268227520,3268227615,GB @@ -68471,12 +75599,13 @@ 3268235520,3268235775,GB 3268235936,3268236031,GB 3268236192,3268236207,GB -3268236544,3268236607,GB -3268236672,3268236799,GB +3268236544,3268236799,GB 3268238336,3268238359,GB 3268238368,3268238399,GB 3268238472,3268238543,GB -3268238552,3268238847,GB +3268238552,3268238591,GB +3268238608,3268238623,GB +3268238632,3268238847,GB 3268239584,3268240127,GB 3268240160,3268240191,GB 3268240384,3268240399,GB @@ -68501,9 +75630,7 @@ 3268249600,3268251311,GB 3268251312,3268251327,IE 3268251328,3268251647,GB -3268254464,3268254543,GB -3268254592,3268254607,GB -3268254624,3268254639,GB +3268254464,3268254719,GB 3268254896,3268254903,GB 3268255824,3268255863,GB 3268255896,3268255919,GB @@ -68562,9 +75689,7 @@ 3268345856,3268411391,GB 3268411392,3268426751,AT 3268426752,3268427775,CH -3268427776,3268463615,AT -3268463616,3268463871,CH -3268463872,3268464127,AT +3268427776,3268464127,AT 3268464128,3268464383,LI 3268464384,3268476927,AT 3268476928,3268537087,CH @@ -69005,8 +76130,9 @@ 3271933440,3271933695,SE 3271933696,3271933951,DE 3271933952,3272015871,FR -3272015872,3272017407,RO -3272017664,3272018943,RO +3272015872,3272016639,RO +3272016896,3272017919,RO +3272018176,3272018431,RO 3272019968,3272020991,IT 3272020992,3272024063,DK 3272024064,3272032255,IE @@ -69233,15 +76359,15 @@ 3272392704,3272400895,AT 3272400912,3272400919,GB 3272402432,3272402687,GB -3272402688,3272402815,SE 3272403968,3272404991,FR 3272404992,3272406015,DE 3272406016,3272407039,NL 3272409088,3272417279,BE -3272417280,3272418687,FR -3272418688,3272419327,PL +3272417280,3272418303,FR +3272418304,3272418559,GB +3272418560,3272418687,FR +3272418816,3272419327,PL 3272419328,3272420351,DE -3272420608,3272420863,DE 3272420864,3272420991,PL 3272420992,3272421119,DK 3272421376,3272421887,RO @@ -69275,7 +76401,6 @@ 3272479744,3272480255,SE 3272480256,3272480511,FR 3272480512,3272480767,CH -3272480768,3272481023,DE 3272481024,3272481279,SE 3272481792,3272482047,IT 3272482048,3272482303,NL @@ -69336,7 +76461,7 @@ 3272884224,3272892415,DE 3272892416,3272892927,UA 3272893440,3272893951,SE -3272893952,3272894463,UA +3272893952,3272894463,RU 3272894976,3272895487,RO 3272895488,3272895999,GB 3272896000,3272896511,PL @@ -69448,7 +76573,6 @@ 3273261056,3273261567,NO 3273261568,3273262079,BE 3273262080,3273262591,LU -3273262592,3273263103,RU 3273263616,3273264127,SE 3273264128,3273264639,PL 3273264640,3273265151,AT @@ -69503,9 +76627,8 @@ 3273333056,3273333119,DE 3273334272,3273334783,DE 3273334784,3273335039,AE -3273335040,3273335295,DE 3273335296,3273335423,GB -3273335432,3273335439,GB +3273335432,3273335447,GB 3273335936,3273335999,DE 3273336848,3273336863,DE 3273336864,3273336871,GB @@ -69639,17 +76762,14 @@ 3273687040,3273719807,DE 3273719808,3273720831,NL 3273720832,3273720847,IE -3273720848,3273726719,NL -3273726720,3273726975,GB -3273726976,3273727087,DK +3273720848,3273727087,NL 3273727088,3273727088,GB 3273727089,3273727095,ES -3273727096,3273727119,DK +3273727096,3273727119,NL 3273727120,3273727127,PT -3273727128,3273727135,DK +3273727128,3273727135,NL 3273727136,3273727167,IT -3273727168,3273727231,DK -3273727232,3273732095,NL +3273727168,3273732095,NL 3273732096,3273736191,GB 3273736192,3273744383,FR 3273744384,3273746943,GB @@ -69660,7 +76780,9 @@ 3273762304,3273762559,NL 3273762560,3273768959,DE 3273768960,3273785343,TR -3273785344,3273801727,RU +3273785344,3273792511,RU +3273792512,3273793023,UZ +3273793024,3273801727,RU 3273801728,3273802239,DE 3273802752,3273803263,SA 3273803776,3273804287,CH @@ -69732,7 +76854,6 @@ 3274051584,3274052351,UA 3274052352,3274052607,GB 3274052608,3274052863,DE -3274052864,3274053119,GB 3274053120,3274053375,KZ 3274053376,3274053631,RU 3274053632,3274054655,DE @@ -69751,7 +76872,6 @@ 3274163200,3274163711,UA 3274163712,3274164223,BG 3274164224,3274164735,AT -3274165248,3274165759,GB 3274165760,3274166271,RU 3274166272,3274166783,AT 3274166784,3274167295,UA @@ -69811,7 +76931,6 @@ 3274368512,3274368767,AT 3274368768,3274369023,FR 3274370048,3274371071,GB -3274371072,3274373375,NL 3274373376,3274373631,PL 3274373632,3274374143,FR 3274374144,3274375167,DE @@ -69940,8 +77059,7 @@ 3274471680,3274471935,GB 3274472960,3274483711,GB 3274489600,3274489855,GB -3274490176,3274490895,GB -3274490912,3274491199,GB +3274490176,3274491199,GB 3274491208,3274491247,GB 3274491256,3274491295,GB 3274491304,3274491319,GB @@ -70003,7 +77121,6 @@ 3274695424,3274695679,PL 3274695680,3274695935,SI 3274695936,3274696191,DE -3274696192,3274696447,DK 3274696448,3274696703,CH 3274696704,3274696959,IT 3274696960,3274697215,GR @@ -70041,11 +77158,7 @@ 3274814464,3274815487,GB 3274815488,3274816511,RU 3274816512,3274817535,SK -3274817536,3274819839,RU -3274819840,3274820095,UA -3274820096,3274821119,RU -3274821120,3274821375,UA -3274821376,3274821631,RU +3274817536,3274821631,RU 3274821632,3274823679,KZ 3274823680,3274825727,TR 3274825728,3274827775,DE @@ -70113,16 +77226,15 @@ 3275415552,3275423743,UA 3275423744,3275423751,GB 3275423808,3275423839,GB -3275423872,3275424735,GB -3275424752,3275425343,GB -3275425536,3275425559,GB -3275425568,3275425583,GB -3275425792,3275426559,GB +3275423872,3275424719,GB +3275424728,3275424735,GB +3275424752,3275425311,GB +3275425328,3275425343,GB +3275425536,3275426559,GB 3275426576,3275428367,GB 3275428376,3275428407,GB 3275428416,3275428447,GB 3275429888,3275430143,GB -3275430272,3275430399,GB 3275430592,3275430631,GB 3275430656,3275430911,GB 3275431936,3275432959,GB @@ -70143,20 +77255,30 @@ 3275443840,3275443967,GB 3275444224,3275444735,GB 3275446272,3275446783,GB -3275446800,3275446823,GB +3275446800,3275446815,GB 3275446848,3275447039,GB 3275447056,3275447151,GB -3275448320,3275450207,GB +3275448320,3275449359,GB +3275449376,3275449399,GB +3275449408,3275449519,GB +3275449520,3275449527,FR +3275449528,3275449567,GB +3275449584,3275450207,GB 3275450224,3275450879,GB 3275451232,3275451263,GB 3275451392,3275451663,GB 3275451680,3275451711,GB 3275451720,3275451727,GB 3275451744,3275451767,GB -3275452416,3275455231,GB +3275451776,3275451779,GB +3275452416,3275453695,GB +3275453824,3275453839,GB +3275453848,3275454063,GB +3275454080,3275454127,GB +3275454144,3275455231,GB 3275455248,3275456407,GB -3275456416,3275457535,GB -3275457536,3275457791,FK +3275456416,3275457279,GB +3275457280,3275457791,FK 3275457792,3275458559,GB 3275458560,3275460095,IE 3275460096,3275460223,GB @@ -70172,20 +77294,18 @@ 3275468768,3275468799,IE 3275468800,3275474951,GB 3275474960,3275475039,GB -3275475044,3275476223,GB -3275476288,3275476479,GB -3275476656,3275476687,GB -3275476704,3275476735,GB +3275475044,3275475711,GB +3275475720,3275475791,GB +3275475800,3275475879,GB +3275475968,3275476735,GB 3275476992,3275477567,GB 3275477760,3275478271,GB 3275478528,3275481087,GB +3275481344,3275481599,GB +3275482112,3275482367,GB 3275483136,3275483647,GB 3275484160,3275484415,GB -3275485184,3275485215,GB -3275485224,3275485231,GB -3275485248,3275485375,GB -3275485408,3275485423,GB -3275485440,3275485759,GB +3275485184,3275485759,GB 3275488768,3275489279,CZ 3275489280,3275497471,GB 3275497472,3275505663,DE @@ -70225,7 +77345,6 @@ 3275512320,3275512447,FI 3275512448,3275512575,DK 3275512576,3275512703,BE -3275512704,3275512831,PL 3275512832,3275512895,SE 3275512896,3275512959,AT 3275512960,3275513023,PL @@ -70241,7 +77360,6 @@ 3275530240,3275530751,DK 3275530752,3275531263,AT 3275531264,3275531775,GB -3275531776,3275532287,IE 3275532288,3275532799,UA 3275532800,3275533311,GB 3275533824,3275534335,UA @@ -70422,30 +77540,24 @@ 3275931648,3275939839,UA 3275939840,3275948031,GB 3275948032,3276013567,SE -3276013568,3276014239,GB -3276014240,3276014247,FR -3276014248,3276014799,GB +3276013568,3276014079,GB +3276014080,3276014335,FR +3276014336,3276014799,GB 3276014800,3276014815,FR 3276014816,3276014951,GB 3276014952,3276014959,ES -3276014960,3276018175,GB -3276018176,3276018431,FR -3276018432,3276019495,GB -3276019496,3276019503,FR -3276019504,3276019631,GB -3276019632,3276019639,FR -3276019640,3276020129,GB +3276014960,3276020129,GB 3276020130,3276020130,FR -3276020131,3276020735,GB -3276020736,3276020991,FR -3276020992,3276025159,GB +3276020131,3276023039,GB +3276023040,3276023295,FR +3276023296,3276025159,GB 3276025160,3276025167,FR 3276025168,3276026367,GB 3276026368,3276026623,FR -3276026624,3276027647,GB -3276027648,3276027903,FR -3276027904,3276029375,GB -3276029376,3276029439,FR +3276026624,3276027391,GB +3276027392,3276027647,FR +3276027648,3276029183,GB +3276029184,3276029439,FR 3276029440,3276030591,GB 3276030592,3276030607,FR 3276030608,3276031479,GB @@ -70460,11 +77572,13 @@ 3276042016,3276042031,FR 3276042032,3276042079,GB 3276042080,3276042095,FR -3276042096,3276042495,GB -3276042496,3276042751,FR -3276042752,3276045247,GB +3276042096,3276042751,GB +3276042752,3276043007,FR +3276043008,3276045247,GB 3276045248,3276045255,FR -3276045256,3276046335,GB +3276045256,3276045823,GB +3276045824,3276046079,FR +3276046080,3276046335,GB 3276046336,3276062719,RU 3276062720,3276063231,PL 3276063232,3276063743,FR @@ -70609,20 +77723,25 @@ 3276455936,3276464127,BE 3276464128,3276472319,GR 3276473304,3276473311,AT -3276480256,3276480511,FR +3276474880,3276474927,IT +3276478064,3276478095,CH +3276478720,3276478975,FR 3276485632,3276486655,GB +3276494336,3276494591,GB +3276499504,3276499567,DE 3276503040,3276505087,DE 3276508680,3276508687,GB -3276508928,3276509183,GB 3276509184,3276510207,IT 3276512256,3276513023,ZA -3276517632,3276517887,NL 3276518368,3276518383,NL +3276520704,3276520735,SE 3276522496,3276523519,NL +3276524864,3276524895,PT 3276527616,3276527743,PK +3276528128,3276528191,GB 3276528352,3276528359,GB 3276530688,3276531711,NL -3276536688,3276536695,HU +3276536752,3276536783,HU 3276537344,3276537599,AT 3276537856,3276668927,ES 3276668928,3276677119,MC @@ -70713,42 +77832,33 @@ 3276861184,3276861439,DE 3276861440,3276865535,DK 3276865536,3276866303,NL -3276866304,3276866559,GB -3276866560,3276866815,IT -3276866816,3276870911,GB -3276870912,3276871423,IT -3276871424,3276873983,GB +3276866304,3276870911,GB +3276870912,3276871679,IT +3276871680,3276873983,GB 3276873984,3276874239,ES -3276874240,3276876383,GB +3276874240,3276874959,GB +3276874960,3276874975,NL +3276874976,3276876383,GB 3276876384,3276876415,NL -3276876416,3276882431,GB -3276882432,3276882943,IT -3276882944,3276883711,GB -3276883712,3276883967,IT -3276883968,3276886363,GB +3276876416,3276883711,GB +3276883712,3276883839,IT +3276883840,3276886363,GB 3276886364,3276886367,DE -3276886368,3276890111,GB -3276890112,3276890367,US -3276890368,3276892159,GB +3276886368,3276892159,GB 3276892160,3276893183,IT 3276893184,3276893695,GB 3276893696,3276893951,IT 3276893952,3276898671,GB 3276898672,3276898687,CH -3276898688,3276902141,GB +3276898688,3276901613,GB +3276901614,3276901614,CH +3276901615,3276902141,GB 3276902142,3276902142,CH 3276902143,3276902655,GB 3276902656,3276902911,SE -3276902912,3276903167,GB -3276903168,3276903679,SE -3276903680,3276907519,GB -3276907520,3276907775,NL -3276907776,3276908287,GB -3276908288,3276908543,BE -3276908544,3276908799,SE -3276908800,3276909823,GB -3276909824,3276910079,SE -3276910080,3276911167,GB +3276902912,3276907519,GB +3276907520,3276907551,NL +3276907552,3276911167,GB 3276911168,3276911199,IT 3276911200,3276911615,GB 3276911616,3276911871,IT @@ -70770,9 +77880,7 @@ 3276919488,3276919535,DE 3276919536,3276922879,GB 3276922880,3276923135,FR -3276923136,3276923647,GB -3276923648,3276924159,FR -3276924160,3276925951,GB +3276923136,3276925951,GB 3276925952,3276926207,FR 3276926208,3276931071,GB 3276931072,3276939263,KZ @@ -70803,7 +77911,6 @@ 3277178880,3277179135,ES 3277179392,3277179647,DE 3277179648,3277180159,BE -3277180160,3277180415,NL 3277180416,3277180671,RU 3277180928,3277181183,UA 3277181184,3277181439,PL @@ -70813,7 +77920,6 @@ 3277182208,3277182463,RU 3277182464,3277182719,UA 3277182720,3277182975,BG -3277182976,3277183231,UA 3277183232,3277183487,DE 3277183744,3277183999,UA 3277184000,3277184255,DE @@ -70827,7 +77933,6 @@ 3277186560,3277186815,PL 3277186816,3277187071,RU 3277187072,3277187327,GB -3277187328,3277187583,UA 3277187584,3277188351,RU 3277188352,3277188607,DE 3277188608,3277188863,RU @@ -70836,7 +77941,6 @@ 3277189376,3277189631,PL 3277189632,3277189887,TR 3277189888,3277190143,PL -3277190144,3277190399,SE 3277190400,3277190655,GB 3277190656,3277190911,BE 3277190912,3277191167,FR @@ -70962,9 +78066,7 @@ 3277389312,3277389823,AM 3277389824,3277394943,GB 3277394944,3277395455,US -3277395456,3277402591,GB -3277402592,3277402607,ES -3277402608,3277403135,GB +3277395456,3277403135,GB 3277403136,3277403215,FR 3277403216,3277403231,GB 3277403232,3277403279,FR @@ -70972,15 +78074,13 @@ 3277403296,3277403311,FR 3277403312,3277403327,GB 3277403328,3277403359,FR -3277403360,3277403391,GB -3277403392,3277403455,FR +3277403360,3277403375,GB +3277403376,3277403455,FR 3277403456,3277403647,GB 3277403648,3277403807,ES 3277403808,3277404159,GB 3277404160,3277404415,DE -3277404416,3277404511,IT -3277404512,3277404527,GB -3277404528,3277404655,IT +3277404416,3277404655,IT 3277404656,3277404671,GB 3277404672,3277404735,CH 3277404736,3277404927,GB @@ -71007,7 +78107,7 @@ 3277482496,3277483007,PL 3277483008,3277483519,IT 3277483520,3277484031,RO -3277484032,3277486079,CH +3277484032,3277484543,CH 3277486080,3277486591,GB 3277486592,3277487103,UA 3277487104,3277487615,RO @@ -71077,13 +78177,13 @@ 3277717504,3277725695,YE 3277725696,3277733887,CH 3277733888,3277742079,DE -3277742080,3277746175,FI +3277742080,3277745151,FI +3277745152,3277746175,CH 3277746176,3277750271,GB 3277750272,3277766655,IT 3277766656,3277774847,PL 3277774848,3277783039,RU 3277783040,3277815807,BE -3277815808,3277816063,RO 3277816064,3277816319,PL 3277816576,3277816831,GB 3277816832,3277817087,CH @@ -71158,7 +78258,6 @@ 3277843456,3277843967,PT 3277843968,3277845503,DK 3277845504,3277847039,NL -3277847040,3277847551,DK 3277847552,3277848063,RU 3277848064,3277848575,RO 3277848576,3277856767,AT @@ -71187,9 +78286,7 @@ 3278061568,3278065663,NL 3278065664,3278110719,GB 3278110720,3278176255,SE -3278176256,3278210559,FR -3278210560,3278210815,MQ -3278210816,3278241791,FR +3278176256,3278241791,FR 3278241792,3278307327,GB 3278307328,3278372863,IT 3278372864,3278635007,GB @@ -71234,7 +78331,9 @@ 3278929920,3278938111,TR 3278938112,3278939611,DE 3278939612,3278939615,FR -3278939616,3278940055,DE +3278939616,3278939715,DE +3278939716,3278939719,TR +3278939720,3278940055,DE 3278940056,3278940059,SG 3278940060,3278940355,DE 3278940356,3278940359,NL @@ -71382,7 +78481,6 @@ 3279057408,3279057919,FR 3279058944,3279059455,UA 3279059456,3279060479,RU -3279060480,3279060991,PL 3279060992,3279069183,UA 3279069184,3279077375,PL 3279077376,3279085567,ES @@ -71409,7 +78507,9 @@ 3279388672,3279396863,GR 3279421440,3279486975,IT 3279486976,3279552511,NL -3279552512,3279560703,LV +3279552512,3279559028,LV +3279559029,3279559029,US +3279559030,3279560703,LV 3279560704,3279568895,GB 3279568896,3279577087,IT 3279577088,3279585279,BE @@ -71429,7 +78529,9 @@ 3279601664,3279609855,CZ 3279609856,3279618047,RU 3279618048,3279683583,UA -3279683584,3279946751,DE +3279683584,3279794943,DE +3279794944,3279795199,NO +3279795200,3279946751,DE 3279946752,3279947775,SE 3279947776,3279948799,NL 3279949824,3279950847,UA @@ -71566,7 +78668,6 @@ 3280577792,3280578047,NL 3280578048,3280578303,RO 3280578304,3280578559,UA -3280578560,3280578815,PL 3280578816,3280579071,NL 3280579072,3280579327,DE 3280579328,3280579583,RU @@ -71717,7 +78818,7 @@ 3280998656,3280999423,GB 3280999424,3280999679,HU 3280999680,3280999935,UA -3280999936,3281000447,DE +3280999936,3281000191,DE 3281000448,3281000703,FR 3281000704,3281000959,UA 3281000960,3281001215,SI @@ -71757,7 +78858,7 @@ 3281339648,3281339903,GB 3281339904,3281340159,UA 3281340160,3281340415,BG -3281340416,3281340927,RO +3281340416,3281340671,RO 3281340928,3281341183,DE 3281341184,3281341439,AT 3281341440,3281341695,DE @@ -71770,7 +78871,7 @@ 3281344000,3281344255,NL 3281344256,3281344511,RU 3281344512,3281344767,UA -3281344768,3281345279,RU +3281344768,3281345023,RU 3281345280,3281345535,SA 3281345536,3281345791,CH 3281346048,3281346303,SI @@ -71948,7 +79049,6 @@ 3282746112,3282746367,SE 3282746368,3282746623,PL 3282746624,3282746879,SE -3282746880,3282747135,RO 3282747136,3282747391,PL 3282747392,3282763775,RU 3282763776,3282960383,GB @@ -71959,10 +79059,8 @@ 3283156992,3283173375,DE 3283173376,3283174399,PL 3283174400,3283176447,UA -3283176448,3283177471,GB 3283177472,3283178495,BE 3283178496,3283179519,PL -3283179520,3283180543,LU 3283180544,3283181567,UA 3283181568,3283182591,NO 3283182592,3283183615,PL @@ -72020,7 +79118,6 @@ 3283249152,3283249663,UA 3283249664,3283250175,RO 3283250176,3283250687,RU -3283250688,3283251199,RO 3283251200,3283251711,FR 3283251712,3283252223,PL 3283252224,3283252735,BG @@ -72048,11 +79145,9 @@ 3283488256,3283488511,PL 3283488768,3283489279,FR 3283489280,3283489535,DE -3283489536,3283489791,PL 3283489792,3283490047,RU 3283490048,3283490559,UA 3283490560,3283490815,PL -3283490816,3283491071,CH 3283491072,3283491327,TR 3283491328,3283491583,AT 3283491584,3283491839,RO @@ -72064,7 +79159,6 @@ 3283493120,3283493375,IL 3283493376,3283493887,PL 3283493888,3283494143,DK -3283494400,3283494655,PL 3283494656,3283494911,DK 3283494912,3283495167,PL 3283495168,3283495423,BG @@ -72143,8 +79237,7 @@ 3283944448,3283945471,AT 3283945472,3283946495,UA 3283946496,3283947519,GB -3283947520,3283947775,UA -3283947776,3283948543,RU +3283947520,3283948543,RU 3283948544,3283949567,NL 3283949568,3283950591,SE 3283950592,3283951615,KZ @@ -72196,7 +79289,6 @@ 3283990016,3283990527,SE 3283991040,3283991551,RO 3283991552,3283992063,SE -3283992064,3283992575,RO 3283992576,3283993087,IL 3283993088,3283993599,RO 3283993600,3283994111,UA @@ -72255,10 +79347,14 @@ 3284016384,3284016639,CH 3284016640,3284017151,DK 3284017152,3284025343,GR -3284025344,3284030471,GB +3284025344,3284029183,GB +3284029184,3284029199,US +3284029200,3284030471,GB 3284030472,3284030479,IL 3284030480,3284030495,FR -3284030496,3284033535,GB +3284030496,3284030615,GB +3284030616,3284030623,SE +3284030624,3284033535,GB 3284033536,3284041727,RU 3284041728,3284041983,DK 3284041984,3284042239,SI @@ -72353,7 +79449,6 @@ 3284108800,3284109311,FR 3284109312,3284109823,RU 3284109824,3284110335,UA -3284110336,3284110847,RU 3284110848,3284111359,DK 3284111360,3284111871,SE 3284111872,3284112383,RU @@ -72451,7 +79546,7 @@ 3284717312,3284717567,DE 3284717568,3284717823,FR 3284717824,3284718079,RU -3284718080,3284718591,GB +3284718336,3284718591,GB 3284718592,3284718847,PL 3284718848,3284719103,RU 3284719104,3284719359,PL @@ -72483,9 +79578,7 @@ 3284811776,3284819967,KE 3284819968,3284828159,GB 3284828160,3284844543,AT -3284844544,3284856063,CH -3284856064,3284856191,DE -3284856192,3284860927,CH +3284844544,3284860927,CH 3284860928,3284926463,DE 3284926464,3284991999,NO 3284992000,3285057535,PL @@ -72601,12 +79694,19 @@ 3285453440,3285453567,GB 3285457072,3285457079,GB 3285461184,3285461215,NL +3285461808,3285461839,NL +3285463168,3285463199,LU +3285465600,3285465855,GB 3285472256,3285472271,US 3285472272,3285472287,DE 3285472288,3285472511,US +3285477136,3285477151,IT 3285480960,3285481215,CH -3285501696,3285501951,GB +3285495296,3285495807,ES +3285501328,3285501359,CZ 3285510144,3285512191,GB +3285515776,3285515799,GR +3285515816,3285515823,GR 3285516288,3285516687,BE 3285516688,3285516691,NL 3285516692,3285517311,BE @@ -72715,23 +79815,26 @@ 3285913648,3285913655,IE 3285913656,3285913703,GB 3285913708,3285913711,FI +3285913712,3285913719,GB 3285917696,3285917703,GB -3285917712,3285917759,GB +3285917712,3285917807,GB +3285917952,3285918207,GB 3285919744,3285921791,QA -3285922048,3285922303,FR 3285924912,3285924919,CH +3285924920,3285924927,FI +3285924928,3285924943,DE 3285925164,3285925171,CH 3285926432,3285926463,CH 3285926592,3285926623,DE 3285928304,3285928311,GB 3285931528,3285931535,DE +3285934592,3285934847,ES 3285935872,3285936127,GB 3285939136,3285939175,GB 3285939184,3285939191,GB 3285939744,3285939759,GB 3285939840,3285939967,GB 3285941248,3285941503,ES -3285946112,3285946367,ES 3285949856,3285949887,ES 3285950208,3285950463,IT 3285951648,3285951679,ES @@ -72811,7 +79914,6 @@ 3286355968,3286356991,DE 3286356992,3286358015,PL 3286358016,3286359039,GB -3286359040,3286360063,PT 3286360064,3286361087,IT 3286361088,3286362111,UA 3286362112,3286363135,RU @@ -72826,11 +79928,13 @@ 3286403072,3286403327,GG 3286403328,3286404863,GB 3286404864,3286405375,GG -3286405376,3286405887,GB -3286405888,3286406143,GG -3286406144,3286406399,GB -3286406400,3286406655,GG -3286406656,3286409215,GB +3286405376,3286406399,GB +3286406400,3286406911,GG +3286406912,3286407167,GB +3286407168,3286407423,GG +3286407424,3286407679,GB +3286407680,3286407935,GG +3286407936,3286409215,GB 3286409216,3286417407,DE 3286417408,3286417663,UA 3286417664,3286417919,IT @@ -72864,7 +79968,9 @@ 3286425344,3286425599,IT 3286425600,3286433791,KW 3286433792,3286499327,DE -3286499328,3286564863,HU +3286499328,3286514431,HU +3286514432,3286514687,RO +3286514688,3286564863,HU 3286564864,3286566655,AE 3286566656,3286567423,KW 3286567424,3286630399,AE @@ -72902,9 +80008,7 @@ 3286662400,3286662655,UA 3286662656,3286662911,DE 3286662912,3286671359,UA -3286671360,3286672639,AT -3286672640,3286672895,HU -3286672896,3286679551,AT +3286671360,3286679551,AT 3286679552,3286695935,IT 3286695936,3286761471,DK 3286761472,3286773759,GB @@ -72912,7 +80016,9 @@ 3286777856,3286778111,GB 3286778112,3286781951,FR 3286781952,3286794239,GB -3286794240,3286888447,DE +3286794240,3286799103,DE +3286799104,3286799359,IT +3286799360,3286888447,DE 3286888448,3286889471,IE 3286889472,3286892543,DE 3286892544,3286893055,LI @@ -72962,7 +80068,6 @@ 3286917120,3286918143,RU 3286918144,3286919167,AT 3286919168,3286920191,DE -3286920192,3286920447,RU 3286921216,3286922239,UA 3286922240,3286923263,GB 3286923264,3286924287,CM @@ -72981,7 +80086,6 @@ 3286929408,3286929663,LV 3286929664,3286929919,BE 3286929920,3286930175,SE -3286930176,3286930431,RU 3286930432,3286930687,UA 3286930688,3286930943,DE 3286930944,3286931199,SE @@ -73092,7 +80196,6 @@ 3287218432,3287218687,GB 3287218688,3287218943,RU 3287218944,3287219199,FR -3287219200,3287219455,DE 3287219456,3287219711,CH 3287219712,3287220223,SE 3287220224,3287285759,RU @@ -73167,7 +80270,7 @@ 3287465984,3287467007,DK 3287467008,3287468031,SA 3287468032,3287469055,UA -3287469056,3287471103,DE +3287469056,3287470079,DE 3287471104,3287472127,GB 3287472128,3287472639,RU 3287472640,3287473151,UA @@ -73178,7 +80281,7 @@ 3287479296,3287480319,RO 3287480320,3287481343,AT 3287481344,3287482367,PL -3287482368,3287548927,DE +3287482368,3287548415,DE 3287548928,3287549439,UA 3287549440,3287549951,SE 3287549952,3287550463,UA @@ -73265,7 +80368,6 @@ 3287675648,3287675903,DE 3287675904,3287676159,BE 3287676160,3287676415,DE -3287676416,3287676671,RU 3287676672,3287676927,GB 3287676928,3287677183,ES 3287677184,3287677439,RU @@ -73297,7 +80399,6 @@ 3287728128,3287729407,IT 3287729664,3287729919,DK 3287729920,3287730175,HU -3287731200,3287732223,DE 3287732224,3287734271,IT 3287734272,3287734527,PL 3287734528,3287734783,UA @@ -73339,7 +80440,6 @@ 3287830784,3287831039,GB 3287831040,3287831295,RU 3287831296,3287831551,CH -3287831552,3287831807,RO 3287831808,3287832063,AT 3287832064,3287832319,FI 3287832320,3287832575,NL @@ -73397,7 +80497,7 @@ 3287954432,3287954687,CH 3287954688,3287954943,RO 3287954944,3287955199,PL -3287955200,3287955711,RU +3287955456,3287955711,RU 3287955712,3287955967,DE 3287955968,3287956223,SI 3287956224,3287956479,RO @@ -73501,10 +80601,8 @@ 3288466432,3288467455,SY 3288467456,3288469503,BI 3288469504,3288481791,ZA -3288481792,3288482303,ZW -3288482304,3288483071,ZA -3288483072,3288483327,ZW -3288483328,3288485631,ZA +3288481792,3288482559,ZW +3288482560,3288485631,ZA 3288485632,3288485887,ZW 3288485888,3288489983,MA 3288489984,3288514559,ZA @@ -73559,9 +80657,7 @@ 3288616960,3288617215,ZW 3288617216,3288661759,ZA 3288661760,3288662015,LS -3288662016,3288727551,ZA -3288727552,3288727807,MU -3288727808,3288753919,ZA +3288662016,3288753919,ZA 3288753920,3288754175,NG 3288758272,3288758527,EG 3288758528,3288772607,ZA @@ -73582,7 +80678,9 @@ 3288787968,3288788223,EG 3288788224,3288792831,ZA 3288792832,3288793087,AO -3288793088,3289004031,ZA +3288793088,3289002751,ZA +3289002752,3289003007,AO +3289003008,3289004031,ZA 3289004032,3289005055,NG 3289005056,3289005311,TZ 3289005312,3289014527,ZA @@ -73602,7 +80700,8 @@ 3289027584,3289027839,MZ 3289027840,3289041407,ZA 3289041408,3289041663,NG -3289041664,3289044991,ZA +3289041664,3289044735,ZA +3289044736,3289044991,GH 3289044992,3289047039,ML 3289047040,3289048063,ZA 3289048064,3289048319,UG @@ -73636,6 +80735,7 @@ 3289108480,3289114367,ZA 3289114368,3289114623,NG 3289114624,3289115135,ZA +3289115136,3289115391,AO 3289115392,3289120511,ZA 3289120512,3289120767,TZ 3289120768,3289123327,PR @@ -73650,20 +80750,28 @@ 3289169920,3289186303,MA 3289186304,3289212159,ZA 3289212160,3289212415,MZ +3289212416,3289212927,NG 3289214976,3289215231,NG 3289215232,3289217279,ZA 3289217280,3289217535,KE 3289218560,3289220351,ZA 3289220352,3289220607,TZ 3289220608,3289221119,ZA -3289221632,3289229311,ZA +3289221120,3289221631,KE +3289221632,3289227519,ZA +3289227520,3289227775,NG +3289227776,3289229311,ZA 3289229312,3289229567,SZ -3289229824,3289230591,ZA +3289229568,3289230591,ZA +3289230592,3289230847,KE 3289233408,3289233919,ZA 3289233920,3289234175,TZ 3289234176,3289235199,ZA 3289235200,3289235455,KE -3289237504,3289243391,ZA +3289237504,3289237759,ZA +3289238528,3289238783,AO +3289238784,3289239039,ZA +3289239552,3289243391,ZA 3289243392,3289243647,BI 3289243648,3289321471,ZA 3289321472,3289325567,IN @@ -73754,9 +80862,11 @@ 3290719232,3290955775,ZA 3290955776,3290980351,CR 3290980352,3290984447,ZA +3290984448,3290988543,MZ 3290988544,3290992639,KE 3290992640,3290996735,GH 3290996736,3291000831,NG +3291000832,3291004927,ZA 3291004928,3291021311,NG 3291021312,3291029503,ZA 3291029504,3291037695,TZ @@ -73818,6 +80928,7 @@ 3291215616,3291215871,BF 3291215872,3291216127,KE 3291216128,3291216383,LS +3291216384,3291216639,ZA 3291216640,3291216895,NG 3291217920,3291230207,ZA 3291230208,3291234303,GH @@ -73897,15 +81008,14 @@ 3291546624,3291546879,SZ 3291546880,3291547135,TZ 3291547136,3291547391,AO +3291547392,3291547647,RW 3291742208,3292004351,US 3292004352,3292266495,SC 3292397568,3292528639,ZA 3300917248,3300921343,MU 3300921344,3300925439,BJ 3300925440,3300929535,MG -3300933632,3300935679,MU -3300937728,3300938751,MU -3300941824,3300950015,MU +3300933632,3300950015,MU 3300953088,3300954111,MU 3300966400,3301113855,ZA 3301113856,3301146623,NG @@ -73945,8 +81055,9 @@ 3301471488,3301474047,NG 3301474048,3301474303,GH 3301474304,3301490687,MA +3301490688,3301494783,ZA 3301494784,3301498879,ZM -3301507328,3301507583,ZW +3301507328,3301507583,MU 3301507584,3301507839,GH 3301507840,3301508095,EG 3301508608,3301509119,ZA @@ -73993,6 +81104,7 @@ 3302505472,3302506495,NA 3302506496,3302514687,KE 3302522880,3302523903,KE +3302523904,3302525951,ZA 3302525952,3302526975,EG 3302526976,3302529023,NG 3302529024,3302530047,ZA @@ -74023,8 +81135,8 @@ 3302548992,3302549503,ZA 3302549504,3302550015,KE 3302550016,3302550527,TZ -3302550528,3302551039,ZA -3302551040,3302551551,MU +3302550528,3302551295,ZA +3302551296,3302551551,MU 3302551552,3302552063,EG 3302552064,3302552575,KE 3302552832,3302553087,KE @@ -74035,7 +81147,6 @@ 3302554368,3302554623,NG 3302554624,3302554879,EG 3302554880,3302555135,NG -3302555136,3302555391,MU 3302555392,3302555647,NG 3302555648,3302621183,MA 3302621184,3302684671,EG @@ -74048,6 +81159,7 @@ 3302766592,3302768639,ZA 3302768640,3302776831,NG 3302776832,3302785023,ZW +3302785024,3302793215,NG 3302801408,3302805503,NG 3302805504,3302809599,MW 3302809600,3302817791,NG @@ -74085,16 +81197,13 @@ 3302958080,3302958335,BI 3302958336,3302958591,SZ 3302958592,3302958847,DJ +3302958848,3302959103,GA 3304062976,3304456191,SC 3304456192,3304521727,NG 3304521728,3304587263,SC 3304587264,3304718335,ZA 3304849408,3305111551,ZA -3305111552,3305130239,TN -3305130240,3305130495,GP -3305130496,3305362687,TN -3305362688,3305362943,GP -3305362944,3307208703,TN +3305111552,3307208703,TN 3307208704,3309305855,EG 3309305856,3312451583,ZA 3312451584,3312975871,DZ @@ -74170,13 +81279,13 @@ 3315463168,3315464191,SO 3315464192,3315465215,CD 3315465216,3315466239,CG -3315466240,3315467263,MZ -3315467264,3315467519,ZA -3315467520,3315482623,MZ +3315466240,3315482623,MZ 3315482624,3315499007,MG 3315499008,3315515391,ZM 3315515392,3315531775,SC -3315531776,3315539967,CM +3315531776,3315535871,CM +3315535872,3315536127,TD +3315536128,3315539967,CM 3315539968,3315548159,ZA 3315548160,3315552255,NG 3315552256,3315556351,GW @@ -74194,9 +81303,7 @@ 3317301248,3317432319,TZ 3317432320,3317497855,NA 3317497856,3317530623,CD -3317530624,3317538815,LS -3317538816,3317539071,ZA -3317539072,3317547007,LS +3317530624,3317547007,LS 3317547008,3317563391,ZA 3317563392,3317694463,GH 3317694464,3318218751,EG @@ -74332,7 +81439,11 @@ 3321790464,3321806847,LS 3321806848,3321823231,SD 3321823232,3321839615,NG -3321839616,3321855999,GH +3321839616,3321848831,GH +3321848832,3321849855,ZA +3321849856,3321850879,GH +3321850880,3321851903,ZA +3321851904,3321855999,GH 3321856000,3321860095,CV 3321860096,3321864191,ZA 3321864192,3321868287,NG @@ -74461,14 +81572,14 @@ 3323680329,3323680413,CA 3323680414,3323680414,US 3323680415,3323680511,CA -3323680512,3323680767,US -3323680768,3323681023,CA -3323681024,3323681279,US +3323680512,3323681279,US 3323681280,3323682955,CA 3323682956,3323682959,US 3323682960,3323684863,CA 3323684864,3323685375,US -3323685376,3323685887,CA +3323685376,3323685551,CA +3323685552,3323685555,BY +3323685556,3323685887,CA 3323685888,3323686399,US 3323686400,3323686911,CA 3323686912,3323687423,US @@ -74476,7 +81587,7 @@ 3323687936,3323687999,US 3323688000,3323688959,CA 3323688960,3323689199,US -3323689200,3323689215,BY +3323689200,3323689215,CA 3323689216,3323689471,US 3323689472,3323690495,CA 3323690496,3323741439,US @@ -74603,11 +81714,7 @@ 3324706304,3324706559,CA 3324706560,3324811047,US 3324811048,3324811055,AU -3324811056,3324843775,US -3324843776,3324843799,AU -3324843800,3324843801,US -3324843802,3324844031,AU -3324844032,3324980223,US +3324811056,3324980223,US 3324980224,3324981247,CA 3324981248,3325034495,US 3325034496,3325035519,NZ @@ -74646,9 +81753,13 @@ 3325211420,3325211423,US 3325211424,3325211647,CA 3325211648,3325211775,US -3325211776,3325213687,CA +3325211776,3325212647,CA +3325212648,3325212655,US +3325212656,3325213687,CA 3325213688,3325213695,US -3325213696,3325216527,CA +3325213696,3325216271,CA +3325216272,3325216287,BY +3325216288,3325216527,CA 3325216528,3325216531,US 3325216532,3325217939,CA 3325217940,3325217943,US @@ -74664,7 +81775,11 @@ 3325221452,3325221455,US 3325221456,3325221791,CA 3325221792,3325221795,FR -3325221796,3325223647,CA +3325221796,3325222203,CA +3325222204,3325222207,BY +3325222208,3325223083,CA +3325223084,3325223087,BY +3325223088,3325223647,CA 3325223648,3325223663,DE 3325223664,3325224671,CA 3325224672,3325224675,US @@ -74678,7 +81793,9 @@ 3325229592,3325229599,US 3325229600,3325230319,CA 3325230320,3325230323,US -3325230324,3325231103,CA +3325230324,3325230583,CA +3325230584,3325230591,SN +3325230592,3325231103,CA 3325231104,3325232127,US 3325233152,3325234175,US 3325234176,3325234431,SA @@ -74706,9 +81823,10 @@ 3325284864,3325285119,AU 3325285376,3325296383,US 3325296384,3325296639,CA -3325296640,3325304063,US -3325304064,3325304319,AS -3325304320,3325304831,US +3325296640,3325304127,US +3325304128,3325304191,AS +3325304192,3325304319,US +3325304320,3325304831,AS 3325304832,3325307647,CA 3325307648,3325307903,BB 3325307904,3325313023,CA @@ -74724,9 +81842,7 @@ 3325438976,3325442559,MU 3325442560,3325443583,ZA 3325443584,3325444095,US -3325444096,3325444351,MU -3325444352,3325444607,ZA -3325444608,3325448447,MU +3325444096,3325448447,MU 3325448448,3325448959,US 3325448960,3325450239,MU 3325450240,3325451007,US @@ -74808,7 +81924,9 @@ 3326413824,3326414335,YE 3326414336,3326420991,US 3326420992,3326423039,PR -3326423040,3326526463,US +3326423040,3326499327,US +3326499328,3326499583,IN +3326499584,3326526463,US 3326526464,3326526719,CA 3326526720,3326613503,US 3326613504,3326615551,CA @@ -74839,9 +81957,7 @@ 3326738176,3326740479,US 3326741760,3326742015,US 3326742528,3326746623,US -3326749184,3326796863,US -3326796864,3326796927,GB -3326796928,3326952191,US +3326749184,3326952191,US 3326952192,3326952447,AS 3326952448,3326953983,US 3326953984,3326954495,AS @@ -74947,7 +82063,11 @@ 3328775936,3328788479,US 3328788480,3328789503,FR 3328789504,3328794623,US -3328794624,3328802815,CA +3328794624,3328801279,CA +3328801280,3328801791,CZ +3328801792,3328802047,CA +3328802048,3328802303,DE +3328802304,3328802815,AU 3328802816,3328826813,US 3328826814,3328826814,SG 3328826815,3329230335,US @@ -75032,7 +82152,14 @@ 3331102464,3331102719,CA 3331102720,3331194879,US 3331194880,3331260415,AU -3331260416,3331356671,US +3331260416,3331269375,US +3331269376,3331269631,AU +3331269632,3331269887,FR +3331269888,3331270655,US +3331270656,3331270911,FR +3331270912,3331271423,US +3331271424,3331271679,FR +3331271680,3331356671,US 3331356672,3331357183,BZ 3331357184,3331362815,US 3331362816,3331366911,CA @@ -75052,7 +82179,9 @@ 3331632640,3331632895,CA 3331632896,3331633407,US 3331633408,3331633919,CH -3331633920,3331647231,US +3331633920,3331637247,US +3331637248,3331638271,KR +3331638272,3331647231,US 3331647232,3331647487,CA 3331647488,3331649279,US 3331649280,3331649535,CA @@ -75069,9 +82198,7 @@ 3331983360,3331988479,US 3331988480,3331989503,CA 3331989504,3332028415,US -3332028416,3332028927,CA -3332028928,3332029183,US -3332029184,3332030463,CA +3332028416,3332030463,CA 3332030464,3332083967,US 3332083968,3332084223,AU 3332084224,3332423423,US @@ -75151,9 +82278,7 @@ 3332898560,3332899071,US 3332899072,3332906495,CA 3332906496,3332909567,US -3332909568,3332909823,CA -3332909824,3332910079,US -3332910080,3332922879,CA +3332909568,3332922879,CA 3332922880,3332923391,US 3332923392,3332925695,CA 3332925696,3332929023,US @@ -75184,16 +82309,21 @@ 3333374976,3333375231,IN 3333375232,3333385983,US 3333385984,3333386239,JP -3333386240,3333427967,US +3333386240,3333396479,US +3333396480,3333396689,GB +3333396690,3333396691,US +3333396692,3333396735,GB +3333396736,3333427967,US 3333427968,3333428007,GB 3333428008,3333428008,US 3333428009,3333428223,GB -3333428224,3333476607,US -3333477376,3333480191,US +3333428224,3333480191,US 3333480192,3333481471,DE 3333481472,3333517823,US 3333517824,3333518335,CA -3333518336,3333583871,US +3333518336,3333519359,US +3333519360,3333521407,GB +3333521408,3333583871,US 3333583872,3333584895,CA 3333584896,3333593855,US 3333593856,3333594111,CA @@ -75275,7 +82405,7 @@ 3335439616,3335439871,CH 3335439872,3335440383,US 3335440384,3335441151,CH -3335441152,3335458815,US +3335441152,3335456767,US 3335458816,3335460863,BM 3335460864,3335475199,US 3335475200,3335475455,DE @@ -75291,7 +82421,9 @@ 3336139776,3336140799,CA 3336140800,3336854015,US 3336854016,3336854271,CO -3336854272,3336991231,US +3336854272,3336896767,US +3336896768,3336897023,VE +3336897024,3336991231,US 3336991232,3336991487,CA 3336991488,3336993023,US 3336993024,3336993535,CA @@ -75313,7 +82445,9 @@ 3337055232,3337060351,CA 3337060352,3337069055,US 3337069056,3337069119,GB -3337069120,3337289983,US +3337069120,3337107711,US +3337107712,3337107967,GB +3337107968,3337289983,US 3337289984,3337293567,CA 3337293568,3337293823,US 3337293824,3337297919,CA @@ -75464,12 +82598,18 @@ 3338403840,3338424319,US 3338424320,3338428415,CA 3338428416,3338429439,US -3338429440,3338429951,CA +3338429440,3338429695,CA +3338429696,3338429951,SG 3338429952,3338430719,US -3338430720,3338432511,CA +3338430720,3338430975,NL +3338430976,3338431487,US +3338431488,3338431743,CA +3338431744,3338432255,US +3338432256,3338432511,CA 3338432512,3338455039,US 3338455040,3338455295,GB -3338455296,3338567679,US +3338455296,3338541567,US +3338542080,3338567679,US 3338567680,3338600447,CA 3338600448,3338686463,US 3338686464,3338688511,AW @@ -75479,7 +82619,9 @@ 3338825728,3338827775,AW 3338827776,3338912767,US 3338912768,3338913023,EC -3338913024,3338935039,US +3338913024,3338934015,US +3338934016,3338934271,GB +3338934272,3338935039,US 3338935040,3338935295,GB 3338935296,3338964991,US 3338964992,3338965247,CA @@ -75581,9 +82723,7 @@ 3339965440,3339968511,CA 3339968512,3339975935,US 3339975936,3339976191,CA -3339976192,3339991807,US -3339991808,3339992063,CA -3339992064,3340080127,US +3339976192,3340080127,US 3340080128,3340081151,CA 3340081152,3340084223,US 3340084224,3340085247,KN @@ -75685,9 +82825,7 @@ 3341518848,3341520895,CA 3341520896,3341521663,US 3341521664,3341531135,CA -3341531392,3341531647,US -3341531648,3341531903,IN -3341531904,3341534207,US +3341531136,3341534207,US 3341534976,3341537279,CA 3341537280,3341546239,US 3341546240,3341547007,CA @@ -75752,7 +82890,8 @@ 3342517248,3342526463,US 3342526464,3342528511,CA 3342528512,3342543359,US -3342543872,3342552063,US +3342543872,3342548991,US +3342551040,3342552063,US 3342552064,3342553087,CA 3342553088,3342565375,US 3342565376,3342567423,CA @@ -75768,17 +82907,15 @@ 3342603264,3342604799,US 3342604800,3342605311,CA 3342605312,3342605567,US -3342605568,3342614271,CA -3342614528,3342623743,CA -3342624256,3342627839,CA -3342628096,3342663423,CA +3342605568,3342663423,CA 3342663680,3342831103,US 3342831104,3342831359,IN 3342831360,3343013887,US 3343013888,3343015935,CA 3343015936,3343055871,US 3343055872,3343056895,CA -3343056896,3343129087,US +3343056896,3343126015,US +3343126528,3343129087,US 3343129600,3343153151,US 3343153152,3343154943,CA 3343154944,3343167487,US @@ -75809,7 +82946,9 @@ 3343465472,3343466495,JM 3343466496,3343470847,US 3343471104,3343557119,US -3343557376,3343858687,US +3343557376,3343649791,US +3343649792,3343650815,VI +3343650816,3343858687,US 3343858688,3343859199,VG 3343859200,3344111871,US 3344112128,3344116223,US @@ -75837,7 +82976,9 @@ 3344242176,3344242687,US 3344242688,3344255999,CA 3344256000,3344261631,US -3344261888,3344266239,CA +3344261888,3344263430,CA +3344263431,3344263431,US +3344263432,3344266239,CA 3344266240,3344266751,US 3344266752,3344268543,CA 3344268544,3344268799,GB @@ -75882,9 +83023,7 @@ 3344656384,3344658431,US 3344658432,3344660479,CA 3344660480,3344670719,US -3344670720,3344671231,GP -3344671232,3344671487,MF -3344671488,3344671743,GP +3344670720,3344671743,GP 3344671744,3344676863,US 3344676864,3344677407,CA 3344677408,3344677423,US @@ -75979,7 +83118,9 @@ 3345447680,3345448447,FR 3345448448,3345448703,BE 3345448704,3345448959,DE -3345448960,3346140671,US +3345448960,3345659903,US +3345659904,3345660159,CA +3345660160,3346140671,US 3346141184,3346188799,US 3346189312,3346196479,US 3346196480,3346197503,CA @@ -76069,8 +83210,8 @@ 3349545728,3349545983,US 3349545984,3349549567,CA 3349550080,3349551103,CA -3349551104,3349553663,US -3349553664,3349605375,CA +3349551104,3349553407,US +3349553408,3349605375,CA 3349605632,3349607423,CA 3349607936,3349608447,CA 3349608448,3349609471,US @@ -76193,7 +83334,8 @@ 3351043072,3351043583,FR 3351043584,3351044095,CA 3351044096,3351058943,US -3351059456,3351071743,US +3351059456,3351068159,US +3351068672,3351071743,US 3351071744,3351072767,CA 3351072768,3351074815,US 3351074816,3351076863,CA @@ -76201,8 +83343,10 @@ 3351080960,3351081983,AG 3351081984,3351086079,US 3351086080,3351087103,CA -3351087104,3351094527,US -3351094528,3351095295,CA +3351087104,3351094271,US +3351094272,3351094527,CA +3351094528,3351095039,US +3351095040,3351095295,CA 3351095296,3351103487,US 3351103488,3351104511,CA 3351104512,3351104639,JP @@ -76233,8 +83377,7 @@ 3351306240,3351307263,VC 3351307264,3351308287,US 3351308288,3351310335,CA -3351310336,3351318015,US -3351318528,3351326719,US +3351310336,3351326719,US 3351326720,3351328767,CA 3351328768,3351336959,US 3351336960,3351339007,CA @@ -76242,7 +83385,9 @@ 3351357440,3351359487,CA 3351359488,3351372799,US 3351372800,3351373823,BM -3351373824,3351380223,US +3351373824,3351376127,US +3351376128,3351376383,PR +3351376384,3351380223,US 3351380224,3351380479,CA 3351380480,3351380735,US 3351380736,3351381759,CA @@ -76345,14 +83490,18 @@ 3351475712,3351475967,IS 3351475968,3351483391,US 3351483392,3351484415,CA -3351484416,3351485439,US -3351485440,3351488511,CA +3351484416,3351486463,US +3351486464,3351488511,CA 3351488512,3351494911,US 3351494912,3351495679,SG 3351495680,3351495935,US -3351495936,3351496191,SG +3351495936,3351495989,SG +3351495990,3351495990,US +3351495991,3351496191,SG 3351496192,3351496447,US -3351496448,3351496703,SG +3351496448,3351496675,SG +3351496676,3351496679,US +3351496680,3351496703,SG 3351496704,3351497727,US 3351497728,3351498751,CA 3351498752,3351501823,US @@ -76438,8 +83587,8 @@ 3353731504,3353732607,US 3353732608,3353732863,DE 3353732864,3353736191,US -3353736192,3353736703,PR -3353736704,3353737215,US +3353736192,3353736959,PR +3353736960,3353737215,US 3353737216,3353737471,GB 3353737472,3353741823,US 3353742336,3353780223,US @@ -76450,9 +83599,7 @@ 3353861120,3353862143,CA 3353862144,3353862719,US 3353862720,3353862751,CA -3353862752,3353864447,US -3353864448,3353864703,CA -3353864704,3353864959,US +3353862752,3353864959,US 3353864960,3353865215,CA 3353865216,3353884927,US 3353884928,3353885183,GB @@ -76482,7 +83629,9 @@ 3354656768,3354663423,US 3354663936,3354676223,US 3354676224,3354677247,CA -3354677248,3354687487,US +3354677248,3354686975,US +3354686976,3354687231,HK +3354687232,3354687487,US 3354687488,3354688511,CA 3354688512,3354720767,US 3354721280,3354758655,US @@ -76504,8 +83653,7 @@ 3354972160,3354972415,CA 3354972416,3355012607,US 3355013120,3355017215,CA -3355017216,3355052031,US -3355052032,3355052287,CA +3355017216,3355052287,US 3355052288,3355052543,AU 3355052544,3355053311,CA 3355053312,3355053567,US @@ -76530,11 +83678,13 @@ 3355385856,3355407359,US 3355407360,3355408383,PR 3355408384,3355412479,US -3355412480,3355412991,BE +3355412480,3355412607,BE +3355412608,3355412735,US +3355412736,3355412991,BE 3355412992,3355432959,US 3355432960,3355435007,CA 3355435008,3355443199,US -3355443200,3355443200,GB +3355443200,3355443200,CN 3355443201,3355445247,CO 3355445248,3355447295,BR 3355447296,3355447551,CU @@ -76550,7 +83700,6 @@ 3355459584,3355459839,PA 3355459840,3355460095,VE 3355460096,3355460351,CL -3355460352,3355460607,BR 3355460608,3355460863,UY 3355460864,3355461887,BR 3355461888,3355463423,EC @@ -76714,8 +83863,7 @@ 3355870720,3355871231,CR 3355871232,3355873279,BR 3355873280,3355875327,BQ -3355875328,3355876351,MX -3355876352,3355877375,VE +3355875328,3355877375,MX 3355877376,3355885567,CO 3355885568,3355901951,GT 3355901952,3355902975,BR @@ -76899,7 +84047,10 @@ 3356180480,3356190719,CL 3356190720,3356192767,DO 3356192768,3356194815,AR -3356196864,3356229631,VE +3356196864,3356201471,KY +3356201472,3356201727,VE +3356201728,3356213247,KY +3356213248,3356229631,VE 3356229632,3356233727,BR 3356233728,3356237823,CL 3356237824,3356246015,GT @@ -76969,7 +84120,7 @@ 3356368896,3356369407,BR 3356369408,3356369663,EC 3356369664,3356369919,BR -3356370176,3356370943,AR +3356369920,3356370943,AR 3356370944,3356372991,CO 3356372992,3356375039,CU 3356377088,3356379647,CL @@ -76988,13 +84139,13 @@ 3356391168,3356391423,PA 3356393472,3356413439,CL 3356413440,3356413823,CO -3356413824,3356420607,CL -3356420608,3356420991,CO -3356420992,3356421247,CL +3356413824,3356420863,CL +3356420864,3356421119,CO +3356421120,3356421247,CL 3356421248,3356421375,CO -3356421376,3356421759,CL -3356421760,3356422015,CO -3356422016,3356425471,CL +3356421376,3356421631,CL +3356421632,3356422143,CO +3356422144,3356425471,CL 3356425472,3356425599,CO 3356425600,3356426239,CL 3356426240,3356427263,BR @@ -77035,7 +84186,8 @@ 3356988672,3356989439,MX 3356989952,3356996607,MX 3356996608,3356997631,BR -3356997632,3357003007,MX +3356997632,3356998911,MX +3356999168,3357003007,MX 3357003776,3357007871,MX 3357007872,3357011967,BR 3357011968,3357015551,MX @@ -77128,9 +84280,8 @@ 3357451144,3357451151,HN 3357451152,3357451263,GT 3357451264,3357451519,HN -3357451520,3357451575,GT -3357451576,3357451583,NI -3357451584,3357452287,GT +3357451520,3357451775,NI +3357451776,3357452287,GT 3357452288,3357452799,HN 3357452800,3357453055,NI 3357453056,3357453071,GT @@ -77151,7 +84302,9 @@ 3357457712,3357457727,CR 3357457728,3357458431,GT 3357458432,3357474815,CL -3357474816,3357475071,US +3357474816,3357475015,US +3357475016,3357475019,AR +3357475020,3357475071,US 3357475072,3357475887,AR 3357475888,3357475903,VE 3357475904,3357475999,AR @@ -77198,7 +84351,9 @@ 3357480360,3357480367,CO 3357480368,3357480463,AR 3357480464,3357480479,CO -3357480480,3357480719,AR +3357480480,3357480511,AR +3357480512,3357480543,CO +3357480544,3357480719,AR 3357480720,3357480735,CO 3357480736,3357480959,AR 3357480960,3357483007,EC @@ -77213,7 +84368,9 @@ 3357556992,3357557247,AR 3357557248,3357557759,MX 3357557760,3357558783,EC -3357558784,3357559039,AR +3357558784,3357558895,AR +3357558896,3357558903,EC +3357558904,3357559039,AR 3357559040,3357559295,EC 3357559296,3357559551,CA 3357559552,3357559807,US @@ -77237,8 +84394,7 @@ 3357607168,3357613055,MX 3357613056,3357613311,AR 3357613312,3357616127,MX -3357616384,3357618943,MX -3357619200,3357623039,MX +3357616384,3357623039,MX 3357623040,3357623295,AR 3357623296,3357626623,MX 3357627392,3357627647,MX @@ -77266,9 +84422,9 @@ 3357715456,3357715711,MX 3357715968,3357723903,MX 3357724416,3357725183,MX -3357725440,3357726463,MX +3357725440,3357726719,MX 3357726720,3357727743,BR -3357728000,3357728767,MX +3357727744,3357728767,MX 3357728768,3357736959,BR 3357736960,3357745151,VE 3357745152,3357753343,CO @@ -77280,7 +84436,11 @@ 3357776128,3357776383,UY 3357776384,3357776895,US 3357776896,3357777919,CL -3357777920,3357786111,GT +3357777920,3357778415,GT +3357778416,3357778423,SV +3357778424,3357784319,GT +3357784320,3357784335,SV +3357784336,3357786111,GT 3357786112,3357802495,VE 3357802496,3357868031,MX 3357868032,3357933567,PE @@ -77301,8 +84461,8 @@ 3358132128,3358132135,CO 3358132136,3358132607,AR 3358132608,3358132735,CO -3358132736,3358132991,AR -3358132992,3358133119,EC +3358132736,3358132975,AR +3358132976,3358133119,EC 3358133120,3358133247,AR 3358133248,3358133759,VE 3358133760,3358142719,AR @@ -77310,19 +84470,20 @@ 3358142976,3358143231,CO 3358143232,3358143487,AR 3358143488,3358143999,US -3358144000,3358144255,AR +3358144000,3358144127,CL +3358144128,3358144255,AR 3358144256,3358144511,CL 3358144512,3358145023,VE 3358145024,3358149631,AR -3358149632,3358149887,CO -3358149888,3358150015,AR -3358150016,3358150143,CO -3358150144,3358150423,AR +3358149632,3358150399,CO +3358150400,3358150423,AR 3358150424,3358150431,CO 3358150432,3358150479,AR 3358150480,3358150655,CO 3358150656,3358150911,EC -3358150912,3358151263,AR +3358150912,3358151039,AR +3358151040,3358151167,EC +3358151168,3358151263,AR 3358151264,3358151271,EC 3358151272,3358151423,AR 3358151424,3358151551,EC @@ -77334,8 +84495,8 @@ 3358152560,3358152575,PE 3358152576,3358152703,AR 3358152704,3358152959,US -3358152960,3358153087,EC -3358153088,3358153279,AR +3358152960,3358153215,EC +3358153216,3358153279,AR 3358153280,3358153311,US 3358153312,3358153343,AR 3358153344,3358153535,US @@ -77363,10 +84524,16 @@ 3358326784,3358392319,VE 3358392320,3358457855,AR 3358457856,3358523391,PA -3358523392,3358529535,VE +3358523392,3358525951,VE +3358525952,3358526463,AR +3358526464,3358529535,VE 3358529536,3358530303,AR -3358530304,3358532607,VE -3358532608,3358532863,AR +3358530304,3358530943,VE +3358530944,3358531071,AR +3358531072,3358531583,VE +3358531584,3358531839,AR +3358531840,3358532351,VE +3358532352,3358532863,AR 3358532864,3358534399,VE 3358534400,3358534655,AR 3358534656,3358535167,VE @@ -77381,9 +84548,13 @@ 3358549760,3358550015,AR 3358550016,3358553599,VE 3358553600,3358553855,AR -3358553856,3358558463,VE +3358553856,3358556159,VE +3358556160,3358558463,AR 3358558464,3358558591,PY -3358558592,3358562303,VE +3358558592,3358559231,AR +3358559232,3358560255,VE +3358560256,3358561791,AR +3358561792,3358562303,VE 3358562304,3358563327,PE 3358563328,3358564095,CO 3358564096,3358564351,MX @@ -77429,24 +84600,19 @@ 3358567392,3358567407,VE 3358567408,3358567423,AR 3358567424,3358568959,CO -3358568960,3358570495,VE +3358568960,3358569471,AR +3358569472,3358570495,VE 3358570496,3358570751,MX 3358570752,3358571263,PE 3358571264,3358572543,MX -3358572544,3358573055,VE -3358573056,3358573311,AR -3358573312,3358574847,VE -3358574848,3358576127,AR -3358576128,3358577151,VE +3358572544,3358577151,AR 3358577152,3358577407,PE -3358577408,3358577919,AR -3358577920,3358578175,VE -3358578176,3358578431,AR +3358577408,3358578431,AR 3358578432,3358578687,VE 3358578688,3358579967,CO 3358579968,3358580223,AR 3358580224,3358580735,MX -3358580736,3358588927,VE +3358580736,3358588927,AR 3358588928,3358654463,PE 3358654464,3358658559,AR 3358658560,3358660607,CL @@ -77479,9 +84645,7 @@ 3358892032,3358918655,MX 3358918656,3358924799,BR 3358924800,3358965759,MX -3358965760,3358966783,BR -3358966784,3358967039,MX -3358967040,3358973951,BR +3358965760,3358973951,BR 3358973952,3358982143,MX 3358982144,3359047679,CL 3359047680,3359080447,AR @@ -77535,7 +84699,9 @@ 3359520768,3359522815,US 3359522816,3359539199,NI 3359539200,3359571967,PE -3359571968,3359582207,AR +3359571968,3359573759,AR +3359573760,3359574015,US +3359574016,3359582207,AR 3359582208,3359584255,PA 3359584256,3359586303,AR 3359586304,3359588351,CL @@ -77574,7 +84740,9 @@ 3360251904,3360253951,BO 3360253952,3360255999,SV 3360256000,3360260095,CL -3360260096,3360276479,AR +3360260096,3360260351,AR +3360260352,3360260607,US +3360260608,3360276479,AR 3360276480,3360278527,VE 3360278528,3360280575,EC 3360280576,3360282623,CL @@ -77584,9 +84752,7 @@ 3360342016,3360354303,VE 3360354304,3360356351,PA 3360356352,3360358399,CR -3360358400,3360358911,CL -3360358912,3360358919,CO -3360358920,3360366591,CL +3360358400,3360366591,CL 3360366592,3360382975,CO 3360382976,3360399359,VE 3360399360,3360403455,BO @@ -77610,7 +84776,9 @@ 3360707584,3360708095,US 3360708096,3360708223,AR 3360708224,3360708351,US -3360708352,3360708991,AR +3360708352,3360708479,AR +3360708480,3360708735,US +3360708736,3360708991,AR 3360708992,3360709247,US 3360709248,3360709631,AR 3360709632,3360709759,US @@ -77626,7 +84794,9 @@ 3360765952,3360767999,CO 3360768000,3360772351,AR 3360772352,3360772479,BO -3360772480,3360781839,AR +3360772480,3360780399,AR +3360780400,3360780415,BR +3360780416,3360781839,AR 3360781840,3360781847,DO 3360781848,3360781943,AR 3360781944,3360781947,MX @@ -77653,9 +84823,7 @@ 3361072640,3361072767,VE 3361072768,3361072895,CO 3361072896,3361073151,VE -3361073152,3361074175,CO -3361074176,3361074431,VE -3361074432,3361079295,CO +3361073152,3361079295,CO 3361079296,3361144831,CL 3361144832,3361210367,BO 3361210368,3361275903,DO @@ -77704,18 +84872,22 @@ 3362258944,3362324479,CL 3362324480,3362324735,AR 3362324736,3362324991,US -3362324992,3362328063,AR +3362324992,3362327039,AR +3362327040,3362327551,US +3362327552,3362328063,AR 3362328064,3362328575,US 3362328576,3362337279,AR 3362337280,3362338047,US -3362338048,3362342143,AR +3362338048,3362338559,AR +3362338560,3362338815,US +3362338816,3362339327,AR +3362339328,3362339583,US +3362339584,3362342143,AR 3362342144,3362342399,PA 3362342400,3362343423,AR 3362343424,3362343679,US 3362343680,3362344447,AR -3362344448,3362344703,US -3362344704,3362344959,AR -3362344960,3362346751,US +3362344448,3362346751,US 3362346752,3362348799,AR 3362348800,3362349055,US 3362349056,3362351103,CR @@ -77729,8 +84901,7 @@ 3362426880,3362428927,PA 3362428928,3362430975,CL 3362430976,3362447359,CO -3362447360,3362447871,SV -3362447872,3362448895,HN +3362447360,3362448895,HN 3362448896,3362449151,SV 3362449152,3362449407,HN 3362449408,3362451199,SV @@ -77760,7 +84931,13 @@ 3362529280,3362537471,PA 3362537472,3362545663,AR 3362545664,3362549759,PE -3362549760,3362553855,AR +3362549760,3362551871,AR +3362551872,3362551887,MX +3362551888,3362552143,AR +3362552144,3362552159,PR +3362552160,3362553023,AR +3362553024,3362553039,PR +3362553040,3362553855,AR 3362553856,3362557951,PY 3362557952,3362562047,AR 3362570240,3362586623,UY @@ -77893,7 +85070,9 @@ 3368086528,3368087551,CR 3368087552,3370188799,BR 3370188800,3370196991,MX -3370196992,3370487807,BR +3370196992,3370214399,BR +3370214400,3370215423,AR +3370215424,3370487807,BR 3370487808,3370488831,CR 3370488832,3370489855,AR 3370489856,3370490879,VE @@ -77901,7 +85080,9 @@ 3370506240,3370507263,VE 3370507264,3370514943,BR 3370515456,3370516479,AR -3370516480,3376873471,BR +3370516480,3371106303,BR +3371106304,3371122687,MX +3371122688,3376873471,BR 3376881664,3376922623,BR 3376926720,3377291263,BR 3377295360,3377303551,BR @@ -77917,21 +85098,28 @@ 3380761088,3380761599,VE 3380761600,3380764671,BR 3380764672,3380808191,MX +3380808192,3380808703,CR 3380808704,3380811775,MX 3380811776,3380813823,BR 3380813824,3380815103,MX 3380815104,3380815359,CR +3380815360,3380815871,CL 3380815872,3380816127,MX 3380816128,3380816383,BO 3380816896,3380817151,MX +3380817152,3380817407,BO 3380817920,3380818175,MX +3380818176,3380818431,PA 3380818944,3380822527,MX 3380823040,3380824063,BR -3380824064,3380826111,MX +3380824064,3380824319,MX +3380825088,3380825343,MX +3380825344,3380825599,HT 3380826112,3380828159,BR 3380828160,3380828671,MX 3380829184,3380830207,BR 3380830208,3380830463,MX +3380830464,3380830719,CO 3380831232,3380831743,MX 3380832256,3380832767,MX 3380833280,3380833791,MX @@ -77939,6 +85127,7 @@ 3380835328,3380835839,MX 3380836352,3380836607,MX 3380836608,3380836863,PE +3380836864,3380837375,SV 3380837376,3380840447,MX 3380840448,3380843519,BR 3380843520,3380844543,PA @@ -78062,9 +85251,7 @@ 3384410112,3384672255,CL 3384672256,3384688639,HN 3384688640,3384705023,CO -3384705024,3384705535,US -3384705536,3384706047,PA -3384706048,3384707071,US +3384705024,3384707071,US 3384707072,3384721407,PA 3384721408,3384725503,US 3384725504,3384732415,PA @@ -78151,7 +85338,9 @@ 3387424768,3387555839,CO 3387555840,3387568127,AR 3387568128,3387572223,PE -3387572224,3387573375,AR +3387572224,3387572539,AR +3387572540,3387572543,CO +3387572544,3387573375,AR 3387573376,3387573759,CO 3387573760,3387574015,AR 3387574016,3387574143,CO @@ -78159,7 +85348,9 @@ 3387574784,3387575039,CO 3387575040,3387575295,AR 3387575296,3387575423,CO -3387575424,3387575807,AR +3387575424,3387575551,AR +3387575552,3387575567,CO +3387575568,3387575807,AR 3387575808,3387576063,CO 3387576064,3387576319,AR 3387576320,3387578367,EC @@ -78268,7 +85459,8 @@ 3389143040,3389145087,AU 3389145088,3389151231,HK 3389151232,3389152255,JP -3389152256,3389153279,AU +3389152256,3389153023,US +3389153024,3389153279,AU 3389153280,3389161471,TV 3389161472,3389194239,JP 3389194240,3389195775,AU @@ -78291,8 +85483,7 @@ 3389214720,3389218815,NZ 3389218816,3389222911,AU 3389222912,3389223935,US -3389223936,3389225983,IN -3389225984,3389226239,SG +3389223936,3389226239,IN 3389226240,3389226495,AU 3389226496,3389227007,IN 3389227008,3389227519,CN @@ -78414,7 +85605,7 @@ 3389458432,3389460479,AU 3389460480,3389464575,JP 3389464576,3389469695,NZ -3389469696,3389471743,IN +3389471232,3389471487,IN 3389471744,3389472767,NZ 3389472768,3389480959,AU 3389480960,3389489151,JP @@ -78543,7 +85734,10 @@ 3389812736,3389813759,AU 3389813760,3389814015,CN 3389814016,3389814527,TH -3389814528,3389846527,AU +3389814528,3389815295,AU +3389816064,3389816575,AU +3389816576,3389816831,US +3389816832,3389846527,AU 3389846528,3389847551,JP 3389847552,3389849599,NZ 3389849600,3389915135,JP @@ -78890,7 +86084,9 @@ 3391954944,3391971327,HK 3391971328,3391979519,AU 3391979520,3391979775,HK -3391979776,3391980031,JP +3391979776,3391979955,CN +3391979956,3391979957,JP +3391979958,3391980031,CN 3391980032,3391980543,HK 3391980544,3391983615,MY 3391983616,3391984639,NP @@ -78991,7 +86187,6 @@ 3392416256,3392416767,HK 3392416768,3392417023,IN 3392417024,3392417535,AU -3392417536,3392417791,HK 3392417792,3392418559,ID 3392418560,3392418815,SG 3392418816,3392419071,ID @@ -79073,9 +86268,7 @@ 3392692224,3392700415,IN 3392700416,3392708607,SG 3392708608,3392712703,ID -3392712704,3392714751,AF -3392714752,3392715007,FR -3392715008,3392716799,AF +3392712704,3392716799,AF 3392716800,3392733183,IN 3392733184,3392741375,ID 3392741376,3392765951,PH @@ -79237,9 +86430,7 @@ 3393189888,3393190911,CN 3393190912,3393191167,IN 3393191424,3393191935,SB -3393191936,3393222911,HK -3393222912,3393223167,MY -3393223168,3393257471,HK +3393191936,3393257471,HK 3393257472,3393260031,CN 3393260032,3393260543,BD 3393260544,3393265663,AU @@ -79356,7 +86547,9 @@ 3393855744,3393855999,NZ 3393856000,3393856255,AU 3393856256,3393856511,HK -3393856768,3393857023,SG +3393856768,3393856896,AU +3393856897,3393856897,SG +3393856898,3393857023,AU 3393857024,3393857535,NZ 3393857536,3393858047,HK 3393858304,3393858559,ID @@ -79553,7 +86746,9 @@ 3394760704,3394764799,ID 3394764800,3394772991,HK 3394777088,3394781183,JP -3394781184,3394789375,MP +3394781184,3394785023,MP +3394785024,3394785279,US +3394785280,3394789375,MP 3394789376,3394797567,HK 3394797568,3394813951,IN 3394813952,3394815999,JP @@ -79603,7 +86798,7 @@ 3394904320,3394904575,IN 3394904576,3394905087,AU 3394905088,3394905343,BN -3394905344,3394906111,AU +3394905600,3394906111,AU 3394906112,3394906367,IN 3394906368,3394906623,AU 3394906624,3394907135,IN @@ -79611,7 +86806,6 @@ 3394908160,3394910207,AU 3394910208,3394912255,NZ 3394912256,3394920447,PF -3394920448,3394924543,IN 3394924544,3394928639,CN 3394928640,3394936831,PH 3394936832,3394940927,AU @@ -79745,9 +86939,9 @@ 3397070848,3397074943,PH 3397074944,3397083135,HK 3397083136,3397087231,CN -3397091328,3397097471,GU -3397097472,3397097855,MP -3397097856,3397099519,GU +3397091328,3397095679,GU +3397095680,3397095935,MP +3397095936,3397099519,GU 3397099520,3397103615,HK 3397103616,3397105663,LA 3397105664,3397107711,JP @@ -79789,7 +86983,7 @@ 3397213184,3397213439,IN 3397213440,3397213695,AU 3397213696,3397214207,ID -3397214208,3397214719,MN +3397214208,3397214719,BD 3397214720,3397215231,AU 3397215232,3397215743,ID 3397215744,3397216255,PH @@ -79870,7 +87064,8 @@ 3397500928,3397501951,BD 3397501952,3397503999,IN 3397504000,3397505023,TH -3397505024,3397506559,IN +3397505280,3397505535,IN +3397506048,3397506559,IN 3397506560,3397506815,AU 3397506816,3397507071,IN 3397507072,3397507583,ID @@ -79958,8 +87153,8 @@ 3397878784,3397881855,JP 3397881856,3397882111,HK 3397882112,3397887999,JP -3397888000,3397888768,IN -3397888769,3397910527,JP +3397888000,3397889023,IN +3397889024,3397910527,JP 3397910528,3397918719,SG 3397918720,3397922815,AU 3397922816,3397926911,CN @@ -80070,9 +87265,7 @@ 3398639904,3398639907,MY 3398639908,3398640671,JP 3398640672,3398640695,SG -3398640696,3398641407,JP -3398641408,3398641663,MY -3398641664,3398641919,JP +3398640696,3398641919,JP 3398641920,3398642175,AU 3398642176,3398642431,JP 3398642432,3398642943,AU @@ -80108,8 +87301,7 @@ 3398830080,3398831103,KH 3398831104,3398831359,JP 3398831360,3398831615,HK -3398831616,3398831871,SG -3398831872,3398832127,JP +3398831616,3398832127,JP 3398832128,3398840319,CN 3398840320,3398842367,JP 3398842368,3398843391,CN @@ -80291,9 +87483,7 @@ 3399995392,3399999487,KR 3399999488,3400000255,SG 3400000256,3400000511,AU -3400000512,3400002303,SG -3400002304,3400002367,HK -3400002368,3400004607,SG +3400000512,3400004607,SG 3400004608,3400004863,AU 3400004864,3400005119,SG 3400005120,3400005375,AU @@ -80400,7 +87590,9 @@ 3400433664,3400435711,HK 3400435712,3400435967,BD 3400435968,3400441855,HK -3400441856,3400450047,NZ +3400441856,3400446975,NZ +3400446976,3400447231,GB +3400447232,3400450047,NZ 3400450048,3400458239,JP 3400458240,3400466431,AU 3400466432,3400499199,MO @@ -80428,7 +87620,9 @@ 3400648832,3400649943,SG 3400649944,3400649951,HK 3400649952,3400650239,SG -3400650240,3400654847,AU +3400650240,3400650495,AU +3400650496,3400650751,SG +3400650752,3400654847,AU 3400654848,3400663039,IN 3400663040,3400683519,MY 3400683520,3400691711,JP @@ -80476,7 +87670,8 @@ 3401400320,3401404415,AU 3401404416,3401408511,CN 3401408512,3401416703,HK -3401416704,3401420799,KR +3401416704,3401416959,KR +3401417728,3401420799,SG 3401420800,3401424895,JP 3401424896,3401428991,NZ 3401428992,3401431039,JP @@ -80500,7 +87695,9 @@ 3401545728,3401547775,BD 3401547776,3401580543,IN 3401580544,3402629119,CN -3402629120,3405774847,JP +3402629120,3402917631,JP +3402917632,3402917887,US +3402917888,3405774847,JP 3405774848,3405775871,AU 3405775872,3405776895,CN 3405776896,3405777407,AU @@ -80698,8 +87895,6 @@ 3406208512,3406208767,AU 3406208768,3406209023,CN 3406209024,3406221311,AU -3406221824,3406222079,IN -3406222592,3406222847,IN 3406223360,3406225407,AU 3406225408,3406229503,CN 3406229504,3406231039,AU @@ -81009,7 +88204,9 @@ 3406864640,3406865151,CN 3406865152,3406865663,AU 3406865664,3406865919,IN -3406865920,3406871039,AU +3406865920,3406869759,AU +3406869760,3406870015,JP +3406870016,3406871039,AU 3406871040,3406871551,CN 3406871552,3406881791,AU 3406881792,3406882047,CN @@ -81056,7 +88253,9 @@ 3406948352,3406948607,AU 3406948608,3406948863,CN 3406948864,3406950655,AU -3406950656,3406951423,NF +3406950656,3406950911,NF +3406950912,3406951167,AU +3406951168,3406951423,NF 3406951424,3406952447,AU 3406952448,3406952703,CN 3406952960,3406954239,AU @@ -81361,8 +88560,8 @@ 3407377408,3407377663,CN 3407377664,3407378943,AU 3407378944,3407379455,CN -3407379456,3407382271,AU -3407382272,3407382527,JP +3407379456,3407382015,AU +3407382016,3407382527,JP 3407382528,3407384831,AU 3407384832,3407385087,CN 3407385088,3407386623,AU @@ -81436,7 +88635,11 @@ 3407473408,3407473919,CN 3407473920,3407475199,AU 3407475200,3407475455,CN -3407475456,3407481855,AU +3407475456,3407481087,AU +3407481088,3407481223,JP +3407481224,3407481231,AU +3407481232,3407481599,JP +3407481600,3407481855,AU 3407481856,3407482111,CN 3407482112,3407487487,AU 3407487488,3407487743,CN @@ -82101,7 +89304,9 @@ 3409871616,3409871871,CN 3409871872,3409873663,AU 3409873664,3409873919,CN -3409873920,3409876991,AU +3409873920,3409875967,AU +3409875968,3409876735,JP +3409876736,3409876991,AU 3409876992,3409878015,TH 3409878016,3409879295,AU 3409879296,3409879551,CN @@ -82299,7 +89504,7 @@ 3411641344,3411642367,IN 3411642368,3411643391,CN 3411643392,3411644415,VN -3411644416,3411644927,AU +3411644672,3411644927,AU 3411644928,3411645951,ID 3411645952,3411646207,SG 3411646208,3411647487,IN @@ -82478,7 +89683,8 @@ 3413180416,3413213183,TH 3413213184,3413229567,VN 3413229568,3413245951,AU -3413245952,3413262335,MY +3413245952,3413251071,MY +3413251072,3413262335,JP 3413262336,3413263359,PH 3413270528,3413278719,TH 3413278720,3413295103,NZ @@ -82495,11 +89701,7 @@ 3413327872,3413344255,IN 3413344256,3413360639,PH 3413360640,3413377023,MY -3413377024,3413395199,SG -3413395200,3413395455,AU -3413395456,3413415935,SG -3413415936,3413416191,AU -3413416192,3413524479,SG +3413377024,3413524479,SG 3413524480,3413540863,TH 3413540864,3413557247,NZ 3413557248,3413565439,CN @@ -82577,7 +89779,9 @@ 3413934080,3413946367,IN 3413946368,3413950463,AU 3413950464,3413966847,IN -3413966848,3414050303,SG +3413966848,3414024191,SG +3414024192,3414024447,AU +3414024448,3414050303,SG 3414050304,3414050559,US 3414050560,3414155519,SG 3414155520,3414155775,PH @@ -82748,7 +89952,6 @@ 3416262656,3416264703,AU 3416264704,3416268799,JP 3416268800,3416272895,HK -3416274688,3416274943,MN 3416274944,3416276991,ID 3416276992,3416285183,HK 3416285184,3416287231,VN @@ -82777,8 +89980,6 @@ 3416372224,3416372479,CN 3416372480,3416372735,SG 3416372736,3416372991,AU -3416373248,3416373503,AU -3416373504,3416373759,SG 3416373760,3416374271,AU 3416374272,3416374527,PH 3416374528,3416374783,IN @@ -82790,12 +89991,13 @@ 3416474584,3416474599,AU 3416474600,3416474639,JP 3416474640,3416474647,NZ -3416474648,3416475391,JP -3416475392,3416475647,NZ -3416475648,3416482047,JP -3416482048,3416482303,SG -3416482304,3416489727,JP -3416489728,3416489983,AU +3416474648,3416475439,JP +3416475440,3416475455,NZ +3416475456,3416482047,JP +3416482048,3416482055,SG +3416482056,3416489755,JP +3416489756,3416489759,AU +3416489760,3416489983,JP 3416489984,3416506367,VN 3416506368,3416514559,TW 3416514560,3416522751,IN @@ -82803,8 +90005,8 @@ 3416588288,3416653823,JP 3416653824,3416667135,AU 3416667136,3416667647,US -3416667648,3416667775,AU -3416667776,3416668159,US +3416667648,3416667903,AU +3416667904,3416668159,US 3416668160,3416686591,AU 3416686592,3416694783,SG 3416694784,3416702975,CN @@ -82887,7 +90089,7 @@ 3417014272,3417022463,JP 3417022464,3417030655,KR 3417030656,3417034751,AU -3417034752,3417035775,IN +3417035008,3417035775,IN 3417035776,3417036799,JP 3417036800,3417037823,ID 3417037824,3417038079,AU @@ -82912,14 +90114,11 @@ 3417182208,3417184767,AU 3417184768,3417185023,MN 3417185024,3417185279,AF -3417185280,3417185535,AU -3417185536,3417185791,SG +3417185280,3417185791,SG 3417185792,3417186303,NZ 3417186304,3417194495,HK 3417194496,3417198591,JP -3417198592,3417200127,SG -3417200128,3417200383,AU -3417200384,3417200639,SG +3417198592,3417200639,SG 3417200640,3417202687,JP 3417202688,3417210879,CN 3417210880,3417227263,AU @@ -83034,7 +90233,9 @@ 3418243072,3418251263,PH 3418251264,3418255359,CN 3418255360,3418257407,ID -3418257408,3418259455,HK +3418257408,3418257663,HK +3418257664,3418257919,AU +3418257920,3418259455,HK 3418259456,3418267647,IN 3418267648,3418271743,VN 3418271744,3418273791,SG @@ -83045,9 +90246,7 @@ 3418282240,3418282495,AU 3418282496,3418283519,PH 3418283520,3418284031,AU -3418284032,3418286847,SG -3418286848,3418287103,AU -3418287104,3418288127,SG +3418284032,3418288127,SG 3418288128,3418290175,ID 3418290176,3418290431,IN 3418290432,3418290687,CN @@ -83066,7 +90265,6 @@ 3418301440,3418302463,AU 3418302464,3418304511,ID 3418304512,3418306559,VN -3418306560,3418307583,MN 3418308608,3418324991,CN 3418324992,3418326015,VU 3418326016,3418326271,AU @@ -83094,7 +90292,9 @@ 3418403584,3418403839,AU 3418403840,3418406911,JP 3418406912,3418423295,IN -3418423296,3418444091,HK +3418423296,3418434559,HK +3418434560,3418434815,SG +3418434816,3418444091,HK 3418444092,3418444095,CN 3418444096,3418456063,HK 3418456064,3418472447,IN @@ -83156,7 +90356,13 @@ 3419078656,3419209727,TW 3419209728,3419226111,VN 3419226112,3419234303,CN -3419234304,3419242495,JP +3419234304,3419239935,JP +3419239936,3419240447,US +3419240448,3419240959,JP +3419240960,3419241471,US +3419241472,3419241983,JP +3419241984,3419242239,US +3419242240,3419242495,JP 3419242496,3419275263,CN 3419275264,3419340799,AU 3419340800,3419344895,TW @@ -83233,8 +90439,8 @@ 3419897856,3419899903,JP 3419899904,3419900159,FR 3419900160,3419900415,BE -3419900416,3419901439,AU -3419901440,3419901951,NZ +3419900416,3419901567,AU +3419901568,3419901951,NZ 3419901952,3419902207,AU 3419902208,3419902463,HK 3419902464,3419902719,CN @@ -83313,15 +90519,12 @@ 3422000536,3422000536,IN 3422000537,3422552063,KR 3422552064,3422850559,US -3422850560,3422851071,GB -3422851072,3422955519,US +3422850560,3422850815,GB +3422850816,3422955519,US 3422955520,3422956799,FR -3422956800,3423092735,US -3423092736,3423092767,VI -3423092768,3423092783,US -3423092784,3423092831,VI -3423092832,3423092847,US -3423092848,3423093759,VI +3422956800,3423076351,US +3423077376,3423092735,US +3423092736,3423093759,VI 3423093760,3423094783,US 3423094784,3423095807,CA 3423095808,3423128575,US @@ -83333,10 +90536,8 @@ 3423182848,3423184895,CA 3423184896,3423204095,US 3423204096,3423204351,CA -3423204352,3423222271,US -3423222272,3423222527,CA -3423222528,3423229951,US -3423232000,3423236095,US +3423204352,3423229951,US +3423230976,3423236095,US 3423238144,3423248383,US 3423248384,3423249407,CA 3423249408,3423258623,US @@ -83368,9 +90569,7 @@ 3423468544,3423469567,CA 3423469568,3423473663,US 3423473664,3423474687,CA -3423474688,3423480063,US -3423480064,3423480319,AU -3423480320,3423480831,US +3423474688,3423480831,US 3423480832,3423480987,NG 3423480988,3423480988,US 3423480989,3423481343,NG @@ -83440,15 +90639,16 @@ 3424507136,3424507391,CA 3424507392,3425173503,US 3425173504,3425304575,CA -3425304576,3425471487,US -3425472512,3425697791,US +3425304576,3425697791,US 3425697792,3425699839,CA 3425699840,3425711615,US 3425713152,3425714175,US 3425714176,3425722367,CA 3425722368,3425726463,US 3425728512,3425828863,US -3425828864,3425894399,CA +3425828864,3425869167,CA +3425869168,3425869183,US +3425869184,3425894399,CA 3425894400,3426013183,US 3426013184,3426013439,IL 3426013440,3426306559,US @@ -83767,9 +90967,7 @@ 3429171200,3429236735,CA 3429236736,3429382143,US 3429382144,3429382399,DE -3429382400,3429401855,US -3429401856,3429402111,CA -3429402112,3429500927,US +3429382400,3429500927,US 3429500928,3429502975,CA 3429502976,3429517407,US 3429517408,3429517411,HK @@ -83786,9 +90984,7 @@ 3429892096,3429957631,CA 3429957632,3430073354,US 3430073355,3430073355,AU -3430073356,3430074111,US -3430074112,3430074367,AU -3430074368,3430146047,US +3430073356,3430146047,US 3430148096,3430328831,US 3430328832,3430329087,GH 3430329088,3430354943,US @@ -83856,12 +91052,15 @@ 3430845440,3430845951,MX 3430845952,3430849535,US 3430849536,3430850047,CA -3430850048,3430973951,US -3430974208,3431114495,US +3430850048,3431114495,US 3431114496,3431114751,CA 3431114752,3431468031,US 3431468032,3431469055,CA -3431469056,3431596287,US +3431469056,3431526911,US +3431526912,3431526921,CH +3431526922,3431526922,US +3431526923,3431527167,CH +3431527168,3431596287,US 3431596288,3431602687,CA 3431602688,3431602943,US 3431602944,3431606271,CA @@ -83951,7 +91150,8 @@ 3432689152,3432689663,CA 3432689664,3432695807,US 3432697856,3432708095,US -3432710144,3432807423,US +3432710144,3432717311,US +3432718336,3432807423,US 3432807424,3432808447,CA 3432808448,3433824511,US 3433824512,3433824767,DE @@ -83969,7 +91169,8 @@ 3434014720,3434015231,US 3434015232,3434020607,CA 3434020608,3434427391,US -3434427392,3434428415,HR +3434427392,3434428159,HR +3434428160,3434428415,HN 3434428416,3434433279,US 3434433280,3434433535,PR 3434433536,3434553343,US @@ -83981,7 +91182,9 @@ 3434575616,3434583039,US 3434583040,3434584063,NL 3434584064,3434807551,US -3434807552,3434831359,CA +3434807552,3434810111,CA +3434810112,3434810367,US +3434810368,3434831359,CA 3434831360,3434831615,US 3434831616,3434872575,CA 3434872576,3434913791,US @@ -84016,9 +91219,7 @@ 3436290048,3436314367,CA 3436314368,3436476415,US 3436476416,3436478463,AW -3436478464,3436492799,US -3436492800,3436493055,NL -3436493056,3436507135,US +3436478464,3436507135,US 3436507136,3436509183,BB 3436509184,3436697087,US 3436697088,3436697343,VE @@ -84140,8 +91341,8 @@ 3437755904,3437756159,US 3437756160,3437756415,IE 3437756416,3437772799,US -3437772800,3437776895,CA -3437776896,3437789863,US +3437772800,3437776639,CA +3437776640,3437789863,US 3437789864,3437789871,AU 3437789872,3437961215,US 3437961216,3437964287,ZA @@ -84290,8 +91491,8 @@ 3449212928,3449213183,US 3449213184,3449213695,CA 3449213696,3449214975,US -3449214976,3449215743,CA -3449215744,3449215871,US +3449214976,3449215487,CA +3449215488,3449215871,US 3449215872,3449215999,CA 3449216000,3449220607,US 3449220608,3449221375,CA @@ -84310,9 +91511,7 @@ 3449575680,3449593855,US 3449593856,3449594111,AU 3449594112,3449638911,US -3449638912,3449639167,GB -3449639168,3449639423,US -3449639424,3449639679,GB +3449638912,3449639679,GB 3449639680,3449639935,US 3449639936,3449640191,GB 3449640192,3449640447,NL @@ -84329,7 +91528,9 @@ 3449843200,3449843711,YE 3449843712,3449874687,US 3449874688,3449874943,AG -3449874944,3449923583,US +3449874944,3449884159,US +3449884160,3449884415,AS +3449884416,3449923583,US 3449923584,3449923839,ES 3449923840,3449974783,US 3449974784,3449976831,CA @@ -84380,17 +91581,13 @@ 3450950656,3450951679,JP 3450951680,3450953727,US 3450953728,3450957823,DE -3450957824,3450974207,US -3450974208,3450974463,GB -3450974464,3450975231,US +3450957824,3450975231,US 3450975232,3450975743,LB 3450975744,3450982399,US 3450982400,3450984447,TW 3450984448,3450986495,PH 3450986496,3450986751,HK -3450986752,3450987007,US -3450987008,3450987263,CN -3450987264,3451170303,US +3450986752,3451170303,US 3451170304,3451170559,VE 3451170560,3451187967,US 3451187968,3451188223,AU @@ -84467,9 +91664,7 @@ 3452174336,3452180479,US 3452181504,3452436479,US 3452436480,3452502015,CA -3452502016,3452678399,US -3452678400,3452682239,BE -3452682240,3452715007,US +3452502016,3452715007,US 3452715008,3452723199,CA 3452723200,3452764671,US 3452764672,3452765183,CA @@ -84491,9 +91686,7 @@ 3452770304,3452770559,CA 3452770560,3452770815,US 3452770816,3452771071,CA -3452771072,3452771327,US -3452771328,3452771583,CA -3452771584,3452771839,US +3452771072,3452771839,US 3452771840,3452773119,CA 3452773120,3452773375,US 3452773376,3452773887,CA @@ -84570,7 +91763,9 @@ 3452813312,3452813567,US 3452813568,3452814079,CA 3452814080,3452814335,US -3452814336,3452816127,CA +3452814336,3452815359,CA +3452815360,3452815615,US +3452815616,3452816127,CA 3452816128,3452816511,US 3452816512,3452816527,CA 3452816528,3452816895,US @@ -84588,7 +91783,9 @@ 3452821504,3452822271,US 3452822272,3452822527,CA 3452822528,3452822783,US -3452822784,3452824063,CA +3452822784,3452823551,CA +3452823552,3452823807,US +3452823808,3452824063,CA 3452824064,3452824319,US 3452824320,3452824575,CA 3452824576,3452824831,US @@ -84917,7 +92114,9 @@ 3456303104,3456311295,JP 3456311296,3456360447,US 3456360448,3456364543,BG -3456364544,3456892927,US +3456364544,3456856063,US +3456856064,3456856319,CA +3456856320,3456892927,US 3456892928,3456958463,CA 3456958464,3457551871,US 3457551872,3457552127,CA @@ -84965,7 +92164,7 @@ 3458820096,3458820351,CA 3458820352,3458820863,US 3458820864,3458821119,JM -3458822144,3459055615,US +3458821120,3459055615,US 3459055616,3459121151,CA 3459121152,3459186687,US 3459186688,3459252223,CA @@ -85091,14 +92290,12 @@ 3459456512,3459456767,US 3459456768,3459457279,CA 3459457536,3459457791,CA -3459457792,3459458047,PR 3459458048,3459512319,US 3459512320,3459513855,CA 3459513856,3459592191,US 3459592192,3459596287,CA 3459596288,3459614719,US -3459616768,3459617023,CA -3459617024,3459617791,US +3459616768,3459617791,US 3459617792,3459617999,CA 3459618000,3459618000,ID 3459618001,3459618047,CA @@ -85107,12 +92304,14 @@ 3459619072,3459622911,US 3459624960,3459629055,BM 3459629056,3459631103,US -3459633152,3459731455,US +3459633152,3459686399,US +3459686400,3459687167,NL +3459687168,3459731455,US 3459731456,3459735551,CA 3459735552,3459745535,US 3459745536,3459745791,IT 3459745792,3459842815,US -3459842816,3459843071,AR +3459842816,3459843071,BR 3459843072,3459848959,US 3459848960,3459849215,FR 3459849216,3459850239,US @@ -85441,7 +92640,9 @@ 3464388608,3464391935,US 3464391936,3464392191,CA 3464392192,3464394751,US -3464394752,3464396799,VC +3464394752,3464395263,VC +3464395264,3464395519,LC +3464395520,3464396799,VC 3464396800,3464415231,US 3464417280,3464421631,US 3464421632,3464421887,CA @@ -85510,9 +92711,9 @@ 3465962496,3465962751,CA 3465962752,3466067967,US 3466067968,3466068223,CA -3466068224,3466068991,US -3466068992,3466069247,CA -3466069248,3466069343,US +3466068224,3466069071,US +3466069072,3466069087,CA +3466069088,3466069343,US 3466069344,3466069375,CA 3466069376,3466069447,US 3466069448,3466069455,CA @@ -85556,11 +92757,13 @@ 3466914304,3466914559,FR 3466914560,3466929407,US 3466929408,3466929663,IT -3466929664,3466937663,US +3466929664,3466937599,US +3466937600,3466937663,ES 3466937664,3466937669,DE 3466937670,3466937670,US 3466937671,3466937727,DE -3466937728,3466938444,US +3466937728,3466937855,ES +3466937856,3466938444,US 3466938445,3466938448,HK 3466938449,3466938807,US 3466938808,3466938811,GB @@ -85700,9 +92903,7 @@ 3469176320,3469176575,MX 3469176576,3469186303,US 3469186304,3469186559,MX -3469186560,3469859583,US -3469859584,3469859839,CA -3469859840,3469893631,US +3469186560,3469893631,US 3469893632,3469901823,CA 3469901824,3469989887,US 3469990400,3470131199,US @@ -85802,7 +93003,9 @@ 3473755392,3473755647,HN 3473755648,3473765887,US 3473765888,3473766399,EC -3473766400,3473901055,US +3473766400,3473786111,US +3473786112,3473786127,PR +3473786128,3473901055,US 3473901056,3473901311,EC 3473901312,3473917439,US 3473917440,3473917695,PR @@ -85837,7 +93040,9 @@ 3475670272,3475670527,AI 3475670528,3475670783,LC 3475670784,3475670847,DM -3475670848,3475671039,AG +3475670848,3475670857,AG +3475670858,3475670858,DM +3475670859,3475671039,AG 3475671040,3475681279,US 3475681280,3475685375,HN 3475685376,3475851263,US @@ -86021,7 +93226,9 @@ 3481843456,3481843711,GB 3481843712,3481951395,US 3481951396,3481951399,GB -3481951400,3481964575,US +3481951400,3481958271,US +3481958272,3481958399,NL +3481958400,3481964575,US 3481964576,3481964579,IE 3481964580,3481993791,US 3481993792,3481993799,CA @@ -86105,9 +93312,9 @@ 3482039296,3482039551,US 3482039552,3482040319,CA 3482040320,3482041087,US -3482041088,3482041343,CA -3482041344,3482041599,US -3482041600,3482042367,CA +3482041088,3482041855,CA +3482041856,3482042111,US +3482042112,3482042367,CA 3482042368,3482043903,US 3482043904,3482044927,CA 3482044928,3482045183,US @@ -86125,7 +93332,11 @@ 3482051584,3482051839,US 3482051840,3482052863,CA 3482052864,3482053631,US -3482053632,3482054655,CA +3482053632,3482053887,CA +3482053888,3482053999,US +3482054000,3482054015,CA +3482054016,3482054143,US +3482054144,3482054655,CA 3482054656,3482058239,US 3482058240,3482058495,CA 3482058496,3482583039,US @@ -86246,9 +93457,9 @@ 3485462528,3485464575,VC 3485464576,3485466623,LC 3485466624,3485597695,US -3485597696,3485672543,CA -3485672544,3485672551,US -3485672552,3485695999,CA +3485597696,3485694975,CA +3485694976,3485695231,US +3485695232,3485695999,CA 3485696000,3485721056,US 3485721057,3485721057,AE 3485721058,3485959423,US @@ -86457,11 +93668,11 @@ 3486702592,3486702847,CA 3486702848,3487039487,US 3487039488,3487105023,CA -3487105024,3487175935,US +3487105024,3487174143,US +3487174144,3487174271,CH +3487174272,3487175935,US 3487175936,3487176191,GB -3487176192,3487177983,US -3487177984,3487178239,GB -3487178240,3487181359,US +3487176192,3487181359,US 3487181360,3487181375,GB 3487181376,3487189247,US 3487189248,3487189503,DK @@ -86551,7 +93762,7 @@ 3489399040,3489464319,US 3489464320,3489529855,CA 3489529856,3489562623,US -3489563136,3489563391,JM +3489565440,3489565695,JM 3489566720,3489575935,US 3489575936,3489576959,CN 3489576960,3489577215,US @@ -86581,7 +93792,9 @@ 3490265344,3490267135,CO 3490267136,3490488319,US 3490488320,3490489343,PR -3490489344,3490703615,US +3490489344,3490702847,US +3490702848,3490703103,AS +3490703104,3490703615,US 3490703616,3490703871,PR 3490703872,3490786047,US 3490786048,3490786303,PR @@ -86594,9 +93807,7 @@ 3491478528,3491637247,US 3491637248,3491637759,CO 3491637760,3491651583,US -3491651584,3491654655,VI -3491654656,3491654911,US -3491654912,3491659775,VI +3491651584,3491659775,VI 3491659776,3491743743,US 3491743744,3491745791,CO 3491745792,3491969023,US @@ -86609,21 +93820,27 @@ 3492812760,3492812763,JP 3492812764,3492845823,US 3492845824,3492846079,CH -3492846080,3492867071,US +3492846080,3492858111,US +3492858112,3492858367,SA +3492858368,3492864767,US +3492864768,3492865023,CA +3492865024,3492865279,US +3492865280,3492865359,GB +3492865360,3492865375,US +3492865376,3492865504,GB +3492865505,3492865505,US +3492865506,3492865535,GB +3492865536,3492867071,US 3492867072,3492867327,FR -3492867328,3492868607,US -3492868608,3492868863,MX -3492868864,3492869631,US +3492867328,3492869631,US 3492869632,3492869887,BR 3492869888,3492877954,US 3492877955,3492877955,CA -3492877956,3492886527,US -3492886528,3492886559,GB -3492886560,3492886591,US -3492886592,3492886783,GB -3492886784,3492894975,US +3492877956,3492894975,US 3492894976,3492895231,BE -3492895232,3492912127,US +3492895232,3492910079,US +3492910080,3492910207,GB +3492910208,3492912127,US 3492912128,3492912151,GB 3492912152,3492912159,US 3492912160,3492912383,GB @@ -86631,9 +93848,9 @@ 3492913664,3492913919,CA 3492913920,3492917247,US 3492917248,3492917503,VI -3492917504,3492923391,US -3492923392,3492923647,GB -3492923648,3492933375,US +3492917504,3492921855,US +3492921856,3492922111,VI +3492922112,3492933375,US 3492933376,3492933376,CA 3492933377,3492933377,CH 3492933378,3492933631,CA @@ -86645,17 +93862,15 @@ 3492950864,3492950879,DE 3492950880,3492954623,US 3492954624,3492955135,GB -3492955136,3492960255,US -3492960256,3492960511,ES -3492960512,3492962815,US -3492962816,3492963071,GB -3492963072,3492968191,US +3492955136,3492957695,US +3492957696,3492958207,VI +3492958208,3492962559,US +3492962560,3492962815,GB +3492962816,3492968191,US 3492968192,3492968447,GB -3492968448,3492969505,US -3492969506,3492969506,VI -3492969507,3492969535,US -3492969536,3492969599,VI -3492969600,3492994815,US +3492968448,3492969471,US +3492969472,3492969727,VI +3492969728,3492994815,US 3492994816,3492995071,GB 3492995072,3492996127,US 3492996128,3492996136,GB @@ -86665,15 +93880,15 @@ 3493013760,3493014015,GB 3493014016,3493014627,US 3493014628,3493014628,GB -3493014629,3493029341,US -3493029342,3493029342,GB -3493029343,3493039359,US +3493014629,3493029119,US +3493029120,3493029311,GB +3493029312,3493029327,US +3493029328,3493029375,GB +3493029376,3493039359,US 3493039360,3493039615,AR 3493039616,3493061119,US 3493061120,3493061375,BR -3493061376,3493062911,US -3493062912,3493063167,DE -3493063168,3493073151,US +3493061376,3493073151,US 3493073152,3493073407,BO 3493073408,3493073663,US 3493073664,3493073919,BO @@ -86708,10 +93923,10 @@ 3493987328,3493990399,US 3493990400,3493991423,CA 3493991424,3493998591,US -3493998592,3493998847,AI -3493998848,3493999359,KN +3493998592,3493999103,AI +3493999104,3493999359,KN 3493999360,3494000639,AI -3494000640,3494003711,US +3494000640,3494002687,US 3494003712,3494004735,CA 3494004736,3494009855,US 3494009856,3494010879,CA @@ -86757,7 +93972,7 @@ 3494244352,3494246399,CA 3494246400,3494247423,US 3494247424,3494250495,CA -3494250496,3494262783,US +3494251520,3494262783,US 3494262784,3494264831,CA 3494264832,3494271999,US 3494272000,3494273023,KN @@ -86780,7 +93995,8 @@ 3494361088,3494362111,CA 3494362112,3494380543,US 3494380544,3494381567,CA -3494381568,3494402559,US +3494381568,3494386687,US +3494387712,3494402559,US 3494402560,3494402815,GB 3494402816,3494410239,US 3494410240,3494412287,CA @@ -86803,9 +94019,7 @@ 3494496512,3494496767,US 3494498304,3494510591,US 3494510592,3494512639,CA -3494512640,3494512895,US -3494512896,3494513151,NO -3494513152,3494516735,US +3494512640,3494516735,US 3494516736,3494517759,CA 3494517760,3494540031,US 3494540032,3494540287,UG @@ -86855,7 +94069,8 @@ 3494788096,3494788351,NG 3494788352,3494788607,LY 3494788608,3494789119,CA -3494789120,3494852607,US +3494789120,3494812671,US +3494813696,3494852607,US 3494852608,3494854655,CA 3494854656,3494862847,US 3494862848,3494863871,DM @@ -86916,10 +94131,11 @@ 3495215104,3495217151,VI 3495217152,3495219199,VC 3495219200,3495225343,US +3495225856,3495226111,GB 3495226624,3495226879,US 3495227392,3495251967,US 3495251968,3495254015,CA -3495254016,3495260159,US +3495255040,3495260159,US 3495260160,3495261183,CA 3495261184,3495271423,US 3495272192,3495285759,US @@ -86980,9 +94196,9 @@ 3495620608,3495622655,CA 3495622656,3495635967,US 3495636992,3495647231,US -3495648000,3495653887,US -3495653888,3495654143,CA -3495654144,3495673855,US +3495648000,3495654143,US +3495654144,3495654399,CA +3495654400,3495673855,US 3495673856,3495674879,MF 3495674880,3495675391,VG 3495675392,3495688191,US @@ -87018,9 +94234,10 @@ 3495864320,3495864831,DM 3495864832,3495865343,MF 3495865344,3495866367,US -3495866368,3495866623,VC -3495866624,3495866879,LC -3495866880,3495867391,VC +3495866368,3495866623,LC +3495866624,3495867050,VC +3495867051,3495867051,LC +3495867052,3495867391,VC 3495867392,3495867647,LC 3495867648,3495868415,VC 3495868416,3495871487,US @@ -87046,8 +94263,10 @@ 3496189952,3496190519,US 3496190520,3496190527,CA 3496190528,3496190719,US -3496190720,3496190975,CA -3496190976,3496296447,US +3496190720,3496190735,CA +3496190736,3496190751,US +3496190752,3496190767,CA +3496190768,3496296447,US 3496296448,3496312831,CA 3496312832,3496468479,US 3496468480,3496476671,CA @@ -87294,7 +94513,9 @@ 3507038208,3507040255,TW 3507040256,3507290111,US 3507290112,3507355647,AR -3507355648,3507470335,US +3507355648,3507427583,US +3507427584,3507427839,CA +3507427840,3507470335,US 3507470336,3507486719,CA 3507486720,3507585023,US 3507585024,3507598911,CA @@ -87498,15 +94719,11 @@ 3509522176,3509522431,CA 3509522432,3509522687,KW 3509522688,3509522943,CA -3509522944,3509523679,US -3509523680,3509523695,CA -3509523696,3509524223,US -3509524224,3509524735,CA +3509522944,3509524479,US +3509524480,3509524735,CA 3509524736,3509524991,US 3509524992,3509525759,CA -3509525760,3509526015,US -3509526016,3509526271,CA -3509526272,3509526527,US +3509525760,3509526527,US 3509526528,3509526783,CA 3509526784,3509527807,US 3509527808,3509528063,CA @@ -87517,7 +94734,9 @@ 3509532672,3509532927,US 3509532928,3509533439,CA 3509533440,3509534719,US -3509534720,3509535999,CA +3509534720,3509535487,CA +3509535488,3509535743,US +3509535744,3509535999,CA 3509536000,3509536255,US 3509536256,3509536767,CA 3509536768,3509537279,US @@ -87526,9 +94745,11 @@ 3509538560,3509538815,CA 3509538816,3509539071,US 3509539072,3509539327,CA -3509539328,3509539583,US -3509539584,3509540095,CA -3509540096,3509540607,US +3509539328,3509539631,US +3509539632,3509539647,CA +3509539648,3509539967,US +3509539968,3509540031,CA +3509540032,3509540607,US 3509540608,3509541503,CA 3509541504,3509541631,US 3509541632,3509541887,CA @@ -87544,14 +94765,16 @@ 3509546096,3509546111,CA 3509546112,3509546495,US 3509546496,3509547007,CA -3509547008,3509551359,US -3509551360,3509551871,CA +3509547008,3509551615,US +3509551616,3509551871,CA 3509551872,3509552127,US 3509552128,3509552639,CA 3509552640,3509553919,US 3509553920,3509554959,CA 3509554960,3509555199,US -3509555200,3509556735,CA +3509555200,3509555455,CA +3509555456,3509555711,US +3509555712,3509556735,CA 3509556736,3509557759,US 3509557760,3509558015,CA 3509558016,3509559039,US @@ -87573,11 +94796,9 @@ 3509567232,3509569023,CA 3509569024,3509569535,US 3509569536,3509569791,CA -3509569792,3509570815,US -3509570816,3509571583,CA -3509571584,3509571839,US -3509571840,3509572095,CA -3509572096,3509572351,US +3509569792,3509571071,US +3509571072,3509571327,CA +3509571328,3509572351,US 3509572352,3509573375,CA 3509573376,3509573439,US 3509573440,3509573455,CA @@ -87927,7 +95148,9 @@ 3515301888,3515318271,CA 3515318272,3515358975,US 3515358976,3515359231,MX -3515359232,3515596799,US +3515359232,3515450623,US +3515450624,3515450879,CA +3515450880,3515596799,US 3515596800,3515613183,CA 3515613184,3515711487,US 3515711488,3515731967,CA @@ -87958,7 +95181,9 @@ 3516530688,3516643083,US 3516643084,3516643087,PR 3516643088,3516899839,US -3516899840,3516900095,NG +3516899840,3516900031,NG +3516900032,3516900063,US +3516900064,3516900095,NG 3516900096,3516900351,US 3516900352,3516900607,NG 3516900608,3516900863,US @@ -87983,13 +95208,17 @@ 3517120512,3517173759,US 3517173760,3517174783,IN 3517174784,3517233151,US -3517233152,3517235199,GU +3517233152,3517234687,GU +3517234688,3517234943,US +3517234944,3517235199,GU 3517235200,3517382655,US 3517382656,3517383167,CA 3517383168,3517383423,US 3517383424,3517384703,CA -3517384704,3517385215,US -3517385216,3517385727,CA +3517384704,3517385407,US +3517385408,3517385439,CA +3517385440,3517385471,US +3517385472,3517385727,CA 3517385728,3517385983,US 3517385984,3517387263,CA 3517387264,3517387519,US @@ -88027,14 +95256,14 @@ 3517399040,3517399807,US 3517399808,3517399871,CA 3517399872,3517400063,US -3517400064,3517400575,CA -3517400576,3517401855,US +3517400064,3517400319,CA +3517400320,3517401855,US 3517401856,3517402367,CA 3517402368,3517402623,US 3517402624,3517402879,CA 3517402880,3517403647,US -3517403648,3517404159,CA -3517404160,3517404415,US +3517403648,3517403903,CA +3517403904,3517404415,US 3517404416,3517404927,CA 3517404928,3517405183,US 3517405184,3517405439,CA @@ -88058,10 +95287,10 @@ 3517413120,3517414399,CA 3517414400,3517414911,US 3517414912,3517415423,CA -3517415424,3517416191,US -3517416192,3517416447,CA -3517416448,3517416703,US -3517416704,3517417471,CA +3517415424,3517416919,US +3517416920,3517416927,CA +3517416928,3517416959,US +3517416960,3517417471,CA 3517417472,3517418495,US 3517418496,3517419007,CA 3517419008,3517419519,US @@ -88111,7 +95340,9 @@ 3517438464,3517438943,US 3517438944,3517439231,CA 3517439232,3517439743,US -3517439744,3517442047,CA +3517439744,3517441279,CA +3517441280,3517441535,US +3517441536,3517442047,CA 3517442048,3517442175,US 3517442176,3517442207,CA 3517442208,3517442559,US @@ -88168,7 +95399,9 @@ 3517608192,3517608447,US 3517608448,3517608703,GB 3517608704,3517609727,US -3517609728,3517610495,SE +3517609728,3517609743,SE +3517609744,3517609751,US +3517609752,3517610495,SE 3517610496,3517611263,IE 3517611264,3517612031,SE 3517612032,3517644799,US @@ -88246,7 +95479,9 @@ 3519877888,3519878143,CA 3519878144,3519878271,US 3519878272,3519878303,CA -3519878304,3519879727,US +3519878304,3519878911,US +3519878912,3519879167,CA +3519879168,3519879727,US 3519879728,3519879735,CA 3519879736,3519879935,US 3519879936,3519880447,CA @@ -88255,7 +95490,9 @@ 3519882496,3519882751,US 3519882752,3519884031,CA 3519884032,3519884287,US -3519884288,3519901695,CA +3519884288,3519898367,CA +3519898368,3519898623,US +3519898624,3519901695,CA 3519901696,3519930367,US 3519934464,3519938559,CA 3519938560,3520020479,US @@ -88318,8 +95555,8 @@ 3521965056,3521966079,DE 3521966080,3522101247,US 3522101248,3522109439,CA -3522109440,3522118399,US -3522118400,3522118655,GB +3522109440,3522118143,US +3522118144,3522118655,GB 3522118656,3522118911,US 3522118912,3522119679,GB 3522119680,3522119935,US @@ -88389,12 +95626,25 @@ 3523557376,3523559423,CN 3523559424,3523575807,PH 3523575808,3523583999,CN -3523584000,3523601663,HK +3523584000,3523596359,HK +3523596360,3523596375,PK +3523596376,3523596783,HK +3523596784,3523596791,PK +3523596792,3523596927,HK +3523596928,3523597055,PK +3523597056,3523597063,HK +3523597064,3523597103,PK +3523597104,3523597119,HK +3523597120,3523597127,PK +3523597128,3523597567,HK +3523597568,3523597823,PK +3523597824,3523601663,HK 3523601664,3523601919,SA 3523601920,3523674111,HK 3523674112,3523682303,FJ 3523682304,3523686399,NZ -3523686400,3523690495,AU +3523686400,3523688447,AU +3523688704,3523690495,AU 3523690496,3523698687,IN 3523698688,3523700735,JP 3523700736,3523701759,HK @@ -88426,7 +95676,9 @@ 3524722688,3524730879,SG 3524730880,3524739071,CN 3524739072,3524743167,ID -3524743168,3524745727,MP +3524743168,3524745215,MP +3524745216,3524745471,GU +3524745472,3524745727,MP 3524745728,3524745983,GU 3524745984,3524747263,MP 3524747264,3524755455,PH @@ -88448,8 +95700,8 @@ 3526651136,3526651391,KP 3526651392,3526754303,CN 3526754304,3526845183,NZ -3526845184,3526845439,AU -3526845440,3526885375,NZ +3526845184,3526845311,AU +3526845312,3526885375,NZ 3526885376,3526893567,PK 3526893568,3526897663,NZ 3526897664,3526901759,HK @@ -88499,9 +95751,7 @@ 3529089024,3529097215,KR 3529097216,3529113599,JP 3529113600,3531603967,KR -3531603968,3533765631,JP -3533765632,3533765887,CN -3533765888,3534749695,JP +3531603968,3534749695,JP 3534749696,3534757887,HK 3534757888,3534758143,AU 3534758144,3534758147,JP @@ -88532,7 +95782,11 @@ 3535831040,3535863807,TW 3535863808,3535880191,SG 3535880192,3535896575,JP -3535896576,3535929343,AU +3535896576,3535905791,AU +3535905792,3535906047,US +3535906048,3535909887,AU +3535909888,3535910143,US +3535910144,3535929343,AU 3535929344,3535994879,JP 3535994880,3536060415,MY 3536060416,3536322559,JP @@ -88623,9 +95877,7 @@ 3557072896,3557081087,DE 3557081088,3557089279,NL 3557089280,3557105663,DE -3557105664,3557111807,BG -3557111808,3557112831,GB -3557112832,3557113855,BG +3557105664,3557113855,BG 3557113856,3557130239,RU 3557130240,3557138431,BG 3557138432,3557146623,RU @@ -88730,8 +95982,12 @@ 3557916672,3557920055,NO 3557920056,3557920056,DK 3557920057,3557924863,NO -3557924864,3557925887,AX -3557925888,3557929983,FI +3557924864,3557926143,AX +3557926144,3557926399,FI +3557926400,3557926655,AX +3557926656,3557929471,FI +3557929472,3557929727,AX +3557929728,3557929983,FI 3557929984,3557933055,AX 3557933056,3557941247,IT 3557941248,3557957631,DE @@ -88759,9 +96015,7 @@ 3558146048,3558154239,RU 3558154240,3558157391,GB 3558157392,3558157407,AF -3558157408,3558161663,GB -3558161664,3558161919,TD -3558161920,3558162431,GB +3558157408,3558162431,GB 3558162432,3558170623,DE 3558170624,3558178815,GB 3558178816,3558187007,BG @@ -88803,9 +96057,7 @@ 3558293504,3558301695,RU 3558301696,3558318079,DE 3558318080,3558334463,FR -3558334464,3558339959,CH -3558339960,3558339967,DE -3558339968,3558342655,CH +3558334464,3558342655,CH 3558342656,3558350847,IT 3558350848,3558359039,RU 3558359040,3558367231,GB @@ -88850,11 +96102,9 @@ 3558719488,3558735871,IL 3558735872,3558741503,GB 3558741504,3558742015,GG -3558742016,3558742527,GB -3558742528,3558742783,GG -3558742784,3558743039,GB -3558743040,3558743295,GG -3558743296,3558743551,GB +3558742016,3558742271,GB +3558742272,3558742527,GG +3558742528,3558743551,GB 3558743552,3558743807,GG 3558743808,3558744063,GB 3558744064,3558752255,LB @@ -88906,7 +96156,7 @@ 3559093760,3559095455,GB 3559095456,3559095456,BE 3559095457,3559096063,GB -3559096064,3559096319,BE +3559096064,3559096319,NL 3559096320,3559104511,RO 3559104512,3559112703,RU 3559112704,3559120895,IT @@ -88930,9 +96180,9 @@ 3559276544,3559284735,GB 3559284736,3559292927,RU 3559292928,3559301119,JO -3559301120,3559305215,GB -3559305216,3559305471,US -3559305472,3559309311,GB +3559301120,3559306576,GB +3559306577,3559306577,AT +3559306578,3559309311,GB 3559309312,3559317503,PL 3559317504,3559325695,FI 3559325696,3559333887,IT @@ -89004,9 +96254,11 @@ 3559890944,3559899135,CH 3559899136,3559899647,UA 3559899648,3559899967,EE -3559899968,3559900223,UA -3559900224,3559900287,EE -3559900288,3559902719,UA +3559899968,3559900031,UA +3559900032,3559900095,EE +3559900096,3559900223,UA +3559900224,3559900351,EE +3559900352,3559902719,UA 3559902720,3559902975,EE 3559902976,3559903231,UA 3559903232,3559907327,EE @@ -89022,9 +96274,11 @@ 3559989248,3559997439,PL 3559997440,3560005631,KE 3560005632,3560013823,RU -3560013824,3560022527,GB -3560022528,3560022783,ES -3560022784,3560023631,GB +3560013824,3560015871,GB +3560015872,3560016127,ES +3560016128,3560022751,GB +3560022752,3560022767,ES +3560022768,3560023631,GB 3560023632,3560023639,ES 3560023640,3560023791,GB 3560023792,3560023799,ES @@ -89063,9 +96317,9 @@ 3560316928,3560325119,NL 3560325120,3560333311,DK 3560333312,3560341503,RO -3560341504,3560346623,GB -3560346624,3560347647,US -3560347648,3560357887,GB +3560341504,3560345855,GB +3560345856,3560348159,US +3560348160,3560357887,GB 3560357888,3560366079,GR 3560366080,3560374271,CH 3560374272,3560382463,ES @@ -89108,9 +96362,7 @@ 3560669184,3560685567,CH 3560685568,3560693759,ES 3560693760,3560701951,PL -3560705536,3560705791,DE 3560707584,3560707839,DE -3560708096,3560708351,DE 3560709632,3560709887,DE 3560710144,3560718335,CH 3560718336,3560726527,GM @@ -89251,9 +96503,7 @@ 3561242624,3561259007,DE 3561259008,3561267199,IL 3561267200,3561275391,UA -3561275392,3561288831,BE -3561288832,3561288959,FR -3561288960,3561291775,BE +3561275392,3561291775,BE 3561291776,3561299967,RS 3561299968,3561308159,GB 3561308160,3561316351,PL @@ -89277,7 +96527,9 @@ 3561472000,3561480191,DE 3561480192,3561488383,GB 3561488384,3561496575,OM -3561496576,3561502719,GB +3561496576,3561496831,GB +3561496832,3561497087,NL +3561497088,3561502719,GB 3561502720,3561503743,NL 3561503744,3561504767,GB 3561504768,3561512959,DE @@ -89296,10 +96548,12 @@ 3561604352,3561604607,FR 3561604608,3561607391,GB 3561607392,3561607423,FR -3561607424,3561609215,GB -3561609216,3561609471,FR -3561609472,3561616639,GB -3561616640,3561616895,FR +3561607424,3561607935,GB +3561607936,3561608191,FR +3561608192,3561609215,GB +3561609216,3561609727,FR +3561609728,3561616383,GB +3561616384,3561616895,FR 3561616896,3561618943,GB 3561618944,3561619455,ES 3561619456,3561641450,GB @@ -89320,11 +96574,7 @@ 3561775104,3561783295,IL 3561783296,3561799679,RU 3561799680,3561807871,DE -3561807872,3561808895,BE -3561808896,3561809151,LU -3561809152,3561814271,BE -3561814272,3561814527,LU -3561814528,3561815039,BE +3561807872,3561815039,BE 3561815040,3561815295,LU 3561815296,3561816063,BE 3561816064,3561824255,VA @@ -89524,9 +96774,7 @@ 3563225088,3563233279,LB 3563233280,3563241471,BY 3563241472,3563257855,TR -3563257856,3563268351,FR -3563268352,3563268607,BE -3563268608,3563290623,FR +3563257856,3563290623,FR 3563290624,3563315199,DE 3563315200,3563323391,DK 3563323648,3563329791,GB @@ -89745,9 +96993,7 @@ 3564895744,3564896255,GB 3564896256,3564904447,RU 3564904448,3564912639,DE -3564912640,3564915711,NL -3564915712,3564915967,BG -3564915968,3564920831,NL +3564912640,3564920831,NL 3564920832,3564922111,DE 3564922112,3564929023,US 3564929024,3564937215,AT @@ -89768,15 +97014,9 @@ 3565002752,3565027327,NO 3565027328,3565035519,PL 3565035520,3565036287,IE -3565036288,3565037055,GB -3565037056,3565037311,IE -3565037312,3565038079,GB -3565038080,3565038335,IE -3565038336,3565038879,GB +3565036288,3565038879,GB 3565038880,3565038895,IE -3565038896,3565039103,GB -3565039104,3565039359,IE -3565039360,3565039615,GB +3565038896,3565039615,GB 3565039616,3565041663,IE 3565041664,3565043711,GB 3565043712,3565051903,AT @@ -89874,11 +97114,7 @@ 3565767272,3565767287,GB 3565767296,3565767351,GB 3565767360,3565767399,GB -3565767408,3565767439,GB -3565767456,3565767487,GB -3565767504,3565767599,GB -3565767616,3565767631,GB -3565767680,3565767999,GB +3565767408,3565767999,GB 3565768208,3565768223,GB 3565768240,3565768247,GB 3565768448,3565768575,GB @@ -89963,7 +97199,6 @@ 3567152256,3567152383,GB 3567152400,3567152407,GB 3567152640,3567152647,GB -3567152664,3567152671,GB 3567152744,3567152751,GB 3567152832,3567152863,GB 3567152960,3567152991,GB @@ -89994,9 +97229,7 @@ 3567389696,3567390975,DE 3567390976,3567391231,GB 3567391232,3567391487,DE -3567391488,3567394815,GB -3567394816,3567395071,FR -3567395072,3567399167,GB +3567391488,3567399167,GB 3567399168,3567399423,DE 3567399424,3567399935,GB 3567399936,3567401471,DE @@ -90008,13 +97241,17 @@ 3567453696,3567453951,ES 3567453952,3567456407,GB 3567456408,3567456415,ES -3567456416,3567458305,GB +3567456416,3567456511,GB +3567456512,3567456767,ES +3567456768,3567458305,GB 3567458306,3567458306,ES 3567458307,3567459935,GB 3567459936,3567459943,ES 3567459944,3567465983,GB 3567465984,3567466239,ES -3567466240,3567495679,GB +3567466240,3567490559,GB +3567490560,3567490815,ES +3567490816,3567495679,GB 3567495680,3567495935,ES 3567495936,3567499007,GB 3567499008,3567499135,ES @@ -90084,9 +97321,7 @@ 3568476160,3568484351,DK 3568484352,3568492543,NL 3568492544,3568500735,RS -3568500736,3568520137,IL -3568520138,3568520138,SY -3568520139,3568566271,IL +3568500736,3568566271,IL 3568566272,3568599039,FR 3568599040,3568631807,PL 3568631808,3568697343,SE @@ -90144,8 +97379,8 @@ 3570663424,3570728959,GB 3570728960,3570729983,FI 3570729984,3570731007,SE -3570731008,3570794495,FI -3570794496,3570860031,SE +3570731008,3570794751,FI +3570794752,3570860031,SE 3570860032,3570892799,CH 3570892800,3570925567,SA 3570925568,3570991103,IT @@ -90170,7 +97405,9 @@ 3571580928,3571646463,FI 3571646464,3571655560,DE 3571655561,3571655561,RO -3571655562,3571711999,DE +3571655562,3571688383,DE +3571688384,3571689215,ES +3571689216,3571711999,DE 3571712000,3571843071,GB 3571843072,3571974143,ES 3571974144,3571978239,RU @@ -90245,7 +97482,11 @@ 3574136832,3574169599,DE 3574169600,3574174839,GB 3574174840,3574174847,ES -3574174848,3574187007,GB +3574174848,3574186801,GB +3574186802,3574186802,ES +3574186803,3574186803,GB +3574186804,3574186804,ES +3574186805,3574187007,GB 3574187008,3574188031,ES 3574188032,3574190591,GB 3574190592,3574190847,ES @@ -90265,22 +97506,19 @@ 3574464512,3574530047,TR 3574530048,3574594559,SE 3574594560,3574595583,GB -3574595584,3574595839,GF -3574595840,3574597887,FR -3574597888,3574598143,GP -3574598144,3574598399,MQ -3574598400,3574599423,FR +3574595584,3574596607,FR +3574596608,3574596863,MF +3574596864,3574597119,MQ +3574597120,3574597631,FR +3574597632,3574597887,GP +3574597888,3574598911,FR +3574598912,3574599167,MQ +3574599168,3574599423,FR 3574599424,3574599679,MQ 3574599680,3574599935,GP -3574599936,3574600191,FR -3574600192,3574600447,MQ -3574600448,3574601215,FR +3574599936,3574601215,FR 3574601216,3574601471,GP -3574601472,3574602239,FR -3574602240,3574602495,GF -3574602496,3574602751,FR -3574602752,3574603007,RE -3574603008,3574603775,FR +3574601472,3574603775,FR 3574603776,3574611967,BG 3574611968,3574628351,HU 3574628352,3574661119,GR @@ -90290,7 +97528,9 @@ 3574792192,3574824959,CZ 3574824960,3574830079,GB 3574830080,3574831103,NL -3574831104,3574857727,GB +3574831104,3574842367,GB +3574842368,3574842623,NL +3574842624,3574857727,GB 3574857728,3574923263,DE 3574923264,3574939647,RU 3574939648,3574941375,SE @@ -90319,11 +97559,7 @@ 3575590912,3575640063,BE 3575640064,3575644159,TR 3575644160,3575709695,DK -3575709696,3575715839,AT -3575715840,3575716351,SK -3575716352,3575739391,AT -3575739392,3575739647,FR -3575739648,3575742463,AT +3575709696,3575742463,AT 3575742464,3575775231,RU 3575775232,3575824383,NL 3575824384,3575832575,KW @@ -90451,7 +97687,7 @@ 3576084704,3576084735,GB 3576084864,3576084927,GB 3576085184,3576085215,GB -3576085696,3576085711,GB +3576085504,3576085759,GB 3576086016,3576086143,GB 3576086368,3576086399,GB 3576086496,3576086527,GB @@ -90478,9 +97714,9 @@ 3576093184,3576093247,GB 3576095232,3576096767,GB 3576099072,3576100863,GB -3576101376,3576111359,GB -3576111360,3576111615,FR -3576111616,3576135679,GB +3576101376,3576134653,GB +3576134654,3576134654,CH +3576134655,3576135679,GB 3576135680,3576168447,DE 3576168448,3576233983,GB 3576233984,3576236543,FR @@ -90488,11 +97724,7 @@ 3576241992,3576241999,FR 3576242000,3576242383,GB 3576242384,3576242391,FR -3576242392,3576245247,GB -3576245248,3576245503,FR -3576245504,3576251135,GB -3576251136,3576251391,FR -3576251392,3576251711,GB +3576242392,3576251711,GB 3576251712,3576251775,FR 3576251776,3576252415,GB 3576252416,3576252671,FR @@ -90504,14 +97736,14 @@ 3576254696,3576254703,FR 3576254704,3576254775,GB 3576254776,3576254783,FR -3576254784,3576260607,GB +3576254784,3576258047,GB +3576258048,3576258303,FR +3576258304,3576260607,GB 3576260608,3576260623,FR 3576260624,3576260863,GB -3576260864,3576261119,FR -3576261120,3576263447,GB -3576263448,3576263455,FR -3576263456,3576263679,GB -3576263680,3576263935,FR +3576260864,3576260871,FR +3576260872,3576263919,GB +3576263920,3576263935,FR 3576263936,3576264255,GB 3576264256,3576264263,FR 3576264264,3576264351,GB @@ -90520,15 +97752,15 @@ 3576264376,3576264383,FR 3576264384,3576264679,GB 3576264680,3576264687,FR -3576264688,3576264959,GB -3576264960,3576265215,FR -3576265216,3576266751,GB +3576264688,3576266751,GB 3576266752,3576299519,FR 3576299520,3576365055,AE 3576365056,3576430591,TR 3576430592,3576496127,FR 3576496128,3576561663,IT -3576561664,3576627199,NL +3576561664,3576622100,NL +3576622101,3576622101,GB +3576622102,3576627199,NL 3576627200,3576692735,AT 3576692736,3576758271,GB 3576758272,3576823807,BE @@ -90538,22 +97770,28 @@ 3576987648,3577020415,GB 3577020416,3577085951,NL 3577085952,3577151487,DE -3577151488,3577152767,RE -3577152768,3577154047,FR -3577154048,3577155583,RE -3577155584,3577155839,FR -3577155840,3577156351,RE -3577156352,3577157631,FR -3577157632,3577158399,RE -3577158400,3577158911,FR -3577158912,3577159167,RE -3577159168,3577159679,FR -3577159680,3577159935,RE -3577159936,3577160959,FR -3577160960,3577161023,YT -3577161024,3577161087,FR -3577161088,3577161215,YT -3577161216,3577165567,FR +3577151488,3577151999,RE +3577152000,3577152255,FR +3577152256,3577152511,RE +3577152512,3577153023,FR +3577153024,3577153279,RE +3577153280,3577153791,FR +3577153792,3577154303,RE +3577154304,3577154815,FR +3577154816,3577155327,RE +3577155328,3577155839,FR +3577155840,3577156095,RE +3577156096,3577156607,FR +3577156608,3577156863,RE +3577156864,3577157375,FR +3577157376,3577157887,RE +3577157888,3577158655,FR +3577158656,3577159167,RE +3577159168,3577160959,FR +3577160960,3577161215,YT +3577161216,3577163775,FR +3577163776,3577164031,RE +3577164032,3577165567,FR 3577165568,3577166079,RE 3577166080,3577166591,FR 3577166592,3577167103,RE @@ -90568,12 +97806,12 @@ 3577544704,3577545983,DE 3577545984,3577546111,SE 3577546112,3577610239,DE -3577625600,3577625855,GB -3577626112,3577626367,GB +3577626176,3577626239,GB 3577628672,3577629695,CH 3577635840,3577636863,DE 3577636864,3577637887,GB 3577641200,3577641215,FR +3577641472,3577641983,FR 3577650048,3577650063,NL 3577653248,3577655295,IT 3577663488,3577664511,SE @@ -90706,7 +97944,9 @@ 3580643328,3580645375,UA 3580645376,3580647423,PL 3580647424,3580647935,GB -3580647936,3580649471,DE +3580647936,3580648703,DE +3580648704,3580648959,GB +3580648960,3580649471,DE 3580649472,3580651519,SE 3580651520,3580653567,NL 3580653568,3580655615,PL @@ -90747,21 +97987,7 @@ 3581239296,3581241343,NL 3581242624,3581245439,FR 3581255680,3581258751,FR -3581280256,3581365247,BE -3581365248,3581365503,NL -3581365504,3581365759,BE -3581365760,3581366015,NL -3581366016,3581366783,BE -3581366784,3581367039,NL -3581367040,3581367295,BE -3581367296,3581367807,NL -3581367808,3581368063,BE -3581368064,3581368319,NL -3581368320,3581371391,BE -3581371392,3581371647,NL -3581371648,3581371903,BE -3581371904,3581372159,NL -3581372160,3581411327,BE +3581280256,3581411327,BE 3581411328,3581673471,GB 3581673472,3581935615,NL 3581935616,3581943807,RU @@ -90856,7 +98082,7 @@ 3582509056,3582517247,SA 3582517248,3582525439,PL 3582525440,3582533631,IM -3582533632,3582541823,BG +3582533632,3582541823,IT 3582541824,3582550015,US 3582550016,3582558207,RS 3582558208,3582570911,MC @@ -90903,7 +98129,8 @@ 3582885888,3582894079,TR 3582894080,3582902271,CH 3582902272,3582910463,RU -3582910464,3582917631,SI +3582910464,3582916607,SI +3582916608,3582917631,ZA 3582917632,3582918655,LU 3582918656,3582926847,GB 3582926848,3582935039,ES @@ -90939,7 +98166,9 @@ 3583157760,3583160319,GB 3583160320,3583161343,DE 3583161344,3583162623,GB -3583162624,3583162879,ZA +3583162624,3583162751,ZA +3583162752,3583162815,GB +3583162816,3583162879,ZA 3583162880,3583164415,GB 3583164416,3583172607,PT 3583172608,3583188991,DE @@ -90975,7 +98204,11 @@ 3583418368,3583426559,TN 3583426560,3583434751,CI 3583434752,3583442943,AT -3583442944,3583451135,UA +3583442944,3583445247,RU +3583445248,3583445503,UA +3583445504,3583446783,RU +3583446784,3583447039,UA +3583447040,3583451135,RU 3583451136,3583459327,IL 3583459328,3583467111,CZ 3583467112,3583467119,PL @@ -91006,7 +98239,9 @@ 3583696896,3583705087,NL 3583705088,3583713279,UA 3583713280,3583721471,CZ -3583721472,3583729663,DE +3583721472,3583727871,DE +3583727872,3583728127,GB +3583728128,3583729663,DE 3583729664,3583737855,TR 3583742976,3583743487,PL 3583743488,3583743743,GB @@ -91115,12 +98350,17 @@ 3584509232,3584509239,AW 3584509240,3584509695,GB 3584509696,3584509951,JE -3584509952,3584516095,GB +3584509952,3584513535,GB +3584513536,3584513791,JE +3584513792,3584516095,GB 3584516096,3584524287,NO 3584524288,3584532479,IS 3584532480,3584540671,DE 3584540672,3584548863,RU -3584548864,3584557055,ES +3584548864,3584549887,ES +3584549888,3584550911,FR +3584550912,3584552959,IT +3584552960,3584557055,FR 3584557056,3584565247,EE 3584565248,3584573439,RU 3584573440,3584589823,DE @@ -91259,7 +98499,9 @@ 3585646592,3585654783,SA 3585654784,3585662975,NO 3585662976,3585671167,BY -3585671168,3585679359,SE +3585671168,3585672191,SE +3585672192,3585672447,DK +3585672448,3585679359,SE 3585679360,3585687551,FI 3585687552,3585695743,DE 3585695744,3585702527,GB @@ -91289,9 +98531,8 @@ 3585861632,3585863679,EE 3585863680,3585865471,NL 3585865472,3585865727,LB -3585865728,3585866495,EE -3585866496,3585866751,RU -3585866752,3585867775,EE +3585865728,3585865983,UA +3585865984,3585867775,EE 3585867776,3585875967,NO 3585875968,3585884159,CH 3585884160,3585892351,IQ @@ -91299,22 +98540,9 @@ 3585900544,3585906687,NO 3585906688,3585907711,CZ 3585907712,3585908735,NO -3585908736,3585908991,FR -3585908992,3585909247,GF -3585909248,3585909503,FR -3585909504,3585909759,GF -3585909760,3585910271,FR -3585910272,3585910527,GP -3585910528,3585912831,FR -3585912832,3585913087,GP -3585913088,3585913855,FR -3585913856,3585914623,GP -3585914624,3585914879,GF -3585914880,3585915391,FR -3585915392,3585915647,GP -3585915648,3585915903,FR -3585915904,3585916159,GP -3585916160,3585916671,FR +3585908736,3585913855,FR +3585913856,3585914367,GP +3585914368,3585916671,FR 3585916672,3585916927,MQ 3585916928,3585925119,IT 3585925120,3585933311,CH @@ -91323,7 +98551,9 @@ 3585949696,3585957887,KW 3585957888,3585966079,SE 3585966080,3585974271,CH -3585974272,3585982463,BE +3585974272,3585976831,BE +3585976832,3585977087,GB +3585977088,3585982463,BE 3585982464,3585998847,RU 3585998848,3586007039,ES 3586007040,3586015231,LT @@ -91343,7 +98573,9 @@ 3586162688,3586179071,FI 3586179072,3586195455,ES 3586195456,3586203647,RU -3586203648,3586205695,KE +3586203648,3586204415,KE +3586204416,3586204671,ZM +3586204672,3586205695,KE 3586205696,3586207743,BW 3586207744,3586208767,ZA 3586208768,3586211071,KE @@ -91450,9 +98682,7 @@ 3587129344,3587145727,NL 3587145728,3587162111,CY 3587162112,3587178495,IR -3587178496,3587182591,AT -3587182592,3587182847,HU -3587182848,3587186687,AT +3587178496,3587186687,AT 3587186688,3587186943,DE 3587186944,3587187199,GB 3587187200,3587187455,DE @@ -91469,9 +98699,7 @@ 3587231232,3587231263,NL 3587231264,3587233087,GB 3587233088,3587233095,NL -3587233096,3587233279,GB -3587233280,3587233535,NL -3587233536,3587234191,GB +3587233096,3587234191,GB 3587234192,3587234207,NL 3587234208,3587237631,GB 3587237632,3587237887,NL @@ -91489,7 +98717,8 @@ 3587242672,3587242679,DE 3587242680,3587244031,GB 3587244032,3587260415,IT -3587260416,3587284991,DE +3587260416,3587282943,DE +3587282944,3587284991,PT 3587284992,3587291135,IT 3587291136,3587292159,FR 3587292160,3587309567,IT @@ -91532,9 +98761,7 @@ 3587620864,3587637247,SE 3587637248,3587646975,FR 3587646976,3587647231,MC -3587647232,3587647743,FR -3587647744,3587647999,GB -3587648000,3587653631,FR +3587647232,3587653631,FR 3587653632,3587670015,SK 3587670016,3587702783,IT 3587702784,3587710975,DE @@ -91573,8 +98800,7 @@ 3588153344,3588161535,RU 3588161536,3588173311,FR 3588173312,3588173567,RE -3588173568,3588173823,YT -3588173824,3588227071,FR +3588173568,3588227071,FR 3588227072,3588292607,BE 3588292608,3588308991,AT 3588308992,3588325375,NO @@ -91656,9 +98882,7 @@ 3589242880,3589259263,NL 3589259264,3589275647,DE 3589275648,3589292031,RS -3589292032,3589305343,AT -3589305344,3589305599,DE -3589305600,3589308415,AT +3589292032,3589308415,AT 3589308416,3589324799,DE 3589324800,3589341183,BG 3589341184,3589373951,PL @@ -91670,9 +98894,7 @@ 3589431040,3589431295,ES 3589431296,3589432831,GB 3589432832,3589433087,CH -3589433088,3589433855,GB -3589433856,3589434111,IE -3589434112,3589435759,GB +3589433088,3589435759,GB 3589435760,3589435763,ES 3589435764,3589439487,GB 3589439488,3589455871,SE @@ -91685,10 +98907,10 @@ 3589545984,3589554175,DE 3589554176,3589570559,PS 3589570560,3589578751,GB -3589578752,3589579007,IN +3589578752,3589579007,NL 3589579008,3589580543,GB -3589580544,3589580799,NL -3589580800,3589582975,GB +3589580544,3589581055,NL +3589581056,3589582975,GB 3589582976,3589583103,NL 3589583104,3589583871,GB 3589583872,3589584127,NL @@ -91705,13 +98927,13 @@ 3589742592,3589746175,NL 3589746176,3589746687,US 3589746688,3589767167,NL -3589767168,3589816319,RU +3589767168,3589810431,RU +3589810432,3589810687,PL +3589810688,3589816319,RU 3589825792,3589826047,DE 3589827712,3589827839,DE -3589828352,3589828607,FR 3589828736,3589828863,NL 3589829632,3589830143,GB -3589831680,3589831935,FR 3589832704,3589849087,TR 3589849088,3589865471,GB 3589865472,3589881855,GR @@ -91759,9 +98981,7 @@ 3590251648,3590251775,NL 3590251776,3590252543,FR 3590252544,3590253055,LB -3590253056,3590253311,FR -3590253312,3590253567,GB -3590253568,3590254847,FR +3590253056,3590254847,FR 3590254848,3590255103,GB 3590255104,3590255871,FR 3590255872,3590255935,US @@ -91775,7 +98995,9 @@ 3590258688,3590291455,IT 3590291456,3590299647,EG 3590299648,3590307839,FI -3590307840,3590312935,GB +3590307840,3590308951,GB +3590308952,3590308959,GH +3590308960,3590312935,GB 3590312936,3590312943,UG 3590312944,3590317951,GB 3590317952,3590318015,UA @@ -91843,7 +99065,9 @@ 3624376336,3624376343,AU 3624376344,3624376351,US 3624376352,3624376359,PT -3624376360,3624377863,US +3624376360,3624376655,US +3624376656,3624376679,GB +3624376680,3624377863,US 3624377864,3624377871,GB 3624377872,3624377879,US 3624377880,3624377887,GB @@ -91852,11 +99076,9 @@ 3624377912,3624386559,US 3624386560,3624394751,CA 3624394752,3624402943,US -3624402944,3624407039,JP -3624407040,3624435711,US -3624435712,3624443391,CA -3624443392,3624443903,US -3624443904,3624452095,CA +3624402944,3624411135,JP +3624411136,3624435711,US +3624435712,3624452095,CA 3624452096,3624480767,US 3624480768,3624484863,CA 3624484864,3624534015,US @@ -91875,9 +99097,10 @@ 3624721920,3624730623,US 3624730624,3624796159,CA 3624796160,3624812543,US -3624813056,3624814079,US +3624813056,3624813823,US 3624814336,3624815103,US -3624815616,3624828927,US +3624815616,3624816383,US +3624816640,3624828927,US 3624828928,3624833023,CA 3624833024,3624845311,US 3624845312,3624849407,AU @@ -91964,7 +99187,9 @@ 3628161024,3628161279,CA 3628161280,3628179455,US 3628179456,3628187647,CA -3628187648,3628225779,US +3628187648,3628225387,US +3628225388,3628225395,GB +3628225396,3628225779,US 3628225780,3628225783,GB 3628225784,3628236799,US 3628236800,3628257279,CA @@ -92055,17 +99280,7 @@ 3629789952,3629790207,CA 3629790208,3629839103,US 3629839104,3629839359,CA -3629839360,3630039047,US -3630039048,3630039055,CA -3630039056,3630039079,US -3630039080,3630039087,CA -3630039088,3630039119,US -3630039120,3630039135,CA -3630039136,3630039159,US -3630039160,3630039167,CA -3630039168,3630039183,US -3630039184,3630039199,CA -3630039200,3630039295,US +3629839360,3630039295,US 3630039296,3630039551,CA 3630039552,3630040063,US 3630040064,3630040319,CA @@ -92105,9 +99320,7 @@ 3630058752,3630059007,CA 3630059008,3630059263,US 3630059264,3630059519,CA -3630059520,3630060799,US -3630060800,3630061055,CA -3630061056,3630061567,US +3630059520,3630061567,US 3630061568,3630062079,CA 3630062080,3630062335,US 3630062336,3630062591,CA @@ -92116,15 +99329,17 @@ 3630063872,3630063935,US 3630063936,3630063951,CA 3630063952,3630066431,US -3630066432,3630067967,CA -3630067968,3630068991,US +3630066432,3630067711,CA +3630067712,3630068991,US 3630068992,3630069247,CA 3630069248,3630069503,US 3630069504,3630069759,CA 3630069760,3630071295,US 3630071296,3630071551,CA 3630071552,3630072575,US -3630072576,3630074111,CA +3630072576,3630073599,CA +3630073600,3630073855,US +3630073856,3630074111,CA 3630074112,3630074879,US 3630074880,3630075135,CA 3630075136,3630075311,US @@ -92147,7 +99362,9 @@ 3630082048,3630082559,CA 3630082560,3630082815,US 3630082816,3630083071,CA -3630083072,3630084607,US +3630083072,3630083583,US +3630083584,3630083839,CA +3630083840,3630084607,US 3630084608,3630084863,CA 3630084864,3630085119,US 3630085120,3630085375,CA @@ -92197,10 +99414,8 @@ 3630152192,3630152703,US 3630152704,3630153215,CA 3630153216,3630155775,US -3630155776,3630158079,CA -3630158080,3630158295,US -3630158296,3630158303,CA -3630158304,3630159103,US +3630155776,3630158335,CA +3630158336,3630159103,US 3630159104,3630159359,CA 3630159360,3630159615,US 3630159616,3630159871,CA @@ -92214,8 +99429,8 @@ 3630162432,3630162943,CA 3630162944,3630163199,US 3630163200,3630163455,CA -3630163456,3630163967,US -3630163968,3630164735,CA +3630163456,3630163711,US +3630163712,3630164735,CA 3630164736,3630164991,US 3630164992,3630166527,CA 3630166528,3630167007,US @@ -92274,8 +99489,19 @@ 3631667200,3631667455,US 3631667456,3631668223,CA 3631668224,3631668479,US -3631668480,3631668991,CA -3631668992,3631822815,US +3631668480,3631668735,CA +3631668736,3631669807,US +3631669808,3631669823,EC +3631669824,3631670527,US +3631670528,3631670783,NG +3631670784,3631671039,EC +3631671040,3631671295,US +3631671296,3631671551,JM +3631671552,3631671807,PY +3631671808,3631672063,US +3631672064,3631672575,PY +3631672576,3631672831,NG +3631672832,3631822815,US 3631822816,3631822831,AU 3631822832,3631825647,US 3631825648,3631825663,NZ @@ -92291,7 +99517,9 @@ 3632197632,3632201727,CA 3632201728,3632244223,US 3632244224,3632244479,CA -3632244480,3632332799,US +3632244480,3632279039,US +3632279040,3632279295,SA +3632279296,3632332799,US 3632332800,3632357375,CA 3632357376,3632381951,US 3632381952,3632390143,CA @@ -92329,7 +99557,6 @@ 3633348608,3633405951,US 3633405952,3633410047,CA 3633410048,3633446911,US -3633454080,3633454335,US 3633455104,3633456383,US 3633456384,3633456639,AU 3633456640,3633479679,US @@ -92349,7 +99576,9 @@ 3633550848,3633551359,GA 3633551360,3633757439,US 3633757440,3633757695,IN -3633757696,3633785343,US +3633757696,3633757951,US +3633757952,3633758207,PH +3633758208,3633785343,US 3633785600,3633786367,US 3633786880,3633815807,US 3633815808,3633816063,CA @@ -92587,7 +99816,9 @@ 3636158208,3636158215,CA 3636158216,3636158463,US 3636158464,3636158719,CA -3636158720,3636158975,US +3636158720,3636158871,US +3636158872,3636158879,CA +3636158880,3636158975,US 3636158976,3636159743,CA 3636159744,3636160511,US 3636160512,3636160767,CA @@ -92603,8 +99834,7 @@ 3636166400,3636166655,CA 3636166656,3636206079,US 3636206080,3636206335,AU -3636206336,3636301823,US -3636305920,3636396031,US +3636206336,3636396031,US 3636396032,3636461567,CA 3636461568,3636609023,US 3636609024,3636621311,CA @@ -92615,7 +99845,11 @@ 3636627200,3636627455,BR 3636627456,3636628479,MX 3636628480,3636628991,PE -3636628992,3636822015,US +3636628992,3636740095,US +3636740096,3636740351,CA +3636740352,3636741503,US +3636741504,3636741631,CA +3636741632,3636822015,US 3636822016,3636854783,CA 3636854784,3636887551,US 3636887552,3636895743,CA @@ -92642,7 +99876,9 @@ 3637641216,3637665791,US 3637665792,3637669887,CA 3637669888,3637706751,US -3637706752,3637739519,CA +3637706752,3637726591,CA +3637726592,3637726719,US +3637726720,3637739519,CA 3637739520,3638165503,US 3638165504,3638181887,CA 3638181888,3638214399,US @@ -92655,7 +99891,9 @@ 3638247936,3638248703,GB 3638248704,3638249215,US 3638249216,3638249471,GB -3638249472,3638304767,US +3638249472,3638250559,US +3638250560,3638250623,GB +3638250624,3638304767,US 3638304768,3638312959,CA 3638312960,3638349823,US 3638349824,3638350079,AU @@ -92666,15 +99904,15 @@ 3638400000,3638401087,US 3638401088,3638401119,CA 3638401120,3638509567,US -3638509568,3638534143,CA +3638509568,3638526719,CA +3638526720,3638526975,US +3638526976,3638534143,CA 3638534144,3638697983,US 3638697984,3638706175,CA 3638706176,3638706687,US 3638706688,3638706943,NG 3638706944,3638738943,US -3638740992,3638746111,US -3638746112,3638746367,MX -3638746368,3638874111,US +3638740992,3638874111,US 3638874112,3638878207,CA 3638878208,3638984703,US 3638984704,3638992895,GT @@ -92688,7 +99926,7 @@ 3639148544,3639222271,US 3639222272,3639230463,CA 3639230464,3639247359,US -3639248128,3639249151,US +3639247872,3639249151,US 3639249664,3639255039,US 3639255040,3639263231,CA 3639263232,3639279615,US @@ -92746,9 +99984,9 @@ 3639664640,3639668735,CA 3639668736,3639672831,US 3639672832,3639681023,CL -3639681024,3639684991,US -3639684992,3639685119,SA -3639685120,3639692031,US +3639681024,3639685055,US +3639685056,3639685063,SA +3639685064,3639692031,US 3639692032,3639692287,GB 3639692288,3639704573,US 3639704574,3639704574,GB @@ -92760,7 +99998,9 @@ 3639737375,3639737599,GB 3639737600,3639737629,US 3639737630,3639737630,GB -3639737631,3639902207,US +3639737631,3639868415,US +3639868416,3639868543,MX +3639868544,3639902207,US 3639902208,3639918591,PE 3639918592,3639934975,AR 3639934976,3640057855,US @@ -92842,7 +100082,9 @@ 3641356536,3641356543,CM 3641356544,3641357983,GB 3641357984,3641358015,SL -3641358016,3641360383,GB +3641358016,3641359359,GB +3641359360,3641359615,US +3641359616,3641360383,GB 3641360384,3641368575,RO 3641368576,3641372671,GB 3641372672,3641376767,BG @@ -92915,9 +100157,9 @@ 3641669120,3641670271,ZW 3641670272,3641670911,GB 3641670912,3641671167,LS -3641671168,3641671423,ZW -3641671424,3641671679,GB +3641671168,3641671679,GB 3641671680,3641679871,RU +3641679872,3641680127,DK 3641681152,3641681407,SE 3641681408,3641681663,FR 3641683968,3641688063,KZ @@ -93053,8 +100295,7 @@ 3642253312,3642257407,FI 3642257408,3642261503,RU 3642261504,3642265599,BA -3642265600,3642267647,AE -3642267648,3642269695,IR +3642265600,3642269695,AE 3642269696,3642273791,UA 3642273792,3642277887,RU 3642277888,3642290175,DE @@ -93125,7 +100366,9 @@ 3642554199,3642554199,RU 3642554200,3642554367,UA 3642554368,3642554623,LT -3642554624,3642556415,UA +3642554624,3642554720,UA +3642554721,3642554721,LV +3642554722,3642556415,UA 3642556416,3642560511,CZ 3642560512,3642564607,KG 3642564608,3642568703,DE @@ -93160,7 +100403,9 @@ 3642691584,3642695679,DE 3642695680,3642699775,SK 3642699776,3642703871,CZ -3642703872,3642707967,LU +3642703872,3642705151,LU +3642705152,3642705407,DE +3642705408,3642707967,LU 3642707968,3642712063,DE 3642712064,3642716159,NO 3642716160,3642720255,IT @@ -93202,15 +100447,7 @@ 3644928000,3644932095,GI 3644932096,3644936191,IT 3644936192,3644940287,RU -3644940288,3644942847,HU -3644942848,3644943103,BG -3644943104,3644943359,HU -3644943360,3644943615,BG -3644943616,3644946175,HU -3644946176,3644946687,BG -3644946688,3644946943,HU -3644946944,3644947967,BG -3644947968,3644948479,HU +3644940288,3644948479,HU 3644948480,3644952575,DE 3644952576,3644960767,GB 3644960768,3644964863,TR @@ -93226,9 +100463,7 @@ 3645009920,3645014015,FR 3645014016,3645018111,DE 3645018112,3645022207,RU -3645022208,3645023743,CZ -3645023744,3645023999,SK -3645024000,3645030399,CZ +3645022208,3645030399,CZ 3645030400,3645038591,IR 3645038592,3645046783,PS 3645046784,3645050879,RU @@ -93302,6 +100537,7 @@ 3645325312,3645329407,IT 3645329408,3645333503,CH 3645334272,3645335039,DE +3645335688,3645335691,DE 3645337600,3645341695,FR 3645341696,3645345791,RU 3645345792,3645349887,FI @@ -93491,7 +100727,11 @@ 3647966208,3647967231,GB 3647967232,3647968255,BE 3647968256,3647969279,FR -3647969280,3647971327,DE +3647969280,3647969327,DE +3647969328,3647969335,IT +3647969336,3647970047,DE +3647970048,3647970303,BE +3647970304,3647971327,DE 3647971328,3647972351,GB 3647972352,3647973375,IT 3647973376,3647973399,DE @@ -93514,9 +100754,7 @@ 3647980384,3647980415,FR 3647980416,3647980543,DE 3647980544,3647981567,GB -3647981568,3647981823,BE -3647981824,3647982079,DK -3647982080,3647982591,BE +3647981568,3647982591,BE 3647982592,3647983615,IT 3647983616,3647984031,DE 3647984032,3647984047,NL @@ -93599,7 +100837,9 @@ 3648192512,3648196607,DE 3648196608,3648200703,IT 3648200704,3648208895,SE -3648208896,3648212991,DE +3648208896,3648209166,DE +3648209167,3648209169,GB +3648209170,3648212991,DE 3648212992,3648217087,RU 3648217088,3648221183,UA 3648221184,3648225279,IE @@ -93667,9 +100907,7 @@ 3648512000,3648516095,NL 3648516096,3648519167,RS 3648519168,3648520191,MK -3648520192,3648523775,NL -3648523776,3648524031,DE -3648524032,3648782335,NL +3648520192,3648782335,NL 3648782336,3649044479,ES 3649044480,3649110015,FR 3649110016,3649175551,PT @@ -93763,7 +101001,9 @@ 3650285568,3650289663,UA 3650289664,3650297855,RU 3650297856,3650301951,LT -3650301952,3650310143,DE +3650301952,3650307103,DE +3650307104,3650307134,GB +3650307135,3650310143,DE 3650310144,3650314239,GB 3650314240,3650318335,DE 3650318336,3650322431,GI @@ -93864,16 +101104,17 @@ 3650748416,3650879487,GB 3650879488,3650912255,RO 3650912256,3650915327,GB -3650915328,3650915337,FR -3650915338,3650915338,BE -3650915339,3650915583,FR +3650915328,3650915583,FR 3650915584,3650920447,GB 3650920448,3650920457,FR 3650920458,3650920458,GB 3650920459,3650920703,FR -3650920704,3650926079,GB -3650926080,3650926335,BE -3650926336,3650926591,GB +3650920704,3650920895,LB +3650920896,3650920927,GB +3650920928,3650920959,LB +3650920960,3650922799,GB +3650922800,3650922815,FR +3650922816,3650926591,GB 3650926592,3650929663,ES 3650929664,3650929847,GB 3650929848,3650929855,FR @@ -93885,9 +101126,9 @@ 3650932976,3650939599,GB 3650939600,3650939607,FR 3650939608,3650939615,TR -3650939616,3650944511,GB -3650944512,3650944767,FR -3650944768,3650945023,GB +3650939616,3650940927,GB +3650940928,3650941183,NL +3650941184,3650945023,GB 3650945024,3651010559,DK 3651010560,3651076095,GB 3651076096,3651108863,DE @@ -93896,7 +101137,9 @@ 3651152896,3651153919,GB 3651153920,3651168255,DE 3651168256,3651169023,ES -3651169024,3651207167,DE +3651169024,3651192319,DE +3651192320,3651193343,GB +3651193344,3651207167,DE 3651207168,3651207199,GB 3651207224,3651207295,GB 3651207424,3651207615,GB @@ -94007,7 +101250,9 @@ 3651958784,3651960831,IR 3651960832,3651964927,GB 3651964928,3651969023,SK -3651969024,3651977215,DE +3651969024,3651971613,DE +3651971614,3651971614,TR +3651971615,3651977215,DE 3651977216,3651985407,IT 3651985408,3651997695,PL 3651997696,3652001791,RU @@ -94044,16 +101289,18 @@ 3652149248,3652153343,DE 3652153344,3652157439,SE 3652157440,3652165631,RU -3652165632,3652169471,FR +3652165632,3652165887,GF +3652165888,3652169471,FR 3652169472,3652169727,GF -3652169728,3652170495,MQ -3652170496,3652170751,FR +3652169728,3652170239,MQ +3652170240,3652170751,FR 3652170752,3652171007,MQ -3652171008,3652172031,FR -3652172032,3652172287,RE -3652172288,3652172799,FR -3652172800,3652173055,RE -3652173056,3652173823,FR +3652171008,3652171519,FR +3652171520,3652171775,MQ +3652171776,3652172287,RE +3652172288,3652172543,FR +3652172544,3652172799,RE +3652172800,3652173823,FR 3652173824,3652177919,AT 3652177920,3652182015,CY 3652182016,3652190207,DE @@ -94067,7 +101314,9 @@ 3653386240,3653390335,DE 3653390336,3653394431,FR 3653394432,3653402623,NL -3653402624,3653410060,GB +3653402624,3653407103,GB +3653407104,3653407111,UG +3653407112,3653410060,GB 3653410061,3653410061,YT 3653410062,3653410815,GB 3653410816,3653414911,CZ @@ -94083,9 +101332,7 @@ 3653451776,3653464063,RU 3653464064,3653468159,NL 3653468160,3653472255,GR -3653472256,3653472511,NL -3653472512,3653472767,US -3653472768,3653476351,NL +3653472256,3653476351,NL 3653476352,3653480447,CZ 3653480448,3653484543,DK 3653484544,3653488639,TR @@ -94152,8 +101399,7 @@ 3654025216,3654287359,GB 3654287360,3654608404,SE 3654608405,3654608405,NO -3654608406,3654608639,SE -3654608640,3654608895,RU +3654608406,3654608895,SE 3654608896,3654609919,NO 3654609920,3654614143,SE 3654614144,3654614271,FI @@ -94168,13 +101414,13 @@ 3659628544,3659661311,JP 3659661312,3659792383,TW 3659792384,3660054527,KR -3660054528,3660097535,JP -3660097536,3660097791,US -3660097792,3660099583,JP -3660099584,3660099839,US -3660099840,3660102143,JP -3660102144,3660102399,US -3660102400,3660102655,JP +3660054528,3660097023,JP +3660097024,3660097279,US +3660097280,3660099071,JP +3660099072,3660099583,US +3660099584,3660100095,JP +3660100096,3660100607,US +3660100608,3660102655,JP 3660102656,3660102911,US 3660102912,3660578815,JP 3660578816,3661103103,KR @@ -94250,7 +101496,9 @@ 3669618688,3669620735,CN 3669622784,3669688319,SG 3669688320,3669753855,TW -3669753856,3670015999,HK +3669753856,3669777663,HK +3669777664,3669777919,SG +3669777920,3670015999,HK 3670016000,3671064575,CN 3671064576,3671130111,MY 3671130112,3671195647,KR @@ -94385,7 +101633,9 @@ 3715760128,3715891199,CN 3715891200,3716153343,HK 3716153344,3716169727,SG -3716169728,3716186111,TH +3716169728,3716175615,JP +3716175616,3716184575,TH +3716184576,3716186111,JP 3716186112,3716415487,CN 3716415488,3716431871,VN 3716431872,3716440063,KR @@ -94546,16 +101796,12 @@ 3755988992,3755990015,HK 3755990016,3755991039,SG 3755991040,3755999231,JP -3755999232,3756002815,IN -3756002816,3756003071,LK -3756003072,3757047807,IN +3755999232,3757047807,IN 3757047808,3757834239,CN 3757834240,3757867007,AU 3757867008,3757875519,CN 3757875520,3757875583,HK -3757875584,3757880063,CN -3757880064,3757883391,HK -3757883392,3757899775,CN +3757875584,3757899775,CN 3757899776,3757965311,KR 3757965312,3758063615,CN 3758063616,3758079999,HK From 5441c733e07beafaba61251b0fafed4bd96eaf40 Mon Sep 17 00:00:00 2001 From: Karsten Loesing Date: Mon, 24 Nov 2014 14:23:18 +0100 Subject: [PATCH 163/184] Update geoip6 to the November 15 2014 database. --- changes/geoip6-november2014 | 3 + src/config/geoip6 | 5649 ++++++++++++++++++++++++++++++++++- 2 files changed, 5509 insertions(+), 143 deletions(-) create mode 100644 changes/geoip6-november2014 diff --git a/changes/geoip6-november2014 b/changes/geoip6-november2014 new file mode 100644 index 0000000000..e91fcc0d3b --- /dev/null +++ b/changes/geoip6-november2014 @@ -0,0 +1,3 @@ + o Minor features: + - Update geoip6 to the November 15 2014 Maxmind GeoLite2 Country database. + diff --git a/src/config/geoip6 b/src/config/geoip6 index 06bd578b85..b5f0575cbf 100644 --- a/src/config/geoip6 +++ b/src/config/geoip6 @@ -1,8 +1,16 @@ -# Last updated based on August 7 2014 Maxmind GeoLite2 Country +# Last updated based on November 15 2014 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb -2001:218::,2001:218:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:200::,2001:200::ffff:ffff:ffff:ffff:ffff,JP +2001:200:120::,2001:200:120:ffff:ffff:ffff:ffff:ffff,JP +2001:200:148::,2001:200:148:ffff:ffff:ffff:ffff:ffff,JP +2001:200:167::,2001:200:167:ffff:ffff:ffff:ffff:ffff,JP +2001:208:3::,2001:208:3:ffff:ffff:ffff:ffff:ffff,SG +2001:208:5::,2001:208:5:ffff:ffff:ffff:ffff:ffff,SG +2001:218::,2001:218:e000:ffff:ffff:ffff:ffff:ffff,JP +2001:218:e001::,2001:218:e001:ffff:ffff:ffff:ffff:ffff,US +2001:218:e002::,2001:218:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:220::,2001:220:ffff:ffff:ffff:ffff:ffff:ffff,KR 2001:230::,2001:230:ffff:ffff:ffff:ffff:ffff:ffff,KR 2001:238::,2001:238:ffff:ffff:ffff:ffff:ffff:ffff,TW @@ -46,7 +54,9 @@ 2001:368::,2001:368:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:370::,2001:370:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:378::,2001:378:ffff:ffff:ffff:ffff:ffff:ffff,KR -2001:380::,2001:380:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:380::,2001:380:1fb:ffff:ffff:ffff:ffff:ffff,JP +2001:380:1fc::,2001:380:1fc:ffff:ffff:ffff:ffff:ffff,VN +2001:380:1fd::,2001:380:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:388::,2001:388:ffff:ffff:ffff:ffff:ffff:ffff,AU 2001:390::,2001:390:ffff:ffff:ffff:ffff:ffff:ffff,KR 2001:398::,2001:398:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -60,9 +70,2170 @@ 2001:3d8::,2001:3d8:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:3e0::,2001:3e0:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:3e8::,2001:3e8:ffff:ffff:ffff:ffff:ffff:ffff,JP -2001:400::,2001:4ff:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:500::,2001:5ff:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:600::,2001:7ff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:400::,2001:400:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:408::,2001:408:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:410::,2001:410:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:418::,2001:418:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:420::,2001:420:4049:ffff:ffff:ffff:ffff:ffff,US +2001:420:404a::,2001:420:404a:ffff:ffff:ffff:ffff:ffff,GB +2001:420:404b::,2001:420:5040:ffff:ffff:ffff:ffff:ffff,US +2001:420:5041::,2001:420:5041:ffff:ffff:ffff:ffff:ffff,AU +2001:420:5042::,2001:420:5042:ffff:ffff:ffff:ffff:ffff,US +2001:420:5043::,2001:420:5043:ffff:ffff:ffff:ffff:ffff,AU +2001:420:5044::,2001:420:5441:ffff:ffff:ffff:ffff:ffff,US +2001:420:5442::,2001:420:5442:ffff:ffff:ffff:ffff:ffff,IN +2001:420:5443::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US +2001:420:5883::,2001:420:5883:ffff:ffff:ffff:ffff:ffff,CN +2001:420:5884::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US +2001:420:5a40::,2001:420:5a40:ffff:ffff:ffff:ffff:ffff,CN +2001:420:5a41::,2001:420:5a43:ffff:ffff:ffff:ffff:ffff,US +2001:420:5a44::,2001:420:5a44:ffff:ffff:ffff:ffff:ffff,CN +2001:420:5a45::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US +2001:420:5c40::,2001:420:5c40:ffff:ffff:ffff:ffff:ffff,SG +2001:420:5c41::,2001:420:c0cf:ffff:ffff:ffff:ffff:ffff,US +2001:420:c0d0::,2001:420:c0d0:ffff:ffff:ffff:ffff:ffff,AU +2001:420:c0d1::,2001:420:c0d3:ffff:ffff:ffff:ffff:ffff,US +2001:420:c0d4::,2001:420:c0d4:ffff:ffff:ffff:ffff:ffff,SG +2001:420:c0d5::,2001:420:c0d7:ffff:ffff:ffff:ffff:ffff,US +2001:420:c0d8::,2001:420:c0d8:ffff:ffff:ffff:ffff:ffff,CN +2001:420:c0d9::,2001:420:c0df:ffff:ffff:ffff:ffff:ffff,US +2001:420:c0e0::,2001:420:c0e0:ffff:ffff:ffff:ffff:ffff,IN +2001:420:c0e1::,2001:420:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:428::,2001:428:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:430::,2001:430:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:438::,2001:438:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:440::,2001:440:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:448::,2001:448:ffff:ffff:ffff:ffff:ffff:ffff,MX +2001:450::,2001:450:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:458::,2001:458:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:460::,2001:460:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:468::,2001:468:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:470::,2001:470:19:9ff:ffff:ffff:ffff:ffff,US +2001:470:19:a00::,2001:470:19:fff:ffff:ffff:ffff:ffff,CN +2001:470:19:1000::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US +2001:470:1d::,2001:470:1d:ffff:ffff:ffff:ffff:ffff,CA +2001:470:1e::,2001:470:26:7ff:ffff:ffff:ffff:ffff,US +2001:470:26:800::,2001:470:26:fff:ffff:ffff:ffff:ffff,CH +2001:470:26:1000::,2001:470:34:ffff:ffff:ffff:ffff:ffff,US +2001:470:35::,2001:470:35:7ff:ffff:ffff:ffff:ffff,ID +2001:470:35:800::,2001:470:3c:ffff:ffff:ffff:ffff:ffff,US +2001:470:3d::,2001:470:3d:ffff:ffff:ffff:ffff:ffff,PH +2001:470:3e::,2001:470:6d:3ff:ffff:ffff:ffff:ffff,US +2001:470:6d:400::,2001:470:6d:7ff:ffff:ffff:ffff:ffff,DE +2001:470:6d:800::,2001:470:1eff:ffff:ffff:ffff:ffff:ffff,US +2001:470:1f00::,2001:470:1f00:ffff:ffff:ffff:ffff:ffff,AU +2001:470:1f01::,2001:470:69a3:ffff:ffff:ffff:ffff:ffff,US +2001:470:69a4::,2001:470:69a4:ffff:ffff:ffff:ffff:ffff,GB +2001:470:69a5::,2001:470:6adc:ffff:ffff:ffff:ffff:ffff,US +2001:470:6add::,2001:470:6add:ffff:ffff:ffff:ffff:ffff,GB +2001:470:6ade::,2001:470:6b2e:ffff:ffff:ffff:ffff:ffff,US +2001:470:6b2f::,2001:470:6b2f:ffff:ffff:ffff:ffff:ffff,GB +2001:470:6b30::,2001:470:6be4:ffff:ffff:ffff:ffff:ffff,US +2001:470:6be5::,2001:470:6be5:ffff:ffff:ffff:ffff:ffff,GB +2001:470:6be6::,2001:470:6bed:ffff:ffff:ffff:ffff:ffff,US +2001:470:6bee::,2001:470:6bee:ffff:ffff:ffff:ffff:ffff,IN +2001:470:6bef::,2001:470:710f:ffff:ffff:ffff:ffff:ffff,US +2001:470:7110::,2001:470:7110:ffff:ffff:ffff:ffff:ffff,UA +2001:470:7111::,2001:470:75bf:ffff:ffff:ffff:ffff:ffff,US +2001:470:75c0::,2001:470:75c0:ffff:ffff:ffff:ffff:ffff,TR +2001:470:75c1::,2001:470:75c4:ffff:ffff:ffff:ffff:ffff,US +2001:470:75c5::,2001:470:75c5:ffff:ffff:ffff:ffff:ffff,DE +2001:470:75c6::,2001:470:80b6:ffff:ffff:ffff:ffff:ffff,US +2001:470:80b7::,2001:470:80b7:ffff:ffff:ffff:ffff:ffff,CN +2001:470:80b8::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US +2001:470:81ef::,2001:470:81ef:ffff:ffff:ffff:ffff:ffff,CA +2001:470:81f0::,2001:470:83a2:ffff:ffff:ffff:ffff:ffff,US +2001:470:83a3::,2001:470:83a3:ffff:ffff:ffff:ffff:ffff,AU +2001:470:83a4::,2001:470:83bb:ffff:ffff:ffff:ffff:ffff,US +2001:470:83bc::,2001:470:83bc:ffff:ffff:ffff:ffff:ffff,CN +2001:470:83bd::,2001:470:83e8:ffff:ffff:ffff:ffff:ffff,US +2001:470:83e9::,2001:470:83e9:ffff:ffff:ffff:ffff:ffff,CN +2001:470:83ea::,2001:470:9ebf:ffff:ffff:ffff:ffff:ffff,US +2001:470:9ec0::,2001:470:9ec0:ffff:ffff:ffff:ffff:ffff,DE +2001:470:9ec1::,2001:470:b7a4:ffff:ffff:ffff:ffff:ffff,US +2001:470:b7a5::,2001:470:b7a5:ffff:ffff:ffff:ffff:ffff,CH +2001:470:b7a6::,2001:470:de60:ffff:ffff:ffff:ffff:ffff,US +2001:470:de61::,2001:470:de61:ffff:ffff:ffff:ffff:ffff,RU +2001:470:de62::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US +2001:470:e97f::,2001:470:e97f:ffff:ffff:ffff:ffff:ffff,CA +2001:470:e980::,2001:470:ea76:ffff:ffff:ffff:ffff:ffff,US +2001:470:ea77::,2001:470:ea77:ffff:ffff:ffff:ffff:ffff,AU +2001:470:ea78::,2001:470:f1fa:ffff:ffff:ffff:ffff:ffff,US +2001:470:f1fb::,2001:470:f1fb:ffff:ffff:ffff:ffff:ffff,CN +2001:470:f1fc::,2001:470:f382:ffff:ffff:ffff:ffff:ffff,US +2001:470:f383::,2001:470:f383:ffff:ffff:ffff:ffff:ffff,CN +2001:470:f384::,2001:470:fe3f:ffff:ffff:ffff:ffff:ffff,US +2001:470:fe40::,2001:470:fe40:ffff:ffff:ffff:ffff:ffff,JP +2001:470:fe41::,2001:470:fe7b:ffff:ffff:ffff:ffff:ffff,US +2001:470:fe7c::,2001:470:fe7c:ffff:ffff:ffff:ffff:ffff,CN +2001:470:fe7d::,2001:470:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:478::,2001:478:ffff:ffff:ffff:ffff:ffff:ffff,KN +2001:480::,2001:480:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:490::,2001:490:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4a0::,2001:4a0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4b0::,2001:4b0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4b8::,2001:4b8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4c0::,2001:4c0:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:4c8::,2001:4c8:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:4d0::,2001:4d0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4e0::,2001:4e0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4e8::,2001:4e8:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:4f0::,2001:4f0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4f8::,2001:4f8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:500:1::,2001:500:4:ffff:ffff:ffff:ffff:ffff,US +2001:500:6::,2001:500:f:ffff:ffff:ffff:ffff:ffff,CA +2001:500:10::,2001:500:10:ffff:ffff:ffff:ffff:ffff,PR +2001:500:11::,2001:500:15:ffff:ffff:ffff:ffff:ffff,US +2001:500:16::,2001:500:2c:ffff:ffff:ffff:ffff:ffff,CA +2001:500:2d::,2001:500:31:ffff:ffff:ffff:ffff:ffff,US +2001:500:40::,2001:500:56:ffff:ffff:ffff:ffff:ffff,CA +2001:500:60::,2001:500:7d:ffff:ffff:ffff:ffff:ffff,US +2001:500:80::,2001:500:83:ffff:ffff:ffff:ffff:ffff,CA +2001:500:84::,2001:500:89:ffff:ffff:ffff:ffff:ffff,US +2001:500:8c::,2001:500:9f:ffff:ffff:ffff:ffff:ffff,US +2001:500:a0::,2001:500:a7:ffff:ffff:ffff:ffff:ffff,CA +2001:500:a8::,2001:500:a8:ffff:ffff:ffff:ffff:ffff,US +2001:500:c0::,2001:500:ef:ffff:ffff:ffff:ffff:ffff,CA +2001:500:f0::,2001:500:f0:ffff:ffff:ffff:ffff:ffff,US +2001:500:f1::,2001:500:f1:ffff:ffff:ffff:ffff:ffff,CA +2001:500:100::,2001:500:109:ffff:ffff:ffff:ffff:ffff,CA +2001:500:3e5::,2001:500:3e5:ffff:ffff:ffff:ffff:ffff,US +2001:500:30ff::,2001:500:30ff:ffff:ffff:ffff:ffff:ffff,US +2001:500:3682::,2001:500:3682:ffff:ffff:ffff:ffff:ffff,US +2001:500:4431::,2001:500:4431:ffff:ffff:ffff:ffff:ffff,US +2001:500:7967::,2001:500:7967:ffff:ffff:ffff:ffff:ffff,US +2001:500:856e::,2001:500:856e:ffff:ffff:ffff:ffff:ffff,US +2001:500:d937::,2001:500:d937:ffff:ffff:ffff:ffff:ffff,US +2001:500:ed30::,2001:500:ed30:ffff:ffff:ffff:ffff:ffff,US +2001:501:8a29::,2001:501:8a29:ffff:ffff:ffff:ffff:ffff,US +2001:501:973c::,2001:501:973c:ffff:ffff:ffff:ffff:ffff,US +2001:501:b1f9::,2001:501:b1f9:ffff:ffff:ffff:ffff:ffff,US +2001:502:8cc::,2001:502:8cc:ffff:ffff:ffff:ffff:ffff,US +2001:502:100e::,2001:502:100e:ffff:ffff:ffff:ffff:ffff,US +2001:502:1ca1::,2001:502:1ca1:ffff:ffff:ffff:ffff:ffff,US +2001:502:2eda::,2001:502:2eda:ffff:ffff:ffff:ffff:ffff,US +2001:502:4612::,2001:502:4612:ffff:ffff:ffff:ffff:ffff,US +2001:502:63bd::,2001:502:63bd:ffff:ffff:ffff:ffff:ffff,US +2001:502:7094::,2001:502:7094:ffff:ffff:ffff:ffff:ffff,US +2001:502:7a71::,2001:502:7a71:ffff:ffff:ffff:ffff:ffff,US +2001:502:8c25::,2001:502:8c25:ffff:ffff:ffff:ffff:ffff,US +2001:502:ad09::,2001:502:ad09:ffff:ffff:ffff:ffff:ffff,US +2001:502:be98::,2001:502:be98:ffff:ffff:ffff:ffff:ffff,US +2001:502:cbe4::,2001:502:cbe4:ffff:ffff:ffff:ffff:ffff,US +2001:502:cfb5::,2001:502:cfb5:ffff:ffff:ffff:ffff:ffff,US +2001:502:d399::,2001:502:d399:ffff:ffff:ffff:ffff:ffff,US +2001:502:f3ff::,2001:502:f3ff:ffff:ffff:ffff:ffff:ffff,US +2001:503:c27::,2001:503:c27:ffff:ffff:ffff:ffff:ffff,US +2001:503:d2d::,2001:503:d2d:ffff:ffff:ffff:ffff:ffff,US +2001:503:231d::,2001:503:231d:ffff:ffff:ffff:ffff:ffff,US +2001:503:3227::,2001:503:3227:ffff:ffff:ffff:ffff:ffff,US +2001:503:39c1::,2001:503:39c1:ffff:ffff:ffff:ffff:ffff,US +2001:503:4872::,2001:503:4872:ffff:ffff:ffff:ffff:ffff,US +2001:503:5419::,2001:503:5419:ffff:ffff:ffff:ffff:ffff,US +2001:503:5ae2::,2001:503:5ae2:ffff:ffff:ffff:ffff:ffff,US +2001:503:6810::,2001:503:6810:ffff:ffff:ffff:ffff:ffff,US +2001:503:7bbb::,2001:503:7bbb:ffff:ffff:ffff:ffff:ffff,US +2001:503:7bbf::,2001:503:7bbf:ffff:ffff:ffff:ffff:ffff,US +2001:503:8028::,2001:503:8028:ffff:ffff:ffff:ffff:ffff,US +2001:503:83eb::,2001:503:83eb:ffff:ffff:ffff:ffff:ffff,US +2001:503:91ef::,2001:503:91ef:ffff:ffff:ffff:ffff:ffff,US +2001:503:a124::,2001:503:a124:ffff:ffff:ffff:ffff:ffff,US +2001:503:a83e::,2001:503:a83e:ffff:ffff:ffff:ffff:ffff,US +2001:503:ba3e::,2001:503:ba3e:ffff:ffff:ffff:ffff:ffff,US +2001:503:bfb0::,2001:503:bfb0:ffff:ffff:ffff:ffff:ffff,US +2001:503:c779::,2001:503:c779:ffff:ffff:ffff:ffff:ffff,US +2001:503:cc2c::,2001:503:cc2c:ffff:ffff:ffff:ffff:ffff,US +2001:503:d1ae::,2001:503:d1ae:ffff:ffff:ffff:ffff:ffff,US +2001:503:d414::,2001:503:d414:ffff:ffff:ffff:ffff:ffff,US +2001:503:e239::,2001:503:e239:ffff:ffff:ffff:ffff:ffff,US +2001:503:e8ef::,2001:503:e8ef:ffff:ffff:ffff:ffff:ffff,US +2001:503:eea3::,2001:503:eea3:ffff:ffff:ffff:ffff:ffff,US +2001:503:f189::,2001:503:f189:ffff:ffff:ffff:ffff:ffff,US +2001:503:f261::,2001:503:f261:ffff:ffff:ffff:ffff:ffff,US +2001:503:f3da::,2001:503:f3da:ffff:ffff:ffff:ffff:ffff,US +2001:503:ff39::,2001:503:ff39:ffff:ffff:ffff:ffff:ffff,US +2001:504::,2001:504:13:ffff:ffff:ffff:ffff:ffff,US +2001:504:15::,2001:504:15:ffff:ffff:ffff:ffff:ffff,CA +2001:504:16::,2001:504:19:ffff:ffff:ffff:ffff:ffff,US +2001:504:1a::,2001:504:1a:ffff:ffff:ffff:ffff:ffff,CA +2001:504:1b::,2001:504:1c:ffff:ffff:ffff:ffff:ffff,US +2001:504:1d::,2001:504:1d:ffff:ffff:ffff:ffff:ffff,PR +2001:504:20::,2001:504:23:ffff:ffff:ffff:ffff:ffff,CA +2001:504:24::,2001:504:24:ffff:ffff:ffff:ffff:ffff,US +2001:504:25::,2001:504:26:ffff:ffff:ffff:ffff:ffff,CA +2001:504:27::,2001:504:29:ffff:ffff:ffff:ffff:ffff,US +2001:504:2b::,2001:504:2d:ffff:ffff:ffff:ffff:ffff,CA +2001:504:2e::,2001:504:2e:ffff:ffff:ffff:ffff:ffff,US +2001:504:2f::,2001:504:2f:ffff:ffff:ffff:ffff:ffff,CA +2001:504:30::,2001:504:34:ffff:ffff:ffff:ffff:ffff,US +2001:504:35::,2001:504:35:ffff:ffff:ffff:ffff:ffff,GD +2001:504:36::,2001:504:36:ffff:ffff:ffff:ffff:ffff,US +2001:504:37::,2001:504:37:ffff:ffff:ffff:ffff:ffff,CA +2001:504:38::,2001:504:38:ffff:ffff:ffff:ffff:ffff,US +2001:504:39::,2001:504:39:ffff:ffff:ffff:ffff:ffff,CA +2001:504:3a::,2001:504:3d:ffff:ffff:ffff:ffff:ffff,US +2001:504:3e::,2001:504:3e:ffff:ffff:ffff:ffff:ffff,JM +2001:504:3f::,2001:504:41:ffff:ffff:ffff:ffff:ffff,US +2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US +2001:506:8::,2001:506:8:ffff:ffff:ffff:ffff:ffff,US +2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA +2001:506:28::,2001:506:28:ffff:ffff:ffff:ffff:ffff,US +2001:506:100::,2001:506:100:ffff:ffff:ffff:ffff:ffff,US +2001:506:1000::,2001:506:2fff:ffff:ffff:ffff:ffff:ffff,US +2001:506:4000::,2001:506:7fff:ffff:ffff:ffff:ffff:ffff,US +2001:508::,2001:508:ffff:ffff:ffff:ffff:ffff:ffff,BM +2001:510::,2001:510:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:518::,2001:518:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:520::,2001:520:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:528::,2001:528:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:530::,2001:530:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:538::,2001:538:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:540::,2001:540:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:548::,2001:548:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:550::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:558::,2001:560:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:568::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:570::,2001:570:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:578::,2001:57b:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:580::,2001:580:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:590::,2001:590:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:598::,2001:598:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:5a0::,2001:5a0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5a8::,2001:5a8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5b0::,2001:5b0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5b8::,2001:5b8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5c0:1000::,2001:5c0:1fff:ffff:ffff:ffff:ffff:ffff,CA +2001:5c8::,2001:5c8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5d0::,2001:5d0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5d8::,2001:5d8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5e0::,2001:5e0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5e8::,2001:5e8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5f0::,2001:5f0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:5f8::,2001:5f8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:608::,2001:608:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:610::,2001:610:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:618::,2001:618:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:620::,2001:620:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:628::,2001:62f:ffff:ffff:ffff:ffff:ffff:ffff,AT +2001:630::,2001:630:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:638::,2001:638:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:640::,2001:640:ffff:ffff:ffff:ffff:ffff:ffff,RU +2001:648::,2001:64f:ffff:ffff:ffff:ffff:ffff:ffff,GR +2001:650::,2001:65f:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:660::,2001:667:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:668::,2001:66f:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:670::,2001:673:ffff:ffff:ffff:ffff:ffff:ffff,FI +2001:678:1::,2001:678:1:ffff:ffff:ffff:ffff:ffff,CZ +2001:678:2::,2001:678:2:ffff:ffff:ffff:ffff:ffff,DE +2001:678:3::,2001:678:3:ffff:ffff:ffff:ffff:ffff,CH +2001:678:4::,2001:678:5:ffff:ffff:ffff:ffff:ffff,GB +2001:678:6::,2001:678:6:ffff:ffff:ffff:ffff:ffff,LT +2001:678:7::,2001:678:7:ffff:ffff:ffff:ffff:ffff,GR +2001:678:8::,2001:678:8:ffff:ffff:ffff:ffff:ffff,NL +2001:678:9::,2001:678:a:ffff:ffff:ffff:ffff:ffff,BE +2001:678:b::,2001:678:b:ffff:ffff:ffff:ffff:ffff,LV +2001:678:c::,2001:678:c:ffff:ffff:ffff:ffff:ffff,FR +2001:678:d::,2001:678:d:ffff:ffff:ffff:ffff:ffff,AT +2001:678:e::,2001:678:e:ffff:ffff:ffff:ffff:ffff,DE +2001:678:f::,2001:678:11:ffff:ffff:ffff:ffff:ffff,CZ +2001:678:12::,2001:678:12:ffff:ffff:ffff:ffff:ffff,IT +2001:678:13::,2001:678:18:ffff:ffff:ffff:ffff:ffff,RU +2001:678:19::,2001:678:19:ffff:ffff:ffff:ffff:ffff,LT +2001:678:1a::,2001:678:1a:ffff:ffff:ffff:ffff:ffff,DK +2001:678:1b::,2001:678:1b:ffff:ffff:ffff:ffff:ffff,LU +2001:678:1c::,2001:678:1c:ffff:ffff:ffff:ffff:ffff,AT +2001:678:20::,2001:678:20:ffff:ffff:ffff:ffff:ffff,AT +2001:678:24::,2001:678:24:ffff:ffff:ffff:ffff:ffff,AT +2001:678:28::,2001:678:28:ffff:ffff:ffff:ffff:ffff,SM +2001:678:2c::,2001:678:2c:ffff:ffff:ffff:ffff:ffff,NL +2001:678:30::,2001:678:30:ffff:ffff:ffff:ffff:ffff,NL +2001:678:34::,2001:678:34:ffff:ffff:ffff:ffff:ffff,NL +2001:678:38::,2001:678:38:ffff:ffff:ffff:ffff:ffff,NL +2001:678:3c::,2001:678:3c:ffff:ffff:ffff:ffff:ffff,BG +2001:678:40::,2001:678:40:ffff:ffff:ffff:ffff:ffff,ES +2001:678:44::,2001:678:44:ffff:ffff:ffff:ffff:ffff,ES +2001:678:48::,2001:678:48:ffff:ffff:ffff:ffff:ffff,ES +2001:678:4c::,2001:678:4c:ffff:ffff:ffff:ffff:ffff,FR +2001:678:60::,2001:678:60:ffff:ffff:ffff:ffff:ffff,LU +2001:678:64::,2001:678:64:ffff:ffff:ffff:ffff:ffff,BE +2001:678:68::,2001:678:68:ffff:ffff:ffff:ffff:ffff,BE +2001:678:6c::,2001:678:6c:ffff:ffff:ffff:ffff:ffff,BE +2001:678:70::,2001:678:70:ffff:ffff:ffff:ffff:ffff,SK +2001:678:74::,2001:678:74:ffff:ffff:ffff:ffff:ffff,DK +2001:678:78::,2001:678:78:ffff:ffff:ffff:ffff:ffff,DK +2001:678:7c::,2001:678:7c:ffff:ffff:ffff:ffff:ffff,LV +2001:678:80::,2001:678:80:ffff:ffff:ffff:ffff:ffff,LV +2001:678:84::,2001:678:84:ffff:ffff:ffff:ffff:ffff,LV +2001:678:88::,2001:678:88:ffff:ffff:ffff:ffff:ffff,LT +2001:678:8c::,2001:678:8c:ffff:ffff:ffff:ffff:ffff,LT +2001:678:90::,2001:678:90:ffff:ffff:ffff:ffff:ffff,SK +2001:678:94::,2001:678:94:ffff:ffff:ffff:ffff:ffff,EE +2001:678:98::,2001:678:98:ffff:ffff:ffff:ffff:ffff,KZ +2001:678:9c::,2001:678:9c:ffff:ffff:ffff:ffff:ffff,SK +2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE +2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:c::,2001:67c:c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:10::,2001:67c:10:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:14::,2001:67c:14:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18::,2001:67c:18:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1c::,2001:67c:1c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:20::,2001:67c:20:ffff:ffff:ffff:ffff:ffff,IE +2001:67c:24::,2001:67c:24:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2c::,2001:67c:2c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:30::,2001:67c:30:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:34::,2001:67c:34:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:38::,2001:67c:38:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:40::,2001:67c:40:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:44::,2001:67c:44:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:4c::,2001:67c:4c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:50::,2001:67c:50:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:54::,2001:67c:54:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:58::,2001:67c:58:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:5c::,2001:67c:5c:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:60::,2001:67c:60:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:68::,2001:67c:68:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:6c::,2001:67c:6c:ffff:ffff:ffff:ffff:ffff,IS +2001:67c:70::,2001:67c:70:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:74::,2001:67c:74:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:78::,2001:67c:78:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:84::,2001:67c:84:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:88::,2001:67c:88:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:8c::,2001:67c:8c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:90::,2001:67c:90:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:94::,2001:67c:94:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:98::,2001:67c:98:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:9c::,2001:67c:9c:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:a0::,2001:67c:a0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:a4::,2001:67c:a4:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:a8::,2001:67c:a8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:ac::,2001:67c:ac:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:b0::,2001:67c:b0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:b4::,2001:67c:b4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:b8::,2001:67c:b8:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:bc::,2001:67c:bc:ffff:ffff:ffff:ffff:ffff,EE +2001:67c:c4::,2001:67c:c4:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:c8::,2001:67c:c8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:cc::,2001:67c:cc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:d0::,2001:67c:d0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:d4::,2001:67c:d4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:d8::,2001:67c:d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:dc::,2001:67c:dc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:e0::,2001:67c:e0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:e4::,2001:67c:e4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:e8::,2001:67c:e8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:ec::,2001:67c:ec:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:f0::,2001:67c:f0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:f4::,2001:67c:f4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:f8::,2001:67c:f8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:fc::,2001:67c:fc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:100::,2001:67c:100:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:108::,2001:67c:108:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:10c::,2001:67c:10c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:110::,2001:67c:110:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:114::,2001:67c:114:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:118::,2001:67c:118:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:11c::,2001:67c:11c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:120::,2001:67c:120:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:124::,2001:67c:124:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:128::,2001:67c:128:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:12c::,2001:67c:12c:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:130::,2001:67c:130:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:134::,2001:67c:134:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:138::,2001:67c:138:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:13c::,2001:67c:13c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:140::,2001:67c:140:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:148::,2001:67c:148:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:14c::,2001:67c:14d:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:154::,2001:67c:154:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:158::,2001:67c:158:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:15c::,2001:67c:15c:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:160::,2001:67c:160:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:164::,2001:67c:164:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:168::,2001:67c:168:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:170::,2001:67c:170:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:174::,2001:67c:174:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:178::,2001:67c:178:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:17c::,2001:67c:17c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:180::,2001:67c:180:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:184::,2001:67c:184:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:188::,2001:67c:188:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:18c::,2001:67c:18c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:190::,2001:67c:190:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:194::,2001:67c:194:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:19c::,2001:67c:19c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1a0::,2001:67c:1a0:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:1a4::,2001:67c:1a4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1a8::,2001:67c:1a8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1ac::,2001:67c:1ac:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1b0::,2001:67c:1b0:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1b4::,2001:67c:1b4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1b8::,2001:67c:1b8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1bc::,2001:67c:1bc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1c0::,2001:67c:1c0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1c4::,2001:67c:1c4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1c8::,2001:67c:1c8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1cc::,2001:67c:1cc:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1d0::,2001:67c:1d0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1d4::,2001:67c:1d4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1d8::,2001:67c:1d8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1dc::,2001:67c:1dc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1e0::,2001:67c:1e0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1e4::,2001:67c:1e4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1e8::,2001:67c:1e8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1ec::,2001:67c:1ec:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:1f0::,2001:67c:1f0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1f4::,2001:67c:1f4:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:1f8::,2001:67c:1f8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1fc::,2001:67c:1fc:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:200::,2001:67c:200:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:204::,2001:67c:204:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:208::,2001:67c:208:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:20c::,2001:67c:20c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:210::,2001:67c:210:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:214::,2001:67c:214:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:218::,2001:67c:218:ffff:ffff:ffff:ffff:ffff,LT +2001:67c:21c::,2001:67c:21c:ffff:ffff:ffff:ffff:ffff,AM +2001:67c:220::,2001:67c:220:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:224::,2001:67c:224:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:228::,2001:67c:228:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:22c::,2001:67c:22c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:230::,2001:67c:230:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:234::,2001:67c:234:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:238::,2001:67c:238:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:23c::,2001:67c:23c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:240::,2001:67c:240:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:244::,2001:67c:244:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:248::,2001:67c:248:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:24c::,2001:67c:24c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:250::,2001:67c:250:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:254::,2001:67c:254:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:258::,2001:67c:258:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:25c::,2001:67c:25c:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:260::,2001:67c:260:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:264::,2001:67c:264:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:268::,2001:67c:268:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:26c::,2001:67c:26c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:270::,2001:67c:270:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:274::,2001:67c:274:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:278::,2001:67c:278:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:27c::,2001:67c:27c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:280::,2001:67c:280:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:284::,2001:67c:284:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:288::,2001:67c:288:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:28c::,2001:67c:28c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:294::,2001:67c:294:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:298::,2001:67c:298:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:29c::,2001:67c:29c:ffff:ffff:ffff:ffff:ffff,IT +2001:67c:2a0::,2001:67c:2a0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2a4::,2001:67c:2a4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a8::,2001:67c:2a8:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2ac::,2001:67c:2ac:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2b0::,2001:67c:2b0:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:2b8::,2001:67c:2b8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2bc::,2001:67c:2bc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2c0::,2001:67c:2c0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2c4::,2001:67c:2c4:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c8::,2001:67c:2c8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2cc::,2001:67c:2cc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2d0::,2001:67c:2d0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2d4::,2001:67c:2d4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2d8::,2001:67c:2d8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2dc::,2001:67c:2dc:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2e0::,2001:67c:2e0:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2e4::,2001:67c:2e4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2e8::,2001:67c:2e8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2ec::,2001:67c:2ec:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2f4::,2001:67c:2f4:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:2f8::,2001:67c:2f8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2fc::,2001:67c:2fc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:300::,2001:67c:300:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:304::,2001:67c:304:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:308::,2001:67c:308:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:30c::,2001:67c:30c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:310::,2001:67c:310:ffff:ffff:ffff:ffff:ffff,CY +2001:67c:314::,2001:67c:314:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:318::,2001:67c:318:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:31c::,2001:67c:31c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:324::,2001:67c:324:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:328::,2001:67c:328:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:32c::,2001:67c:32c:ffff:ffff:ffff:ffff:ffff,EE +2001:67c:330::,2001:67c:330:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:334::,2001:67c:334:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:338::,2001:67c:338:ffff:ffff:ffff:ffff:ffff,IE +2001:67c:33c::,2001:67c:33c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:340::,2001:67c:340:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:344::,2001:67c:344:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:348::,2001:67c:348:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:34c::,2001:67c:34c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:350::,2001:67c:350:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:354::,2001:67c:354:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:358::,2001:67c:358:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:35c::,2001:67c:35c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:360::,2001:67c:360:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:364::,2001:67c:364:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:368::,2001:67c:368:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:36c::,2001:67c:36c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:370::,2001:67c:370:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:374::,2001:67c:374:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:37c::,2001:67c:37c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:380::,2001:67c:380:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:384::,2001:67c:384:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:388::,2001:67c:388:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:38c::,2001:67c:38c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:390::,2001:67c:390:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:394::,2001:67c:394:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:398::,2001:67c:398:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:39c::,2001:67c:39c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:3a0::,2001:67c:3a0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:3a4::,2001:67c:3a4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:3a8::,2001:67c:3a8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:3ac::,2001:67c:3ac:ffff:ffff:ffff:ffff:ffff,RS +2001:67c:3b0::,2001:67c:3b0:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:3b4::,2001:67c:3b4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:3b8::,2001:67c:3b8:ffff:ffff:ffff:ffff:ffff,IE +2001:67c:3bc::,2001:67c:3bc:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:3c0::,2001:67c:3c0:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:3c4::,2001:67c:3c4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:3c8::,2001:67c:3c8:ffff:ffff:ffff:ffff:ffff,EE +2001:67c:3cc::,2001:67c:3cc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:3d0::,2001:67c:3d0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:3d4::,2001:67c:3d4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:3d8::,2001:67c:3d8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:3dc::,2001:67c:3dc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:3e0::,2001:67c:3e0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:3e4::,2001:67c:3e4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:3e8::,2001:67c:3e9:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:3f0::,2001:67c:3f0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:3f4::,2001:67c:3f4:ffff:ffff:ffff:ffff:ffff,HR +2001:67c:3f8::,2001:67c:3f8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:3fc::,2001:67c:3fc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:400::,2001:67c:400:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:404::,2001:67c:404:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:408::,2001:67c:408:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:40c::,2001:67c:40c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:410::,2001:67c:410:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:414::,2001:67c:414:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:418::,2001:67c:418:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:41c::,2001:67c:41c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:420::,2001:67c:420:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:424::,2001:67c:424:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:428::,2001:67c:428:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:42c::,2001:67c:42c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:430::,2001:67c:430:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:434::,2001:67c:434:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:438::,2001:67c:438:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:43c::,2001:67c:43c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:440::,2001:67c:440:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:444::,2001:67c:444:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:448::,2001:67c:448:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:44c::,2001:67c:44c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:450::,2001:67c:450:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:454::,2001:67c:454:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:458::,2001:67c:458:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:45c::,2001:67c:45c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:460::,2001:67c:460:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:464::,2001:67c:464:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:468::,2001:67c:468:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:46c::,2001:67c:46c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:470::,2001:67c:470:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:474::,2001:67c:474:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:478::,2001:67c:478:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:47c::,2001:67c:47c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:480::,2001:67c:480:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:484::,2001:67c:484:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:488::,2001:67c:488:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:48c::,2001:67c:48c:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:490::,2001:67c:490:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:494::,2001:67c:494:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:498::,2001:67c:498:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:49c::,2001:67c:49c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:4a0::,2001:67c:4a0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:4a4::,2001:67c:4a4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:4a8::,2001:67c:4a8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:4ac::,2001:67c:4ac:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:4b0::,2001:67c:4b0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:4b4::,2001:67c:4b4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:4b8::,2001:67c:4b8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:4bc::,2001:67c:4bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:4c0::,2001:67c:4c0:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:4c4::,2001:67c:4c4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:4c8::,2001:67c:4c8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:4cc::,2001:67c:4cc:ffff:ffff:ffff:ffff:ffff,IL +2001:67c:4d0::,2001:67c:4d0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:4d4::,2001:67c:4d4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:4d8::,2001:67c:4d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:4dc::,2001:67c:4dc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:4e4::,2001:67c:4e4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:4e8::,2001:67c:4e8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:4ec::,2001:67c:4ec:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:4f0::,2001:67c:4f0:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:4f4::,2001:67c:4f4:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:4f8::,2001:67c:4f8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:4fc::,2001:67c:4fc:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:500::,2001:67c:500:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:504::,2001:67c:504:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:508::,2001:67c:508:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:50c::,2001:67c:50c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:510::,2001:67c:510:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:514::,2001:67c:514:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:518::,2001:67c:518:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:51c::,2001:67c:51c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:520::,2001:67c:520:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:524::,2001:67c:524:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:528::,2001:67c:528:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:530::,2001:67c:530:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:534::,2001:67c:534:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:538::,2001:67c:538:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:53c::,2001:67c:53c:ffff:ffff:ffff:ffff:ffff,HR +2001:67c:540::,2001:67c:540:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:544::,2001:67c:544:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:548::,2001:67c:548:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:54c::,2001:67c:54c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:550::,2001:67c:550:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:554::,2001:67c:554:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:558::,2001:67c:558:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:55c::,2001:67c:55c:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:560::,2001:67c:560:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:564::,2001:67c:564:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:568::,2001:67c:568:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:56c::,2001:67c:56c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:570::,2001:67c:570:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:574::,2001:67c:574:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:578::,2001:67c:578:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:57c::,2001:67c:57c:ffff:ffff:ffff:ffff:ffff,BY +2001:67c:580::,2001:67c:580:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:584::,2001:67c:584:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:588::,2001:67c:588:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:58c::,2001:67c:58c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:590::,2001:67c:590:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:594::,2001:67c:594:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:598::,2001:67c:598:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:59c::,2001:67c:59c:ffff:ffff:ffff:ffff:ffff,HU +2001:67c:5a0::,2001:67c:5a1:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:5a8::,2001:67c:5a8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:5ac::,2001:67c:5ac:ffff:ffff:ffff:ffff:ffff,BY +2001:67c:5b0::,2001:67c:5b0:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:5b4::,2001:67c:5b4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:5b8::,2001:67c:5b8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:5bc::,2001:67c:5bc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:5c0::,2001:67c:5c0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:5c4::,2001:67c:5c4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:5c8::,2001:67c:5c8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:5cc::,2001:67c:5cc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:5d0::,2001:67c:5d0:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:5d4::,2001:67c:5d4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:5d8::,2001:67c:5d8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:5dc::,2001:67c:5dc:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:5e0::,2001:67c:5e0:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:5e4::,2001:67c:5e4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:5e8::,2001:67c:5e8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:5ec::,2001:67c:5ec:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:5f0::,2001:67c:5f0:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:5f4::,2001:67c:5f4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:5f8::,2001:67c:5f8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:5fc::,2001:67c:5fc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:600::,2001:67c:600:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:604::,2001:67c:604:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:608::,2001:67c:608:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:60c::,2001:67c:60c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:610::,2001:67c:610:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:61c::,2001:67c:61c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:620::,2001:67c:620:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:624::,2001:67c:624:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:628::,2001:67c:628:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:62c::,2001:67c:62c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:630::,2001:67c:630:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:634::,2001:67c:634:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:638::,2001:67c:638:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:63c::,2001:67c:63c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:640::,2001:67c:640:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:644::,2001:67c:644:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:648::,2001:67c:648:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:64c::,2001:67c:64c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:650::,2001:67c:650:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:654::,2001:67c:654:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:658::,2001:67c:658:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:65c::,2001:67c:65c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:660::,2001:67c:660:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:664::,2001:67c:664:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:668::,2001:67c:668:ffff:ffff:ffff:ffff:ffff,MD +2001:67c:66c::,2001:67c:66c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:670::,2001:67c:670:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:674::,2001:67c:674:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:678::,2001:67c:678:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:67c::,2001:67c:67c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:680::,2001:67c:680:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:684::,2001:67c:684:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:688::,2001:67c:688:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:68c::,2001:67c:68c:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:690::,2001:67c:690:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:694::,2001:67c:694:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:698::,2001:67c:698:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:69c::,2001:67c:69c:ffff:ffff:ffff:ffff:ffff,RS +2001:67c:6a0::,2001:67c:6a0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:6a4::,2001:67c:6a4:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:6a8::,2001:67c:6a8:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:6ac::,2001:67c:6ac:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:6b0::,2001:67c:6b0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:6b4::,2001:67c:6b4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:6b8::,2001:67c:6b8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:6bc::,2001:67c:6bc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:6c0::,2001:67c:6c0:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:6c4::,2001:67c:6c4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:6c8::,2001:67c:6c8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:6cc::,2001:67c:6cc:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:6d0::,2001:67c:6d0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:6d4::,2001:67c:6d4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:6d8::,2001:67c:6d8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:6dc::,2001:67c:6dc:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:6e0::,2001:67c:6e0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:6e4::,2001:67c:6e4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:6e8::,2001:67c:6e8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:6ec::,2001:67c:6ec:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:6f0::,2001:67c:6f0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:6f4::,2001:67c:6f4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:6f8::,2001:67c:6f8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:6fc::,2001:67c:6fc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:700::,2001:67c:700:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:704::,2001:67c:704:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:708::,2001:67c:708:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:70c::,2001:67c:70c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:710::,2001:67c:710:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:714::,2001:67c:714:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:718::,2001:67c:718:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:71c::,2001:67c:71c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:720::,2001:67c:720:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:724::,2001:67c:724:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:728::,2001:67c:728:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:72c::,2001:67c:72c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:730::,2001:67c:730:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:734::,2001:67c:734:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:738::,2001:67c:738:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:73c::,2001:67c:73c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:740::,2001:67c:740:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:744::,2001:67c:744:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:748::,2001:67c:748:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:74c::,2001:67c:74c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:750::,2001:67c:750:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:754::,2001:67c:754:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:758::,2001:67c:758:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:75c::,2001:67c:75c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:760::,2001:67c:760:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:764::,2001:67c:764:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:768::,2001:67c:768:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:76c::,2001:67c:76c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:770::,2001:67c:771:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:778::,2001:67c:778:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:77c::,2001:67c:77c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:784::,2001:67c:784:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:788::,2001:67c:788:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:78c::,2001:67c:78c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:790::,2001:67c:790:ffff:ffff:ffff:ffff:ffff,IT +2001:67c:794::,2001:67c:794:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:798::,2001:67c:798:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:79c::,2001:67c:79c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:7a0::,2001:67c:7a0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:7a4::,2001:67c:7a4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:7a8::,2001:67c:7a8:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:7ac::,2001:67c:7ac:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:7b0::,2001:67c:7b0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:7b4::,2001:67c:7b4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:7b8::,2001:67c:7b8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:7c0::,2001:67c:7c3:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:7d0::,2001:67c:7d0:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:7d4::,2001:67c:7d4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:7d8::,2001:67c:7d8:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:7dc::,2001:67c:7dc:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:7e0::,2001:67c:7e0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:7e4::,2001:67c:7e4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:7e8::,2001:67c:7e8:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:7ec::,2001:67c:7ec:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:7f0::,2001:67c:7f0:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:7f4::,2001:67c:7f4:ffff:ffff:ffff:ffff:ffff,KW +2001:67c:7f8::,2001:67c:7f8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:7fc::,2001:67c:7fc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1000::,2001:67c:1001:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1008::,2001:67c:1009:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1010::,2001:67c:1011:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1018::,2001:67c:1019:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1020::,2001:67c:1021:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1028::,2001:67c:1029:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1030::,2001:67c:1030:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1034::,2001:67c:1034:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1038::,2001:67c:1038:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:103c::,2001:67c:103c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1040::,2001:67c:1040:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1044::,2001:67c:1044:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1048::,2001:67c:1048:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:104c::,2001:67c:104c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1054::,2001:67c:1054:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1058::,2001:67c:1058:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:105c::,2001:67c:105c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1060::,2001:67c:1060:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:1064::,2001:67c:1064:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1068::,2001:67c:1068:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:106c::,2001:67c:106c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1070::,2001:67c:1071:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:1078::,2001:67c:1078:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:107c::,2001:67c:107c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1080::,2001:67c:1080:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1084::,2001:67c:1084:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1090::,2001:67c:1090:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1098::,2001:67c:1098:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:109c::,2001:67c:109c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:10a0::,2001:67c:10a0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:10a4::,2001:67c:10a4:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:10a8::,2001:67c:10a9:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:10b0::,2001:67c:10b0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:10b4::,2001:67c:10b4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:10b8::,2001:67c:10b8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:10bc::,2001:67c:10bc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:10c0::,2001:67c:10c0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:10c4::,2001:67c:10c4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:10c8::,2001:67c:10c8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:10cc::,2001:67c:10cc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:10d0::,2001:67c:10d0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:10d4::,2001:67c:10d4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:10d8::,2001:67c:10d8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:10dc::,2001:67c:10dc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:10e0::,2001:67c:10e0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:10e4::,2001:67c:10e4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:10e8::,2001:67c:10e8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:10ec::,2001:67c:10ec:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:10f0::,2001:67c:10f0:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:10f4::,2001:67c:10f4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:10f8::,2001:67c:10f8:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:10fc::,2001:67c:10fc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1100::,2001:67c:1100:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1104::,2001:67c:1104:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1108::,2001:67c:1109:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1110::,2001:67c:1111:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1118::,2001:67c:1118:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:111c::,2001:67c:111c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1120::,2001:67c:1120:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1124::,2001:67c:1124:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:1128::,2001:67c:1128:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:112c::,2001:67c:112c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1130::,2001:67c:1130:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1134::,2001:67c:1134:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1138::,2001:67c:1138:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:113c::,2001:67c:113c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1140::,2001:67c:1140:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1144::,2001:67c:1144:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1148::,2001:67c:1148:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:114c::,2001:67c:114c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1150::,2001:67c:1150:ffff:ffff:ffff:ffff:ffff,IL +2001:67c:1154::,2001:67c:1154:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:1158::,2001:67c:1158:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:115c::,2001:67c:115c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1160::,2001:67c:1160:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1164::,2001:67c:1164:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:116c::,2001:67c:116c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1170::,2001:67c:1170:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1174::,2001:67c:1174:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1178::,2001:67c:1178:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:117c::,2001:67c:117c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1184::,2001:67c:1184:ffff:ffff:ffff:ffff:ffff,HR +2001:67c:1188::,2001:67c:1188:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:118c::,2001:67c:118c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1190::,2001:67c:1190:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1194::,2001:67c:1194:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1198::,2001:67c:1199:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:11a0::,2001:67c:11a0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:11a4::,2001:67c:11a4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:11a8::,2001:67c:11a8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:11ac::,2001:67c:11ac:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:11b0::,2001:67c:11b0:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:11b4::,2001:67c:11b4:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:11b8::,2001:67c:11b8:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:11bc::,2001:67c:11bc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:11c0::,2001:67c:11c0:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:11c4::,2001:67c:11c4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:11c8::,2001:67c:11c8:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:11cc::,2001:67c:11cc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:11d0::,2001:67c:11d0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:11d4::,2001:67c:11d4:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:11d8::,2001:67c:11d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:11dc::,2001:67c:11dc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:11e0::,2001:67c:11e0:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:11e4::,2001:67c:11e4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:11e8::,2001:67c:11e8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:11ec::,2001:67c:11ec:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:11f4::,2001:67c:11f4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:11f8::,2001:67c:11f8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:11fc::,2001:67c:11fc:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1200::,2001:67c:1203:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1210::,2001:67c:1213:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1220::,2001:67c:1223:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1240::,2001:67c:1240:ffff:ffff:ffff:ffff:ffff,IE +2001:67c:1244::,2001:67c:1244:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1248::,2001:67c:1248:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:124c::,2001:67c:124c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1250::,2001:67c:1250:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:1254::,2001:67c:1254:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:125c::,2001:67c:125c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1260::,2001:67c:1260:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1264::,2001:67c:1264:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1268::,2001:67c:1268:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:126c::,2001:67c:126c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1270::,2001:67c:1270:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1274::,2001:67c:1274:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1278::,2001:67c:1278:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1280::,2001:67c:1280:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1284::,2001:67c:1284:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1288::,2001:67c:1288:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:128c::,2001:67c:128c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1294::,2001:67c:1294:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:129c::,2001:67c:129c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:12a0::,2001:67c:12a0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:12a4::,2001:67c:12a4:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:12a8::,2001:67c:12a8:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:12ac::,2001:67c:12ac:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:12b0::,2001:67c:12b0:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:12b4::,2001:67c:12b4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:12b8::,2001:67c:12b8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:12bc::,2001:67c:12bc:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:12c0::,2001:67c:12c1:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:12c8::,2001:67c:12c8:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:12cc::,2001:67c:12cc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:12d0::,2001:67c:12d0:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:12d4::,2001:67c:12d4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:12d8::,2001:67c:12d8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:12dc::,2001:67c:12dc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:12e0::,2001:67c:12e0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:12e4::,2001:67c:12e4:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:12e8::,2001:67c:12e9:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:12f4::,2001:67c:12f4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:12f8::,2001:67c:12f8:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:12fc::,2001:67c:12fc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1300::,2001:67c:1300:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1304::,2001:67c:1304:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1308::,2001:67c:1308:ffff:ffff:ffff:ffff:ffff,MD +2001:67c:130c::,2001:67c:130c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1310::,2001:67c:1310:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1314::,2001:67c:1314:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1318::,2001:67c:1318:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:131c::,2001:67c:131c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1320::,2001:67c:1320:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1324::,2001:67c:1324:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1328::,2001:67c:1328:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:132c::,2001:67c:132c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1330::,2001:67c:1330:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1334::,2001:67c:1334:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1338::,2001:67c:1338:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:133c::,2001:67c:133c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1340::,2001:67c:1340:ffff:ffff:ffff:ffff:ffff,HR +2001:67c:1348::,2001:67c:1348:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:134c::,2001:67c:134c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1350::,2001:67c:1350:ffff:ffff:ffff:ffff:ffff,CY +2001:67c:1354::,2001:67c:1354:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1358::,2001:67c:1358:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:135c::,2001:67c:135c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1360::,2001:67c:1360:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1364::,2001:67c:1364:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1368::,2001:67c:1368:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:136c::,2001:67c:136c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1370::,2001:67c:1370:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1374::,2001:67c:1374:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1378::,2001:67c:1378:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:137c::,2001:67c:137c:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:1380::,2001:67c:1380:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1384::,2001:67c:1384:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1388::,2001:67c:1388:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:138c::,2001:67c:138c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1390::,2001:67c:1390:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1394::,2001:67c:1394:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1398::,2001:67c:1398:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:139c::,2001:67c:139c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:13a0::,2001:67c:13a0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:13a8::,2001:67c:13a8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:13ac::,2001:67c:13ac:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:13b0::,2001:67c:13b0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:13b4::,2001:67c:13b4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:13b8::,2001:67c:13b8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:13bc::,2001:67c:13bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:13c0::,2001:67c:13c0:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:13c4::,2001:67c:13c4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:13c8::,2001:67c:13c8:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:13cc::,2001:67c:13cc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:13d0::,2001:67c:13d0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:13d4::,2001:67c:13d4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:13d8::,2001:67c:13d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:13e0::,2001:67c:13e0:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:13e4::,2001:67c:13e4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:13e8::,2001:67c:13e8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:13ec::,2001:67c:13ec:ffff:ffff:ffff:ffff:ffff,PT +2001:67c:13f0::,2001:67c:13f0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:13f4::,2001:67c:13f4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:13f8::,2001:67c:13f8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1400::,2001:67c:1407:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1420::,2001:67c:1427:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1440::,2001:67c:1447:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1460::,2001:67c:1467:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1480::,2001:67c:1480:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1484::,2001:67c:1484:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1488::,2001:67c:1488:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:148c::,2001:67c:148c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1490::,2001:67c:1490:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1494::,2001:67c:1494:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1498::,2001:67c:1498:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:149c::,2001:67c:149c:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:14a0::,2001:67c:14a0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:14a4::,2001:67c:14a4:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:14ac::,2001:67c:14ac:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:14b0::,2001:67c:14b0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:14b4::,2001:67c:14b4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:14b8::,2001:67c:14b8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:14bc::,2001:67c:14bc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:14c4::,2001:67c:14c4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:14d0::,2001:67c:14d0:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:14d4::,2001:67c:14d4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:14d8::,2001:67c:14d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:14dc::,2001:67c:14dc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:14e0::,2001:67c:14e7:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1500::,2001:67c:1500:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1504::,2001:67c:1504:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1508::,2001:67c:1508:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:150c::,2001:67c:150c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1510::,2001:67c:1510:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1514::,2001:67c:1514:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1518::,2001:67c:1518:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:151c::,2001:67c:151c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1520::,2001:67c:1520:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1524::,2001:67c:1524:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1528::,2001:67c:1528:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:152c::,2001:67c:152c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1530::,2001:67c:1530:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1534::,2001:67c:1534:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1538::,2001:67c:1538:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:153c::,2001:67c:153c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1540::,2001:67c:1540:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1544::,2001:67c:1544:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:154c::,2001:67c:154c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1554::,2001:67c:1554:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:1558::,2001:67c:1558:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:155c::,2001:67c:155c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1560::,2001:67c:1563:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1570::,2001:67c:1570:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1574::,2001:67c:1574:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1578::,2001:67c:1578:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:157c::,2001:67c:157c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1580::,2001:67c:1580:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1584::,2001:67c:1584:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:158c::,2001:67c:158c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1590::,2001:67c:1591:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1598::,2001:67c:1598:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:159c::,2001:67c:159c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:15a0::,2001:67c:15a3:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:15b0::,2001:67c:15b0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:15b8::,2001:67c:15b8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:15bc::,2001:67c:15bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:15c0::,2001:67c:15c0:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:15c4::,2001:67c:15c4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:15c8::,2001:67c:15c8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:15cc::,2001:67c:15cc:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:15d0::,2001:67c:15d0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:15d4::,2001:67c:15d4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:15d8::,2001:67c:15d8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:15dc::,2001:67c:15dc:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:15e0::,2001:67c:15e0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:15e4::,2001:67c:15e4:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:15e8::,2001:67c:15e8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:15ec::,2001:67c:15ec:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:15f0::,2001:67c:15f0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:15f4::,2001:67c:15f4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:15f8::,2001:67c:15f8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:15fc::,2001:67c:15fc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1600::,2001:67c:160f:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1640::,2001:67c:164f:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:1680::,2001:67c:1680:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1684::,2001:67c:1684:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:1688::,2001:67c:1688:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:168c::,2001:67c:168c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1690::,2001:67c:1690:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1694::,2001:67c:1694:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1698::,2001:67c:1698:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:169c::,2001:67c:169c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:16a0::,2001:67c:16a0:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:16a4::,2001:67c:16a4:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:16a8::,2001:67c:16a8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:16ac::,2001:67c:16ac:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:16b0::,2001:67c:16b0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:16b4::,2001:67c:16b4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:16b8::,2001:67c:16b8:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:16bc::,2001:67c:16bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:16c0::,2001:67c:16c0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:16c4::,2001:67c:16c4:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:16c8::,2001:67c:16c8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:16d0::,2001:67c:16d1:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:16d8::,2001:67c:16d8:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:16dc::,2001:67c:16dc:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:16e0::,2001:67c:16e0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:16e4::,2001:67c:16e4:ffff:ffff:ffff:ffff:ffff,HR +2001:67c:16e8::,2001:67c:16e8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:16ec::,2001:67c:16ec:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:16f0::,2001:67c:16f0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:16f4::,2001:67c:16f4:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:16f8::,2001:67c:16f8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:16fc::,2001:67c:16fc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1700::,2001:67c:1700:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1704::,2001:67c:1704:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1708::,2001:67c:1708:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:170c::,2001:67c:170c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1710::,2001:67c:1710:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1720::,2001:67c:1720:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1724::,2001:67c:1724:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1728::,2001:67c:1728:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:172c::,2001:67c:172c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1730::,2001:67c:1730:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1734::,2001:67c:1734:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1738::,2001:67c:1738:ffff:ffff:ffff:ffff:ffff,IL +2001:67c:173c::,2001:67c:173c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1740::,2001:67c:1740:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1744::,2001:67c:1744:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:1748::,2001:67c:1748:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:174c::,2001:67c:174c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1750::,2001:67c:1750:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1754::,2001:67c:1754:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1758::,2001:67c:1758:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:175c::,2001:67c:175c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1760::,2001:67c:1760:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:1764::,2001:67c:1764:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1768::,2001:67c:1768:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:176c::,2001:67c:176c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1770::,2001:67c:1770:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1774::,2001:67c:1774:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:177c::,2001:67c:177c:ffff:ffff:ffff:ffff:ffff,LT +2001:67c:1780::,2001:67c:1780:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1784::,2001:67c:1784:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1788::,2001:67c:1788:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:178c::,2001:67c:178c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1790::,2001:67c:1790:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1794::,2001:67c:1794:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1798::,2001:67c:1798:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:179c::,2001:67c:179c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17a0::,2001:67c:17a0:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:17a8::,2001:67c:17a8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17ac::,2001:67c:17ac:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17b0::,2001:67c:17b0:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:17b4::,2001:67c:17b4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:17b8::,2001:67c:17b8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:17bc::,2001:67c:17bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17c0::,2001:67c:17c0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17c4::,2001:67c:17c4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17c8::,2001:67c:17c8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:17cc::,2001:67c:17cc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17d0::,2001:67c:17d0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:17d4::,2001:67c:17d4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:17d8::,2001:67c:17d8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:17dc::,2001:67c:17dc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17e0::,2001:67c:17e0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17e4::,2001:67c:17e4:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:17e8::,2001:67c:17e8:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:17ec::,2001:67c:17ec:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:17f0::,2001:67c:17f0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17f4::,2001:67c:17f4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:17f8::,2001:67c:17f8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:17fc::,2001:67c:17fc:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1800::,2001:67c:1800:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1804::,2001:67c:1804:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1808::,2001:67c:1809:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1810::,2001:67c:1810:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1814::,2001:67c:1814:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1818::,2001:67c:1818:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:181c::,2001:67c:181c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1820::,2001:67c:1820:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1828::,2001:67c:1828:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:182c::,2001:67c:182c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1830::,2001:67c:1830:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1834::,2001:67c:1834:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1838::,2001:67c:1838:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:183c::,2001:67c:183c:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1840::,2001:67c:1840:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1844::,2001:67c:1844:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1848::,2001:67c:1848:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:184c::,2001:67c:184c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1850::,2001:67c:1850:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1854::,2001:67c:1854:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1858::,2001:67c:1858:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:185c::,2001:67c:185c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:1860::,2001:67c:1860:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1864::,2001:67c:1864:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1868::,2001:67c:1868:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:186c::,2001:67c:186c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1870::,2001:67c:1870:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1874::,2001:67c:1874:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1878::,2001:67c:1878:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:187c::,2001:67c:187c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1880::,2001:67c:1880:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1884::,2001:67c:1884:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1888::,2001:67c:1888:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:188c::,2001:67c:188c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1890::,2001:67c:1890:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1894::,2001:67c:1894:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1898::,2001:67c:1898:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:189c::,2001:67c:189c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:18a0::,2001:67c:18a0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:18a4::,2001:67c:18a4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:18a8::,2001:67c:18a8:ffff:ffff:ffff:ffff:ffff,BY +2001:67c:18ac::,2001:67c:18ac:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:18b0::,2001:67c:18b0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18b4::,2001:67c:18b4:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:18b8::,2001:67c:18b8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18bc::,2001:67c:18bc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18c0::,2001:67c:18c0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:18c4::,2001:67c:18c4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:18c8::,2001:67c:18c9:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:18d0::,2001:67c:18d0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:18d4::,2001:67c:18d4:ffff:ffff:ffff:ffff:ffff,NZ +2001:67c:18d8::,2001:67c:18d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:18dc::,2001:67c:18dc:ffff:ffff:ffff:ffff:ffff,LI +2001:67c:18e0::,2001:67c:18e0:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:18e4::,2001:67c:18e4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:18e8::,2001:67c:18e8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18ec::,2001:67c:18ec:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18f0::,2001:67c:18f0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:18f4::,2001:67c:18f4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:18f8::,2001:67c:18f8:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:18fc::,2001:67c:18fc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1900::,2001:67c:1903:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1910::,2001:67c:1910:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1918::,2001:67c:1918:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:191c::,2001:67c:191c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1920::,2001:67c:1920:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1924::,2001:67c:1924:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1928::,2001:67c:1928:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:192c::,2001:67c:192c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1930::,2001:67c:1933:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1940::,2001:67c:1940:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1944::,2001:67c:1944:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1948::,2001:67c:1948:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:194c::,2001:67c:194c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1950::,2001:67c:1950:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1954::,2001:67c:1954:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1958::,2001:67c:1958:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:195c::,2001:67c:195c:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:1960::,2001:67c:1960:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1964::,2001:67c:1964:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1968::,2001:67c:1968:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:196c::,2001:67c:196c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1970::,2001:67c:1970:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1974::,2001:67c:1974:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1978::,2001:67c:1978:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:197c::,2001:67c:197c:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:1980::,2001:67c:1980:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1984::,2001:67c:1984:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:1988::,2001:67c:1988:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:198c::,2001:67c:198c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1990::,2001:67c:1990:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1994::,2001:67c:1994:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1998::,2001:67c:1998:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:19a0::,2001:67c:19a0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:19a4::,2001:67c:19a4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:19a8::,2001:67c:19a8:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:19ac::,2001:67c:19ac:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:19b0::,2001:67c:19b3:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:19c0::,2001:67c:19c0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:19c4::,2001:67c:19c4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:19c8::,2001:67c:19c8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:19cc::,2001:67c:19cc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:19d0::,2001:67c:19d0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:19d4::,2001:67c:19d4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:19d8::,2001:67c:19d8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:19dc::,2001:67c:19dc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:19e0::,2001:67c:19e0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:19e4::,2001:67c:19e4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:19e8::,2001:67c:19e8:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:19ec::,2001:67c:19ec:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:19f0::,2001:67c:19f0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:19f4::,2001:67c:19f4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:19f8::,2001:67c:19f8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:19fc::,2001:67c:19fc:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1a00::,2001:67c:1a3f:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1b00::,2001:67c:1b00:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b04::,2001:67c:1b04:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b08::,2001:67c:1b08:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1b0c::,2001:67c:1b0c:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:1b10::,2001:67c:1b10:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b14::,2001:67c:1b14:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1b18::,2001:67c:1b18:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b1c::,2001:67c:1b1c:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:1b20::,2001:67c:1b20:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1b24::,2001:67c:1b24:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1b30::,2001:67c:1b30:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1b34::,2001:67c:1b34:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1b3c::,2001:67c:1b3c:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:1b40::,2001:67c:1b43:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1b50::,2001:67c:1b50:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1b54::,2001:67c:1b54:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1b58::,2001:67c:1b59:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:1b60::,2001:67c:1b60:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1b64::,2001:67c:1b64:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1b6c::,2001:67c:1b6c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1b70::,2001:67c:1b70:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:1b78::,2001:67c:1b78:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b7c::,2001:67c:1b7c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b80::,2001:67c:1b80:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1b84::,2001:67c:1b84:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1b88::,2001:67c:1b88:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1b8c::,2001:67c:1b8c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1b90::,2001:67c:1b90:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:1b94::,2001:67c:1b94:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1b98::,2001:67c:1b98:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1b9c::,2001:67c:1b9c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1ba4::,2001:67c:1ba4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1ba8::,2001:67c:1ba8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1bb0::,2001:67c:1bb0:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1bb4::,2001:67c:1bb4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1bb8::,2001:67c:1bb8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1bbc::,2001:67c:1bbc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:1bc0::,2001:67c:1bc0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1bc4::,2001:67c:1bc4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:1bc8::,2001:67c:1bc8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1bcc::,2001:67c:1bcc:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1bd0::,2001:67c:1bd0:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:1bd4::,2001:67c:1bd4:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:1bd8::,2001:67c:1bd8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1bdc::,2001:67c:1bdc:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:1be0::,2001:67c:1be0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:1be4::,2001:67c:1be4:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:1be8::,2001:67c:1be8:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:1bec::,2001:67c:1bec:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:1bf4::,2001:67c:1bf4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:1bf8::,2001:67c:1bf8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:1bfc::,2001:67c:1bfc:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:1c00::,2001:67c:1cff:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2004::,2001:67c:2004:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2008::,2001:67c:2008:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:200c::,2001:67c:200c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2010::,2001:67c:2010:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2014::,2001:67c:2014:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2018::,2001:67c:2018:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2020::,2001:67c:2020:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2024::,2001:67c:2024:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2028::,2001:67c:2028:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2030::,2001:67c:2030:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2034::,2001:67c:2034:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2038::,2001:67c:2038:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:203c::,2001:67c:203c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2040::,2001:67c:2040:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:2044::,2001:67c:2044:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2048::,2001:67c:2048:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:204c::,2001:67c:204c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2050::,2001:67c:2050:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:205c::,2001:67c:205c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2060::,2001:67c:2060:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2064::,2001:67c:2064:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2068::,2001:67c:2068:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:206c::,2001:67c:206c:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2070::,2001:67c:2070:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2074::,2001:67c:2074:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2078::,2001:67c:2078:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:207c::,2001:67c:207c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2080::,2001:67c:2080:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2084::,2001:67c:2084:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2088::,2001:67c:2088:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:208c::,2001:67c:208c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:20a0::,2001:67c:20a1:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:20a8::,2001:67c:20a8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:20ac::,2001:67c:20ac:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:20b0::,2001:67c:20b0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:20b4::,2001:67c:20b4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:20b8::,2001:67c:20b9:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:20c0::,2001:67c:20c0:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:20c4::,2001:67c:20c4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:20c8::,2001:67c:20c8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:20cc::,2001:67c:20cc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:20d0::,2001:67c:20d1:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:20d8::,2001:67c:20d8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:20dc::,2001:67c:20dc:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:20e0::,2001:67c:20e0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:20e4::,2001:67c:20e4:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:20e8::,2001:67c:20e8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:20ec::,2001:67c:20ec:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:20f0::,2001:67c:20f0:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:20f4::,2001:67c:20f4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:20f8::,2001:67c:20f8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2100::,2001:67c:2100:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2104::,2001:67c:2104:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2108::,2001:67c:2108:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:210c::,2001:67c:210c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2110::,2001:67c:2110:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2114::,2001:67c:2114:ffff:ffff:ffff:ffff:ffff,IS +2001:67c:2118::,2001:67c:2118:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:211c::,2001:67c:211c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2120::,2001:67c:2120:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2124::,2001:67c:2124:ffff:ffff:ffff:ffff:ffff,HU +2001:67c:2128::,2001:67c:2128:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:212c::,2001:67c:212c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2130::,2001:67c:2130:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2134::,2001:67c:2134:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2138::,2001:67c:2138:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:213c::,2001:67c:213c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2144::,2001:67c:2144:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:2148::,2001:67c:2148:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:214c::,2001:67c:214c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2150::,2001:67c:2150:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2154::,2001:67c:2154:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:2158::,2001:67c:2158:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:215c::,2001:67c:215c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2160::,2001:67c:2160:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2164::,2001:67c:2164:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:2168::,2001:67c:2168:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:216c::,2001:67c:216c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2170::,2001:67c:2170:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2174::,2001:67c:2174:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2178::,2001:67c:2178:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:217c::,2001:67c:217c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2180::,2001:67c:2180:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2188::,2001:67c:2188:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:218c::,2001:67c:218c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2190::,2001:67c:2190:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2194::,2001:67c:2194:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2198::,2001:67c:2198:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:219c::,2001:67c:219c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:21a0::,2001:67c:21a0:ffff:ffff:ffff:ffff:ffff,IT +2001:67c:21a4::,2001:67c:21a4:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:21a8::,2001:67c:21a8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:21ac::,2001:67c:21ac:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:21b0::,2001:67c:21b0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:21b4::,2001:67c:21b4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:21b8::,2001:67c:21b8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:21c0::,2001:67c:21c0:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:21c4::,2001:67c:21c4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:21c8::,2001:67c:21c8:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:21cc::,2001:67c:21cc:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:21d0::,2001:67c:21d0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:21d8::,2001:67c:21d8:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:21dc::,2001:67c:21dc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:21e0::,2001:67c:21e0:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:21e4::,2001:67c:21e4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:21e8::,2001:67c:21e8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:21ec::,2001:67c:21ec:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:21f0::,2001:67c:21f0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:21f4::,2001:67c:21f4:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:21f8::,2001:67c:21f8:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:21fc::,2001:67c:21fc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2200::,2001:67c:2200:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2204::,2001:67c:2204:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2208::,2001:67c:2208:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:220c::,2001:67c:220c:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:2210::,2001:67c:2210:ffff:ffff:ffff:ffff:ffff,RS +2001:67c:2214::,2001:67c:2214:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2218::,2001:67c:2219:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2220::,2001:67c:2220:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2224::,2001:67c:2224:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2228::,2001:67c:2228:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:222c::,2001:67c:222c:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:2234::,2001:67c:2234:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2238::,2001:67c:2238:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:223c::,2001:67c:223c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2240::,2001:67c:2240:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2244::,2001:67c:2244:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2248::,2001:67c:2248:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2250::,2001:67c:2250:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2254::,2001:67c:2254:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2258::,2001:67c:2258:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:225c::,2001:67c:225c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2260::,2001:67c:2260:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2264::,2001:67c:2264:ffff:ffff:ffff:ffff:ffff,KG +2001:67c:2268::,2001:67c:2268:ffff:ffff:ffff:ffff:ffff,BY +2001:67c:226c::,2001:67c:226c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2270::,2001:67c:2270:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2274::,2001:67c:2274:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2278::,2001:67c:2278:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:227c::,2001:67c:227c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2280::,2001:67c:2280:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2284::,2001:67c:2284:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2288::,2001:67c:2288:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:228c::,2001:67c:228c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2290::,2001:67c:2290:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2294::,2001:67c:2294:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:2298::,2001:67c:2298:ffff:ffff:ffff:ffff:ffff,US +2001:67c:229c::,2001:67c:229c:ffff:ffff:ffff:ffff:ffff,GR +2001:67c:22a0::,2001:67c:22a0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:22a4::,2001:67c:22a4:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:22a8::,2001:67c:22a8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:22b0::,2001:67c:22b0:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:22b4::,2001:67c:22b4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:22b8::,2001:67c:22b8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:22bc::,2001:67c:22bc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:22c0::,2001:67c:22c0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:22c4::,2001:67c:22c4:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:22c8::,2001:67c:22c8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:22cc::,2001:67c:22cc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:22d0::,2001:67c:22d0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:22d8::,2001:67c:22d8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:22dc::,2001:67c:22dc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:22e0::,2001:67c:22e0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:22e4::,2001:67c:22e4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:22e8::,2001:67c:22e8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:22ec::,2001:67c:22ec:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:22f0::,2001:67c:22f0:ffff:ffff:ffff:ffff:ffff,RS +2001:67c:22f8::,2001:67c:22f8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:22fc::,2001:67c:22fc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2300::,2001:67c:2300:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2304::,2001:67c:2304:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2308::,2001:67c:2308:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:230c::,2001:67c:230c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2310::,2001:67c:2310:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2314::,2001:67c:2314:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2318::,2001:67c:2318:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:231c::,2001:67c:231c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2320::,2001:67c:2320:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2324::,2001:67c:2324:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2328::,2001:67c:2328:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:232c::,2001:67c:232c:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:2330::,2001:67c:2330:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2334::,2001:67c:2334:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2338::,2001:67c:2338:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:233c::,2001:67c:233c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2340::,2001:67c:2340:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2348::,2001:67c:2348:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:234c::,2001:67c:234c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2354::,2001:67c:2354:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2358::,2001:67c:2358:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:235c::,2001:67c:235c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2360::,2001:67c:2360:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2364::,2001:67c:2364:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2368::,2001:67c:2368:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:236c::,2001:67c:236c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2370::,2001:67c:2370:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2374::,2001:67c:2374:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2378::,2001:67c:2378:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:237c::,2001:67c:237c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2380::,2001:67c:2380:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2384::,2001:67c:2384:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2388::,2001:67c:2388:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:238c::,2001:67c:238c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2394::,2001:67c:2394:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:239c::,2001:67c:239c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:23a0::,2001:67c:23a0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:23a4::,2001:67c:23a4:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:23a8::,2001:67c:23a8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:23b0::,2001:67c:23b0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:23b4::,2001:67c:23b4:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:23b8::,2001:67c:23b8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:23bc::,2001:67c:23bc:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:23c0::,2001:67c:23c0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:23c4::,2001:67c:23c4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:23c8::,2001:67c:23c8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:23cc::,2001:67c:23cc:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:23d4::,2001:67c:23d4:ffff:ffff:ffff:ffff:ffff,EE +2001:67c:23d8::,2001:67c:23d9:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:23e4::,2001:67c:23e4:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:23e8::,2001:67c:23e8:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:23ec::,2001:67c:23ec:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:23f0::,2001:67c:23f0:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:23f4::,2001:67c:23f4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:23f8::,2001:67c:23f8:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:23fc::,2001:67c:23fc:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:2400::,2001:67c:2400:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2404::,2001:67c:2404:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2408::,2001:67c:2408:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:240c::,2001:67c:240c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2410::,2001:67c:2410:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:2414::,2001:67c:2414:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2418::,2001:67c:2418:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2420::,2001:67c:2420:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2424::,2001:67c:2424:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2428::,2001:67c:2428:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:242c::,2001:67c:242c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2430::,2001:67c:2433:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2440::,2001:67c:2440:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2444::,2001:67c:2444:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2448::,2001:67c:2448:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:244c::,2001:67c:244c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2454::,2001:67c:2454:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:245c::,2001:67c:245c:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:2460::,2001:67c:2460:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2464::,2001:67c:2464:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2468::,2001:67c:2468:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:246c::,2001:67c:246c:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2470::,2001:67c:2470:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2474::,2001:67c:2474:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2478::,2001:67c:2478:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:247c::,2001:67c:247c:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2480::,2001:67c:2480:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2484::,2001:67c:2484:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2488::,2001:67c:2488:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:248c::,2001:67c:248c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2490::,2001:67c:2490:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2494::,2001:67c:2494:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2498::,2001:67c:2498:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:249c::,2001:67c:249c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:24a0::,2001:67c:24a0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:24a4::,2001:67c:24a4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:24a8::,2001:67c:24a8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:24ac::,2001:67c:24ac:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:24b4::,2001:67c:24b4:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:24b8::,2001:67c:24b8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:24bc::,2001:67c:24bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:24c4::,2001:67c:24c4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:24c8::,2001:67c:24c8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:24cc::,2001:67c:24cc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:24d0::,2001:67c:24d0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:24d4::,2001:67c:24d4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:24d8::,2001:67c:24d8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:24dc::,2001:67c:24dc:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:24e0::,2001:67c:24e0:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:24e4::,2001:67c:24e4:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:24e8::,2001:67c:24e9:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:24f0::,2001:67c:24f0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:24f4::,2001:67c:24f4:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:24f8::,2001:67c:24f8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:24fc::,2001:67c:24fc:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2500::,2001:67c:2507:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2520::,2001:67c:2520:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2524::,2001:67c:2524:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2528::,2001:67c:2528:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:252c::,2001:67c:252c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2534::,2001:67c:2534:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2538::,2001:67c:2538:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:253c::,2001:67c:253c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2540::,2001:67c:2540:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2544::,2001:67c:2544:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2548::,2001:67c:2548:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:254c::,2001:67c:254c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2550::,2001:67c:2550:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2554::,2001:67c:2554:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2558::,2001:67c:2558:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:255c::,2001:67c:255c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2560::,2001:67c:2560:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2564::,2001:67c:2564:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:256c::,2001:67c:256c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2574::,2001:67c:2574:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2578::,2001:67c:2578:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:257c::,2001:67c:257c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2580::,2001:67c:2580:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2584::,2001:67c:2584:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2588::,2001:67c:2588:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2590::,2001:67c:2590:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2594::,2001:67c:2594:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2598::,2001:67c:2598:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:259c::,2001:67c:259c:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:25a0::,2001:67c:25a0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:25a4::,2001:67c:25a4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:25a8::,2001:67c:25a8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:25ac::,2001:67c:25ac:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:25b0::,2001:67c:25b0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:25b4::,2001:67c:25b4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:25b8::,2001:67c:25b8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:25bc::,2001:67c:25bc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:25c0::,2001:67c:25c0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:25c4::,2001:67c:25c4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:25cc::,2001:67c:25cc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:25d0::,2001:67c:25d0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:25d4::,2001:67c:25d4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:25d8::,2001:67c:25d8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:25dc::,2001:67c:25dc:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:25e4::,2001:67c:25e4:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:25f4::,2001:67c:25f4:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:25fc::,2001:67c:25fc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2600::,2001:67c:2600:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2604::,2001:67c:2604:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:260c::,2001:67c:260c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2610::,2001:67c:2610:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2614::,2001:67c:2614:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2618::,2001:67c:2618:ffff:ffff:ffff:ffff:ffff,EE +2001:67c:261c::,2001:67c:261c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2620::,2001:67c:2620:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2624::,2001:67c:2624:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:262c::,2001:67c:262c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2630::,2001:67c:2630:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2634::,2001:67c:2634:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2638::,2001:67c:2638:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:263c::,2001:67c:263c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2640::,2001:67c:2640:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:2644::,2001:67c:2644:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:264c::,2001:67c:264c:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2650::,2001:67c:2650:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2654::,2001:67c:2654:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:265c::,2001:67c:265c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2660::,2001:67c:2660:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2664::,2001:67c:2664:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2668::,2001:67c:2668:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:266c::,2001:67c:266c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2670::,2001:67c:2670:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:2674::,2001:67c:2674:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2678::,2001:67c:2678:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:267c::,2001:67c:267c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2684::,2001:67c:2684:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2688::,2001:67c:2688:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:268c::,2001:67c:268c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2690::,2001:67c:2690:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:2694::,2001:67c:2694:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2698::,2001:67c:2698:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:269c::,2001:67c:269c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:26a0::,2001:67c:26a0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:26a4::,2001:67c:26a4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:26ac::,2001:67c:26ac:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:26b0::,2001:67c:26b0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:26b4::,2001:67c:26b4:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:26b8::,2001:67c:26b8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:26bc::,2001:67c:26bc:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:26c0::,2001:67c:26c3:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:26d0::,2001:67c:26d0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:26d4::,2001:67c:26d4:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:26d8::,2001:67c:26d8:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:26dc::,2001:67c:26dc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:26e0::,2001:67c:26e0:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:26e4::,2001:67c:26e4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:26e8::,2001:67c:26e8:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:26ec::,2001:67c:26ec:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:26f0::,2001:67c:26f0:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:26f4::,2001:67c:26f4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:26f8::,2001:67c:26f8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:26fc::,2001:67c:26fc:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2700::,2001:67c:2700:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:2704::,2001:67c:2704:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2708::,2001:67c:2708:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:270c::,2001:67c:270c:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2710::,2001:67c:2710:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2714::,2001:67c:2714:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2718::,2001:67c:2718:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:271c::,2001:67c:271c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2720::,2001:67c:2720:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2724::,2001:67c:2724:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2728::,2001:67c:2728:ffff:ffff:ffff:ffff:ffff,IR +2001:67c:272c::,2001:67c:272c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2730::,2001:67c:2730:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2734::,2001:67c:2734:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2738::,2001:67c:2738:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:273c::,2001:67c:273c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2740::,2001:67c:2740:ffff:ffff:ffff:ffff:ffff,SK +2001:67c:2744::,2001:67c:2744:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2748::,2001:67c:2748:ffff:ffff:ffff:ffff:ffff,GR +2001:67c:274c::,2001:67c:274c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2758::,2001:67c:2758:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:275c::,2001:67c:275c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2760::,2001:67c:2760:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2764::,2001:67c:2764:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2768::,2001:67c:2768:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:276c::,2001:67c:276c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2770::,2001:67c:2770:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2774::,2001:67c:2774:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:2778::,2001:67c:2778:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:277c::,2001:67c:277c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2780::,2001:67c:2780:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2784::,2001:67c:2784:ffff:ffff:ffff:ffff:ffff,FI +2001:67c:2788::,2001:67c:2788:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:278c::,2001:67c:278c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2790::,2001:67c:2790:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2794::,2001:67c:2794:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2798::,2001:67c:2798:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:27c0::,2001:67c:27c0:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:27c4::,2001:67c:27c4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:27c8::,2001:67c:27c8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:27cc::,2001:67c:27cc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:27d0::,2001:67c:27d0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:27d4::,2001:67c:27d4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:27d8::,2001:67c:27d8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:27dc::,2001:67c:27dc:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:27e0::,2001:67c:27e0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:27e4::,2001:67c:27e4:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:27e8::,2001:67c:27e8:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:27ec::,2001:67c:27ec:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:27f0::,2001:67c:27f0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:27f4::,2001:67c:27f4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:27f8::,2001:67c:27f8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:27fc::,2001:67c:27fc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2800::,2001:67c:2800:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2804::,2001:67c:2804:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2808::,2001:67c:2808:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:280c::,2001:67c:280c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2810::,2001:67c:2810:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2814::,2001:67c:2814:ffff:ffff:ffff:ffff:ffff,LI +2001:67c:2818::,2001:67c:2818:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:281c::,2001:67c:281c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2820::,2001:67c:2820:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2824::,2001:67c:2824:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2828::,2001:67c:2828:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:282c::,2001:67c:282c:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:2830::,2001:67c:2830:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2834::,2001:67c:2834:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2838::,2001:67c:2838:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:283c::,2001:67c:283c:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:2840::,2001:67c:2840:ffff:ffff:ffff:ffff:ffff,IL +2001:67c:2844::,2001:67c:2844:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2848::,2001:67c:2848:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:284c::,2001:67c:284c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2850::,2001:67c:2850:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2854::,2001:67c:2854:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:285c::,2001:67c:285c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2860::,2001:67c:2860:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2864::,2001:67c:2864:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2868::,2001:67c:2868:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:286c::,2001:67c:286c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2870::,2001:67c:2870:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2874::,2001:67c:2874:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2878::,2001:67c:2878:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:287c::,2001:67c:287c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2880::,2001:67c:2880:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2884::,2001:67c:2884:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2888::,2001:67c:2889:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2890::,2001:67c:2890:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2894::,2001:67c:2894:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2898::,2001:67c:2898:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:289c::,2001:67c:289c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:28a0::,2001:67c:28a0:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:28a4::,2001:67c:28a4:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:28a8::,2001:67c:28a8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:28ac::,2001:67c:28ac:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:28b0::,2001:67c:28b0:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:28b4::,2001:67c:28b4:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:28b8::,2001:67c:28b8:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:28bc::,2001:67c:28bc:ffff:ffff:ffff:ffff:ffff,HU +2001:67c:28c0::,2001:67c:28c0:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:28c4::,2001:67c:28c4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:28cc::,2001:67c:28cc:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:28d0::,2001:67c:28d0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:28d8::,2001:67c:28d8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:28e0::,2001:67c:28e0:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:28e4::,2001:67c:28e4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:28e8::,2001:67c:28e8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:28f0::,2001:67c:28f0:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:28f4::,2001:67c:28f4:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:28f8::,2001:67c:28f8:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:28fc::,2001:67c:28fc:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2900::,2001:67c:291f:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2980::,2001:67c:2980:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2984::,2001:67c:2984:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2988::,2001:67c:2989:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:2994::,2001:67c:2994:ffff:ffff:ffff:ffff:ffff,SA +2001:67c:2998::,2001:67c:2998:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:299c::,2001:67c:299c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:29a0::,2001:67c:29a0:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:29a8::,2001:67c:29a8:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:29ac::,2001:67c:29ac:ffff:ffff:ffff:ffff:ffff,CY +2001:67c:29b0::,2001:67c:29b1:ffff:ffff:ffff:ffff:ffff,CY +2001:67c:29bc::,2001:67c:29bc:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:29c0::,2001:67c:29c1:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:29c8::,2001:67c:29c8:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:29cc::,2001:67c:29cc:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:29d0::,2001:67c:29d0:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:29d4::,2001:67c:29d4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:29d8::,2001:67c:29d8:ffff:ffff:ffff:ffff:ffff,AE +2001:67c:29dc::,2001:67c:29dc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:29e0::,2001:67c:29e0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:29e4::,2001:67c:29e4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:29e8::,2001:67c:29e8:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:29ec::,2001:67c:29ec:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:29f0::,2001:67c:29f0:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:29f4::,2001:67c:29f4:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:29f8::,2001:67c:29f8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:29fc::,2001:67c:29fc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2a00::,2001:67c:2a00:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2a04::,2001:67c:2a04:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2a08::,2001:67c:2a08:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2a0c::,2001:67c:2a0c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a14::,2001:67c:2a14:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a18::,2001:67c:2a18:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2a24::,2001:67c:2a24:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2a28::,2001:67c:2a28:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2a2c::,2001:67c:2a2c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2a30::,2001:67c:2a30:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a34::,2001:67c:2a34:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a38::,2001:67c:2a38:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2a3c::,2001:67c:2a3c:ffff:ffff:ffff:ffff:ffff,ES +2001:67c:2a40::,2001:67c:2a40:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2a44::,2001:67c:2a44:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2a48::,2001:67c:2a48:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2a4c::,2001:67c:2a4c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2a50::,2001:67c:2a50:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2a54::,2001:67c:2a54:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a58::,2001:67c:2a58:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:2a5c::,2001:67c:2a5c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2a64::,2001:67c:2a64:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2a68::,2001:67c:2a68:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2a6c::,2001:67c:2a6c:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:2a70::,2001:67c:2a70:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2a74::,2001:67c:2a74:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2a78::,2001:67c:2a78:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2a7c::,2001:67c:2a7c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2a80::,2001:67c:2a80:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2a84::,2001:67c:2a84:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2a88::,2001:67c:2a88:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:2a8c::,2001:67c:2a8c:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2a90::,2001:67c:2a90:ffff:ffff:ffff:ffff:ffff,NO +2001:67c:2a94::,2001:67c:2a94:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2a98::,2001:67c:2a98:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2a9c::,2001:67c:2a9c:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2aa0::,2001:67c:2aa0:ffff:ffff:ffff:ffff:ffff,LU +2001:67c:2aa4::,2001:67c:2aa4:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2aa8::,2001:67c:2aa8:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2aac::,2001:67c:2aac:ffff:ffff:ffff:ffff:ffff,IS +2001:67c:2ab0::,2001:67c:2ab0:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2ab4::,2001:67c:2ab4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2ab8::,2001:67c:2ab8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2abc::,2001:67c:2abc:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2ac0::,2001:67c:2ac0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2ac4::,2001:67c:2ac4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2ac8::,2001:67c:2ac8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2acc::,2001:67c:2acc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2ad0::,2001:67c:2ad0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2ad4::,2001:67c:2ad4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2ad8::,2001:67c:2ad8:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2adc::,2001:67c:2adc:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2ae0::,2001:67c:2ae0:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2ae4::,2001:67c:2ae4:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2ae8::,2001:67c:2ae8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2aec::,2001:67c:2aec:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2af0::,2001:67c:2af0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2af4::,2001:67c:2af4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2afc::,2001:67c:2afc:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2b04::,2001:67c:2b04:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2b08::,2001:67c:2b08:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b0c::,2001:67c:2b0c:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2b10::,2001:67c:2b10:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2b14::,2001:67c:2b14:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2b18::,2001:67c:2b18:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2b1c::,2001:67c:2b1c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2b20::,2001:67c:2b20:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2b24::,2001:67c:2b24:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b28::,2001:67c:2b28:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2b2c::,2001:67c:2b2c:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2b30::,2001:67c:2b30:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2b34::,2001:67c:2b34:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b3c::,2001:67c:2b3c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2b40::,2001:67c:2b40:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2b44::,2001:67c:2b44:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2b48::,2001:67c:2b48:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b4c::,2001:67c:2b4c:ffff:ffff:ffff:ffff:ffff,CZ +2001:67c:2b50::,2001:67c:2b50:ffff:ffff:ffff:ffff:ffff,AT +2001:67c:2b54::,2001:67c:2b54:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2b58::,2001:67c:2b58:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b5c::,2001:67c:2b5c:ffff:ffff:ffff:ffff:ffff,FR +2001:67c:2b60::,2001:67c:2b60:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2b64::,2001:67c:2b64:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2b68::,2001:67c:2b68:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2b6c::,2001:67c:2b6c:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b70::,2001:67c:2b70:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2b74::,2001:67c:2b74:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2b78::,2001:67c:2b79:ffff:ffff:ffff:ffff:ffff,GR +2001:67c:2b80::,2001:67c:2b80:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2b84::,2001:67c:2b84:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2b88::,2001:67c:2b88:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2b8c::,2001:67c:2b8c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2b90::,2001:67c:2b90:ffff:ffff:ffff:ffff:ffff,SI +2001:67c:2b94::,2001:67c:2b94:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2b98::,2001:67c:2b98:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2b9c::,2001:67c:2b9c:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2ba0::,2001:67c:2ba0:ffff:ffff:ffff:ffff:ffff,TR +2001:67c:2ba4::,2001:67c:2ba4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2ba8::,2001:67c:2ba8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2bac::,2001:67c:2bac:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2bb4::,2001:67c:2bb4:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2bb8::,2001:67c:2bb8:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2bbc::,2001:67c:2bbc:ffff:ffff:ffff:ffff:ffff,RO +2001:67c:2bc0::,2001:67c:2bc0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2bc4::,2001:67c:2bc4:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2bc8::,2001:67c:2bc8:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2bcc::,2001:67c:2bcc:ffff:ffff:ffff:ffff:ffff,LV +2001:67c:2bd0::,2001:67c:2bd0:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2bd4::,2001:67c:2bd4:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2bd8::,2001:67c:2bd8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2bdc::,2001:67c:2bdc:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2be4::,2001:67c:2be4:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2be8::,2001:67c:2be8:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2bec::,2001:67c:2bec:ffff:ffff:ffff:ffff:ffff,PL +2001:67c:2bf0::,2001:67c:2bf0:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2bf4::,2001:67c:2bf4:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2bf8::,2001:67c:2bf8:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2bfc::,2001:67c:2bfc:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2c00::,2001:67c:2c00:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2c04::,2001:67c:2c04:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2c08::,2001:67c:2c08:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c0c::,2001:67c:2c0c:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c10::,2001:67c:2c10:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c14::,2001:67c:2c14:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c18::,2001:67c:2c18:ffff:ffff:ffff:ffff:ffff,SE +2001:67c:2c1c::,2001:67c:2c1c:ffff:ffff:ffff:ffff:ffff,RU +2001:67c:2c20::,2001:67c:2c20:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c24::,2001:67c:2c24:ffff:ffff:ffff:ffff:ffff,NL +2001:67c:2c28::,2001:67c:2c28:ffff:ffff:ffff:ffff:ffff,CH +2001:67c:2c2c::,2001:67c:2c2c:ffff:ffff:ffff:ffff:ffff,HU +2001:67c:2c30::,2001:67c:2c30:ffff:ffff:ffff:ffff:ffff,DE +2001:680::,2001:680:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:688::,2001:688:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:690::,2001:697:ffff:ffff:ffff:ffff:ffff:ffff,PT +2001:6a0::,2001:6a0:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:6a8::,2001:6a8:ffff:ffff:ffff:ffff:ffff:ffff,BE +2001:6b0::,2001:6b0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:6b8::,2001:6b8:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:6c8::,2001:6cf:ffff:ffff:ffff:ffff:ffff:ffff,DK +2001:6d0::,2001:6d0:ffff:ffff:ffff:ffff:ffff:ffff,RU +2001:6d8::,2001:6df:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:6e0::,2001:6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:6e8::,2001:6ef:ffff:ffff:ffff:ffff:ffff:ffff,FI +2001:6f0::,2001:6f7:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:6f8::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:700::,2001:700:ffff:ffff:ffff:ffff:ffff:ffff,NO +2001:708::,2001:708:ffff:ffff:ffff:ffff:ffff:ffff,FI +2001:710::,2001:710:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:718::,2001:718:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:720::,2001:720:ffff:ffff:ffff:ffff:ffff:ffff,ES +2001:728::,2001:728:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:730::,2001:737:ffff:ffff:ffff:ffff:ffff:ffff,AT +2001:738::,2001:738:ffff:ffff:ffff:ffff:ffff:ffff,HU +2001:748::,2001:748:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:750::,2001:750:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:758::,2001:758:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:760::,2001:760:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:768::,2001:768:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:770::,2001:770:ffff:ffff:ffff:ffff:ffff:ffff,IE +2001:778::,2001:77f:ffff:ffff:ffff:ffff:ffff:ffff,LT +2001:780::,2001:787:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:788::,2001:78f:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:790::,2001:790:ffff:ffff:ffff:ffff:ffff:ffff,IR +2001:798::,2001:798:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:7a0::,2001:7a0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:7a8::,2001:7a8:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:7b0::,2001:7b0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:7b8::,2001:7b8:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:7c0::,2001:7c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:7c8::,2001:7c8:ffff:ffff:ffff:ffff:ffff:ffff,IE +2001:7d0::,2001:7d0:ffff:ffff:ffff:ffff:ffff:ffff,EE +2001:7d8::,2001:7d8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:7e0::,2001:7e0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:7e8::,2001:7e8:ffff:ffff:ffff:ffff:ffff:ffff,LU +2001:7f8::,2001:7f8::ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:1::,2001:7f8:1:ffff:ffff:ffff:ffff:ffff,NL +2001:7f8:2::,2001:7f8:2:ffff:ffff:ffff:ffff:ffff,IT +2001:7f8:3::,2001:7f8:5:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:6::,2001:7f8:6:ffff:ffff:ffff:ffff:ffff,BG +2001:7f8:7::,2001:7f8:7:ffff:ffff:ffff:ffff:ffff,FI +2001:7f8:8::,2001:7f8:8:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:9::,2001:7f8:9:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:a::,2001:7f8:a:ffff:ffff:ffff:ffff:ffff,PT +2001:7f8:b::,2001:7f8:b:ffff:ffff:ffff:ffff:ffff,IT +2001:7f8:c::,2001:7f8:c:ffff:ffff:ffff:ffff:ffff,CH +2001:7f8:d::,2001:7f8:d:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:e::,2001:7f8:e:ffff:ffff:ffff:ffff:ffff,NL +2001:7f8:f::,2001:7f8:f:ffff:ffff:ffff:ffff:ffff,ES +2001:7f8:10::,2001:7f8:10:ffff:ffff:ffff:ffff:ffff,IT +2001:7f8:12::,2001:7f8:12:ffff:ffff:ffff:ffff:ffff,NO +2001:7f8:13::,2001:7f8:13:ffff:ffff:ffff:ffff:ffff,NL +2001:7f8:14::,2001:7f8:14:ffff:ffff:ffff:ffff:ffff,CZ +2001:7f8:15::,2001:7f8:15:ffff:ffff:ffff:ffff:ffff,EE +2001:7f8:16::,2001:7f8:16:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:17::,2001:7f8:17:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:18::,2001:7f8:18:ffff:ffff:ffff:ffff:ffff,IE +2001:7f8:19::,2001:7f8:19:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:1b::,2001:7f8:1b:ffff:ffff:ffff:ffff:ffff,BE +2001:7f8:1c::,2001:7f8:1c:ffff:ffff:ffff:ffff:ffff,CH +2001:7f8:1d::,2001:7f8:1d:ffff:ffff:ffff:ffff:ffff,FI +2001:7f8:1e::,2001:7f8:1e:ffff:ffff:ffff:ffff:ffff,RS +2001:7f8:1f::,2001:7f8:1f:ffff:ffff:ffff:ffff:ffff,DK +2001:7f8:20::,2001:7f8:20:ffff:ffff:ffff:ffff:ffff,RU +2001:7f8:21::,2001:7f8:21:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:23::,2001:7f8:23:ffff:ffff:ffff:ffff:ffff,IT +2001:7f8:24::,2001:7f8:24:ffff:ffff:ffff:ffff:ffff,CH +2001:7f8:25::,2001:7f8:25:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:26::,2001:7f8:26:ffff:ffff:ffff:ffff:ffff,BE +2001:7f8:27::,2001:7f8:27:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:28::,2001:7f8:28:ffff:ffff:ffff:ffff:ffff,HR +2001:7f8:29::,2001:7f8:29:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:2a::,2001:7f8:2a:ffff:ffff:ffff:ffff:ffff,ES +2001:7f8:2d::,2001:7f8:2d:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:2f::,2001:7f8:2f:ffff:ffff:ffff:ffff:ffff,SK +2001:7f8:30::,2001:7f8:30:ffff:ffff:ffff:ffff:ffff,AT +2001:7f8:31::,2001:7f8:31:ffff:ffff:ffff:ffff:ffff,NL +2001:7f8:33::,2001:7f8:33:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:34::,2001:7f8:34:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:35::,2001:7f8:35:ffff:ffff:ffff:ffff:ffff,HU +2001:7f8:37::,2001:7f8:38:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:39::,2001:7f8:39:ffff:ffff:ffff:ffff:ffff,EE +2001:7f8:3a::,2001:7f8:3a:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:3b::,2001:7f8:3b:ffff:ffff:ffff:ffff:ffff,IL +2001:7f8:3d::,2001:7f8:3d:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:3e::,2001:7f8:3e:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:41::,2001:7f8:41:ffff:ffff:ffff:ffff:ffff,NO +2001:7f8:42::,2001:7f8:42:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:43::,2001:7f8:43:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:44::,2001:7f8:44:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:45::,2001:7f8:45:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:46::,2001:7f8:46:ffff:ffff:ffff:ffff:ffff,SI +2001:7f8:47::,2001:7f8:47:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:48::,2001:7f8:48:ffff:ffff:ffff:ffff:ffff,IS +2001:7f8:4a::,2001:7f8:4a:ffff:ffff:ffff:ffff:ffff,AT +2001:7f8:4b::,2001:7f8:4b:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:4c::,2001:7f8:4c:ffff:ffff:ffff:ffff:ffff,LU +2001:7f8:4d::,2001:7f8:4d:ffff:ffff:ffff:ffff:ffff,IE +2001:7f8:4e::,2001:7f8:4e:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:4f::,2001:7f8:4f:ffff:ffff:ffff:ffff:ffff,BH +2001:7f8:50::,2001:7f8:50:ffff:ffff:ffff:ffff:ffff,EE +2001:7f8:51::,2001:7f8:51:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:52::,2001:7f8:52:ffff:ffff:ffff:ffff:ffff,LB +2001:7f8:53::,2001:7f8:53:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:54::,2001:7f8:54:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:55::,2001:7f8:55:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:56::,2001:7f8:56:ffff:ffff:ffff:ffff:ffff,DE +2001:7f8:58::,2001:7f8:58:ffff:ffff:ffff:ffff:ffff,BG +2001:7f8:59::,2001:7f8:59:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:5a::,2001:7f8:5a:ffff:ffff:ffff:ffff:ffff,BY +2001:7f8:5b::,2001:7f8:5b:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:5c::,2001:7f8:5c:ffff:ffff:ffff:ffff:ffff,SE +2001:7f8:5d::,2001:7f8:5d:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:5e::,2001:7f8:5e:ffff:ffff:ffff:ffff:ffff,CZ +2001:7f8:5f::,2001:7f8:5f:ffff:ffff:ffff:ffff:ffff,IT +2001:7f8:60::,2001:7f8:60:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:61::,2001:7f8:61:ffff:ffff:ffff:ffff:ffff,NL +2001:7f8:63::,2001:7f8:63:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:64::,2001:7f8:64:ffff:ffff:ffff:ffff:ffff,RO +2001:7f8:66::,2001:7f8:66:ffff:ffff:ffff:ffff:ffff,AT +2001:7f8:67::,2001:7f8:67:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:68::,2001:7f8:68:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:69::,2001:7f8:69:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:6a::,2001:7f8:6a:ffff:ffff:ffff:ffff:ffff,MD +2001:7f8:6b::,2001:7f8:6b:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:6c::,2001:7f8:6c:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:6d::,2001:7f8:6d:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:6e::,2001:7f8:6e:ffff:ffff:ffff:ffff:ffff,GR +2001:7f8:6f::,2001:7f8:70:ffff:ffff:ffff:ffff:ffff,RU +2001:7f8:71::,2001:7f8:71:ffff:ffff:ffff:ffff:ffff,AT +2001:7f8:72::,2001:7f8:72:ffff:ffff:ffff:ffff:ffff,PS +2001:7f8:73::,2001:7f8:73:ffff:ffff:ffff:ffff:ffff,AE +2001:7f8:74::,2001:7f8:75:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:76::,2001:7f8:76:ffff:ffff:ffff:ffff:ffff,NO +2001:7f8:77::,2001:7f8:78:ffff:ffff:ffff:ffff:ffff,RU +2001:7f8:79::,2001:7f8:79:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:7a::,2001:7f8:7a:ffff:ffff:ffff:ffff:ffff,AE +2001:7f8:7b::,2001:7f8:7b:ffff:ffff:ffff:ffff:ffff,UA +2001:7f8:7c::,2001:7f8:7c:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:7d::,2001:7f8:7d:ffff:ffff:ffff:ffff:ffff,RU +2001:7f8:7e::,2001:7f8:7e:ffff:ffff:ffff:ffff:ffff,ES +2001:7f8:7f::,2001:7f8:7f:ffff:ffff:ffff:ffff:ffff,CZ +2001:7f8:81::,2001:7f8:81:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:82::,2001:7f8:82:ffff:ffff:ffff:ffff:ffff,RU +2001:7f8:83::,2001:7f8:83:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:84::,2001:7f8:84:ffff:ffff:ffff:ffff:ffff,RU +2001:7f8:85::,2001:7f8:85:ffff:ffff:ffff:ffff:ffff,HU +2001:7f8:86::,2001:7f8:86:ffff:ffff:ffff:ffff:ffff,NL +2001:7f8:87::,2001:7f8:87:ffff:ffff:ffff:ffff:ffff,CZ +2001:7f8:88::,2001:7f8:89:ffff:ffff:ffff:ffff:ffff,FR +2001:7f8:8a::,2001:7f8:8a:ffff:ffff:ffff:ffff:ffff,PL +2001:7f8:8b::,2001:7f8:8b:ffff:ffff:ffff:ffff:ffff,BY +2001:7f8:8d::,2001:7f8:8d:ffff:ffff:ffff:ffff:ffff,AT +2001:7f8:8e::,2001:7f8:8e:ffff:ffff:ffff:ffff:ffff,BG +2001:7fa:0:1::,2001:7fa::1:ffff:ffff:ffff:ffff,HK +2001:7fa:0:2::,2001:7fa::2:ffff:ffff:ffff:ffff,KR +2001:7fa:0:3::,2001:7fa::3:ffff:ffff:ffff:ffff,JP +2001:7fa:1::,2001:7fa:1:ffff:ffff:ffff:ffff:ffff,TW +2001:7fa:2::,2001:7fa:2:ffff:ffff:ffff:ffff:ffff,ID +2001:7fa:3::,2001:7fa:4:ffff:ffff:ffff:ffff:ffff,NZ +2001:7fa:5::,2001:7fa:5:ffff:ffff:ffff:ffff:ffff,CN +2001:7fa:6::,2001:7fa:6:ffff:ffff:ffff:ffff:ffff,VN +2001:7fa:7::,2001:7fa:7:ffff:ffff:ffff:ffff:ffff,JP +2001:7fa:8::,2001:7fa:8:ffff:ffff:ffff:ffff:ffff,KR +2001:7fa:9::,2001:7fa:e:ffff:ffff:ffff:ffff:ffff,AU +2001:7fa:f::,2001:7fa:f:ffff:ffff:ffff:ffff:ffff,ID +2001:7fa:10::,2001:7fa:10:ffff:ffff:ffff:ffff:ffff,CN +2001:7fa:11::,2001:7fa:11:ffff:ffff:ffff:ffff:ffff,AU +2001:7fe::,2001:7fe:ffff:ffff:ffff:ffff:ffff:ffff,SE 2001:808::,2001:808:ffff:ffff:ffff:ffff:ffff:ffff,PL 2001:810::,2001:810:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:818::,2001:81f:ffff:ffff:ffff:ffff:ffff:ffff,PT @@ -93,8 +2264,64 @@ 2001:8e0::,2001:8e8:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:8f0::,2001:8f3:ffff:ffff:ffff:ffff:ffff:ffff,CY 2001:8f8::,2001:8ff:ffff:ffff:ffff:ffff:ffff:ffff,AE -2001:900::,2001:9ff:ffff:ffff:ffff:ffff:ffff:ffff,NL -2001:a00::,2001:aff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:900::,2001:900:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:908::,2001:908:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:910::,2001:917:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:918::,2001:918:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:920::,2001:927:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:928::,2001:928:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:930::,2001:930:ffff:ffff:ffff:ffff:ffff:ffff,TR +2001:938::,2001:938:ffff:ffff:ffff:ffff:ffff:ffff,AT +2001:940::,2001:940:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:948::,2001:948:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:950::,2001:950:ffff:ffff:ffff:ffff:ffff:ffff,HU +2001:958::,2001:958:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:960::,2001:960:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:968::,2001:968:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:978::,2001:978:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:980::,2001:987:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:988::,2001:988:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:990::,2001:990:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:998::,2001:99b:ffff:ffff:ffff:ffff:ffff:ffff,FI +2001:9a0::,2001:9a0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:9a8::,2001:9a8:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:9b0::,2001:9b0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:9c0::,2001:9c0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:9c8::,2001:9cf:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:9d0::,2001:9d0:ffff:ffff:ffff:ffff:ffff:ffff,AT +2001:9d8::,2001:9d8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:9e0::,2001:9e0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:9e8::,2001:9e8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:9f0::,2001:9f0:ffff:ffff:ffff:ffff:ffff:ffff,FI +2001:a00::,2001:a00:ffff:ffff:ffff:ffff:ffff:ffff,AT +2001:a08::,2001:a08:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:a10::,2001:a10:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:a18::,2001:a1f:ffff:ffff:ffff:ffff:ffff:ffff,LU +2001:a20::,2001:a20:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:a30::,2001:a30:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:a38::,2001:a38:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:a40::,2001:a40:ffff:ffff:ffff:ffff:ffff:ffff,PT +2001:a48::,2001:a48:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:a50::,2001:a50:ffff:ffff:ffff:ffff:ffff:ffff,ES +2001:a58::,2001:a58:ffff:ffff:ffff:ffff:ffff:ffff,RU +2001:a60::,2001:a67:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:a68::,2001:a68:ffff:ffff:ffff:ffff:ffff:ffff,FI +2001:a70::,2001:a70:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:a78::,2001:a78:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:a80::,2001:a80:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:a88::,2001:a88:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:a90::,2001:a90:ffff:ffff:ffff:ffff:ffff:ffff,NO +2001:a98::,2001:a98:ffff:ffff:ffff:ffff:ffff:ffff,TR +2001:aa0::,2001:aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:aa8::,2001:ab7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:ab8::,2001:ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:ac0::,2001:ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2001:ac8::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:ad0::,2001:ad0:ffff:ffff:ffff:ffff:ffff:ffff,EE +2001:ad8::,2001:ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:ae8::,2001:ae8:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:af0::,2001:af0:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:af8::,2001:af8:ffff:ffff:ffff:ffff:ffff:ffff,AT 2001:b00::,2001:b07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:b08::,2001:b08:ffff:ffff:ffff:ffff:ffff:ffff,RU 2001:b10::,2001:b10:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -116,7 +2343,7 @@ 2001:b98::,2001:b98:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:ba0::,2001:ba0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2001:ba8::,2001:ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB -2001:bb0::,2001:bb0:ffff:ffff:ffff:ffff:ffff:ffff,IE +2001:bb0::,2001:bb7:ffff:ffff:ffff:ffff:ffff:ffff,IE 2001:bb8::,2001:bb8:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:bc0::,2001:bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:bc8::,2001:bc8:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -156,8 +2383,759 @@ 2001:ce8::,2001:ce8:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:cf0::,2001:cf0:ffff:ffff:ffff:ffff:ffff:ffff,KR 2001:cf8::,2001:cf8:ffff:ffff:ffff:ffff:ffff:ffff,JP -2001:d00::,2001:db7:ffff:ffff:ffff:ffff:ffff:ffff,CN -2001:db9::,2001:dff:ffff:ffff:ffff:ffff:ffff:ffff,CN +2001:d00::,2001:d00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d08::,2001:d08:ffff:ffff:ffff:ffff:ffff:ffff,MY +2001:d10::,2001:d10:ffff:ffff:ffff:ffff:ffff:ffff,ID +2001:d18::,2001:d18:ffff:ffff:ffff:ffff:ffff:ffff,PH +2001:d28::,2001:d28:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d30::,2001:d30:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d38::,2001:d38:ffff:ffff:ffff:ffff:ffff:ffff,KR +2001:d40::,2001:d40:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:d48::,2001:d48:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:d50::,2001:d50:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d58::,2001:d58:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:d68::,2001:d68:ffff:ffff:ffff:ffff:ffff:ffff,ID +2001:d70::,2001:d73:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d80::,2001:d80:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d88::,2001:d88:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d90::,2001:d90:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d98::,2001:d98:ffff:ffff:ffff:ffff:ffff:ffff,SG +2001:da0::,2001:da0:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:da8::,2001:daa:ffff:ffff:ffff:ffff:ffff:ffff,CN +2001:db0::,2001:db0:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:dc0::,2001:dc0:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:dc1::,2001:dc1:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:dc2::,2001:dc4:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:dc5::,2001:dc5:ffff:ffff:ffff:ffff:ffff:ffff,KR +2001:dc6::,2001:dc6:ffff:ffff:ffff:ffff:ffff:ffff,ID +2001:dc7::,2001:dc7:ffff:ffff:ffff:ffff:ffff:ffff,CN +2001:dc8::,2001:dc8:ffff:ffff:ffff:ffff:ffff:ffff,VN +2001:dc9::,2001:dc9:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:dca::,2001:dca:ffff:ffff:ffff:ffff:ffff:ffff,HK +2001:dcc::,2001:dcc:ffff:ffff:ffff:ffff:ffff:ffff,KR +2001:dcd::,2001:dcd:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:dce::,2001:dce:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2001:dd8::,2001:dd8::ffff:ffff:ffff:ffff:ffff,FJ +2001:dd8:1::,2001:dd8:1:ffff:ffff:ffff:ffff:ffff,CN +2001:dd8:2::,2001:dd8:2:ffff:ffff:ffff:ffff:ffff,MY +2001:dd8:3::,2001:dd8:3:ffff:ffff:ffff:ffff:ffff,NZ +2001:dd8:4::,2001:dd8:4:ffff:ffff:ffff:ffff:ffff,SG +2001:dd8:5::,2001:dd8:5:ffff:ffff:ffff:ffff:ffff,CN +2001:dd8:6::,2001:dd8:6:ffff:ffff:ffff:ffff:ffff,AU +2001:dd8:7::,2001:dd8:7:ffff:ffff:ffff:ffff:ffff,NP +2001:dd8:8::,2001:dd8:f:ffff:ffff:ffff:ffff:ffff,AU +2001:dd8:10::,2001:dd8:11:ffff:ffff:ffff:ffff:ffff,NP +2001:dd8:12::,2001:dd8:12:ffff:ffff:ffff:ffff:ffff,AU +2001:dd8:13::,2001:dd8:13:ffff:ffff:ffff:ffff:ffff,NZ +2001:dd8:14::,2001:dd8:14:ffff:ffff:ffff:ffff:ffff,AU +2001:dd8:15::,2001:dd8:15:ffff:ffff:ffff:ffff:ffff,HK +2001:dd8:16::,2001:dd8:16:ffff:ffff:ffff:ffff:ffff,SG +2001:dd8:17::,2001:dd8:17:ffff:ffff:ffff:ffff:ffff,KR +2001:dd8:18::,2001:dd8:18:ffff:ffff:ffff:ffff:ffff,TW +2001:dd8:19::,2001:dd8:19:ffff:ffff:ffff:ffff:ffff,IN +2001:dd8:1a::,2001:dd8:1a:ffff:ffff:ffff:ffff:ffff,CN +2001:dd8:1b::,2001:dd8:1b:ffff:ffff:ffff:ffff:ffff,IN +2001:dd8:1c::,2001:dd8:1c:ffff:ffff:ffff:ffff:ffff,PK +2001:dd8:1d::,2001:dd8:1d:ffff:ffff:ffff:ffff:ffff,BD +2001:dd8:1e::,2001:dd8:1e:ffff:ffff:ffff:ffff:ffff,KH +2001:dd8:1f::,2001:dd8:1f:ffff:ffff:ffff:ffff:ffff,ID +2001:dd8:20::,2001:dd8:21:ffff:ffff:ffff:ffff:ffff,IN +2001:dd8:22::,2001:dd8:22:ffff:ffff:ffff:ffff:ffff,JP +2001:dd8:24::,2001:dd8:25:ffff:ffff:ffff:ffff:ffff,NP +2001:de1::,2001:de1:3f:ffff:ffff:ffff:ffff:ffff,JP +2001:de8::,2001:de8::ffff:ffff:ffff:ffff:ffff,TH +2001:de8:1::,2001:de8:1:ffff:ffff:ffff:ffff:ffff,IN +2001:de8:2::,2001:de8:2:ffff:ffff:ffff:ffff:ffff,ID +2001:de8:3::,2001:de8:3:ffff:ffff:ffff:ffff:ffff,VN +2001:de8:4::,2001:de8:7:ffff:ffff:ffff:ffff:ffff,SG +2001:de8:8::,2001:de8:8:ffff:ffff:ffff:ffff:ffff,JP +2001:de8:9::,2001:de8:9:ffff:ffff:ffff:ffff:ffff,AU +2001:de8:a::,2001:de8:a:ffff:ffff:ffff:ffff:ffff,VN +2001:de8:b::,2001:de8:b:ffff:ffff:ffff:ffff:ffff,BD +2001:de8:c::,2001:de8:c:ffff:ffff:ffff:ffff:ffff,JP +2001:de8:d::,2001:de8:d:ffff:ffff:ffff:ffff:ffff,SG +2001:de8:e::,2001:de8:e:ffff:ffff:ffff:ffff:ffff,TH +2001:de8:f::,2001:de8:10:ffff:ffff:ffff:ffff:ffff,MY +2001:de8:11::,2001:de8:11:ffff:ffff:ffff:ffff:ffff,ID +2001:de8:12::,2001:de8:12:ffff:ffff:ffff:ffff:ffff,SG +2001:de8:13::,2001:de8:13:ffff:ffff:ffff:ffff:ffff,MY +2001:de8:14::,2001:de8:14:ffff:ffff:ffff:ffff:ffff,AU +2001:de8:15::,2001:de8:15:ffff:ffff:ffff:ffff:ffff,ID +2001:de8:16::,2001:de8:16:ffff:ffff:ffff:ffff:ffff,PF +2001:de8:17::,2001:de8:17:ffff:ffff:ffff:ffff:ffff,AU +2001:de8:19::,2001:de8:19:ffff:ffff:ffff:ffff:ffff,NZ +2001:de8:1a::,2001:de8:1a:ffff:ffff:ffff:ffff:ffff,ID +2001:de8:1b::,2001:de8:1b:ffff:ffff:ffff:ffff:ffff,MY +2001:de8:1d::,2001:de8:1d:ffff:ffff:ffff:ffff:ffff,KH +2001:de8:1e::,2001:de8:1e:ffff:ffff:ffff:ffff:ffff,JP +2001:de9::,2001:de9::ffff:ffff:ffff:ffff:ffff,LK +2001:dea::,2001:dea::ffff:ffff:ffff:ffff:ffff,AU +2001:deb::,2001:deb::ffff:ffff:ffff:ffff:ffff,TH +2001:dec::,2001:dec::ffff:ffff:ffff:ffff:ffff,VU +2001:ded::,2001:ded::ffff:ffff:ffff:ffff:ffff,SG +2001:dee::,2001:dee::ffff:ffff:ffff:ffff:ffff,HK +2001:df0::,2001:df0:1:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:2::,2001:df0:2:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:4::,2001:df0:4:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:7::,2001:df0:7:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:8::,2001:df0:8:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:9::,2001:df0:a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c::,2001:df0:13:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:14::,2001:df0:14:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:15::,2001:df0:15:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:17::,2001:df0:17:ffff:ffff:ffff:ffff:ffff,LK +2001:df0:18::,2001:df0:18:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:19::,2001:df0:1d:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:1e::,2001:df0:1e:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:1f::,2001:df0:1f:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:20::,2001:df0:3f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:40::,2001:df0:40:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:41::,2001:df0:41:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:42::,2001:df0:42:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:43::,2001:df0:43:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:44::,2001:df0:44:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:45::,2001:df0:46:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:48::,2001:df0:48:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:49::,2001:df0:49:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:4a::,2001:df0:4a:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:4b::,2001:df0:4d:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:4f::,2001:df0:60:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:62::,2001:df0:62:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:63::,2001:df0:63:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:65::,2001:df0:65:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:66::,2001:df0:66:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:68::,2001:df0:68:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:69::,2001:df0:69:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:6a::,2001:df0:6a:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:6b::,2001:df0:6b:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:6c::,2001:df0:6c:ffff:ffff:ffff:ffff:ffff,WS +2001:df0:6f::,2001:df0:6f:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:70::,2001:df0:70:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:71::,2001:df0:71:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:73::,2001:df0:74:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:75::,2001:df0:75:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:76::,2001:df0:76:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:77::,2001:df0:77:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:78::,2001:df0:78:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:7b::,2001:df0:7c:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7d::,2001:df0:7d:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:7e::,2001:df0:81:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:82::,2001:df0:82:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:83::,2001:df0:83:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:84::,2001:df0:84:ffff:ffff:ffff:ffff:ffff,PK +2001:df0:85::,2001:df0:85:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:86::,2001:df0:87:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:89::,2001:df0:89:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8b::,2001:df0:8b:ffff:ffff:ffff:ffff:ffff,NP +2001:df0:8c::,2001:df0:8c:ffff:ffff:ffff:ffff:ffff,NU +2001:df0:8e::,2001:df0:90:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:91::,2001:df0:91:ffff:ffff:ffff:ffff:ffff,FJ +2001:df0:92::,2001:df0:92:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:93::,2001:df0:93:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:94::,2001:df0:94:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:95::,2001:df0:95:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:96::,2001:df0:96:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:97::,2001:df0:97:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:98::,2001:df0:9a:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:9c::,2001:df0:9c:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:9d::,2001:df0:9d:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:9e::,2001:df0:9e:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:9f::,2001:df0:9f:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:a0::,2001:df0:a1:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:a2::,2001:df0:a2:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:a3::,2001:df0:a3:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:a4::,2001:df0:a4:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:a5::,2001:df0:a6:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:a7::,2001:df0:ab:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:ad::,2001:df0:ad:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:ae::,2001:df0:ae:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:b0::,2001:df0:b0:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:b1::,2001:df0:b8:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:b9::,2001:df0:b9:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:ba::,2001:df0:bd:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:be::,2001:df0:be:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:bf::,2001:df0:bf:ffff:ffff:ffff:ffff:ffff,LA +2001:df0:c0::,2001:df0:c0:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:c1::,2001:df0:c2:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c4::,2001:df0:c4:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c5::,2001:df0:c5:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:c6::,2001:df0:c6:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:c7::,2001:df0:c8:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c9::,2001:df0:cc:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:cd::,2001:df0:cd:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:ce::,2001:df0:ce:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:cf::,2001:df0:cf:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:d1::,2001:df0:d1:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:d2::,2001:df0:d2:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:d4::,2001:df0:d6:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:d7::,2001:df0:d7:ffff:ffff:ffff:ffff:ffff,KR +2001:df0:d8::,2001:df0:d8:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:d9::,2001:df0:d9:ffff:ffff:ffff:ffff:ffff,TW +2001:df0:da::,2001:df0:da:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:dc::,2001:df0:dc:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:dd::,2001:df0:dd:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:de::,2001:df0:df:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:e1::,2001:df0:e1:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:e2::,2001:df0:e2:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:e3::,2001:df0:e3:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:e4::,2001:df0:e5:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:e6::,2001:df0:e6:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:e7::,2001:df0:e8:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:e9::,2001:df0:e9:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:ea::,2001:df0:ea:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:eb::,2001:df0:eb:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:ed::,2001:df0:ed:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:ee::,2001:df0:ee:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:ef::,2001:df0:f0:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:f1::,2001:df0:f1:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:f2::,2001:df0:f2:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:f3::,2001:df0:f3:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:f4::,2001:df0:f4:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:f5::,2001:df0:f5:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:f6::,2001:df0:f6:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:f7::,2001:df0:f7:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:f8::,2001:df0:fa:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:fb::,2001:df0:fb:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:fc::,2001:df0:fc:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:fd::,2001:df0:fe:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:100::,2001:df0:1ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:201::,2001:df0:201:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:202::,2001:df0:202:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:203::,2001:df0:203:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:204::,2001:df0:204:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:205::,2001:df0:205:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:206::,2001:df0:206:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:207::,2001:df0:207:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:208::,2001:df0:208:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:209::,2001:df0:209:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:20a::,2001:df0:20a:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:20b::,2001:df0:20b:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:20c::,2001:df0:20c:ffff:ffff:ffff:ffff:ffff,NF +2001:df0:20d::,2001:df0:20d:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:20e::,2001:df0:20e:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:210::,2001:df0:210:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:211::,2001:df0:211:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:212::,2001:df0:212:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:213::,2001:df0:213:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:214::,2001:df0:214:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:215::,2001:df0:215:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:216::,2001:df0:217:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:218::,2001:df0:219:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:21a::,2001:df0:21a:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:21b::,2001:df0:21b:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:21c::,2001:df0:21c:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:21d::,2001:df0:21d:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:21e::,2001:df0:21e:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:21f::,2001:df0:220:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:221::,2001:df0:221:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:222::,2001:df0:222:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:224::,2001:df0:224:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:225::,2001:df0:225:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:226::,2001:df0:228:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:229::,2001:df0:229:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:22b::,2001:df0:22b:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:22c::,2001:df0:22d:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:22e::,2001:df0:22f:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:230::,2001:df0:230:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:231::,2001:df0:231:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:232::,2001:df0:232:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:233::,2001:df0:234:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:235::,2001:df0:235:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:237::,2001:df0:237:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:238::,2001:df0:238:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:239::,2001:df0:239:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:23a::,2001:df0:23a:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:23b::,2001:df0:23b:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:23c::,2001:df0:23d:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:23e::,2001:df0:23e:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:23f::,2001:df0:23f:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:240::,2001:df0:241:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:242::,2001:df0:242:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:243::,2001:df0:243:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:245::,2001:df0:246:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:247::,2001:df0:247:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:248::,2001:df0:248:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:249::,2001:df0:24a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:24b::,2001:df0:24b:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:24c::,2001:df0:24c:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:24e::,2001:df0:24e:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:24f::,2001:df0:24f:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:250::,2001:df0:250:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:251::,2001:df0:252:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:253::,2001:df0:253:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:254::,2001:df0:254:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:255::,2001:df0:255:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:256::,2001:df0:256:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:257::,2001:df0:257:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:258::,2001:df0:258:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:259::,2001:df0:259:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:25a::,2001:df0:25a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:25b::,2001:df0:25b:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:25c::,2001:df0:25d:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:25e::,2001:df0:25e:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:260::,2001:df0:260:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:261::,2001:df0:261:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:262::,2001:df0:262:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:263::,2001:df0:263:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:264::,2001:df0:264:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:265::,2001:df0:265:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:266::,2001:df0:266:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:267::,2001:df0:267:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:268::,2001:df0:269:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:26a::,2001:df0:26b:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:26c::,2001:df0:26c:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:26d::,2001:df0:26f:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:270::,2001:df0:270:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:271::,2001:df0:271:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:272::,2001:df0:272:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:273::,2001:df0:273:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:274::,2001:df0:277:ffff:ffff:ffff:ffff:ffff,NP +2001:df0:278::,2001:df0:278:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:279::,2001:df0:279:ffff:ffff:ffff:ffff:ffff,PK +2001:df0:27a::,2001:df0:27a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:27b::,2001:df0:27b:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:27c::,2001:df0:27c:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:27d::,2001:df0:27d:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:27e::,2001:df0:27e:ffff:ffff:ffff:ffff:ffff,CN +2001:df0:27f::,2001:df0:27f:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:280::,2001:df0:28f:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:290::,2001:df0:290:ffff:ffff:ffff:ffff:ffff,KR +2001:df0:291::,2001:df0:291:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:292::,2001:df0:292:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:293::,2001:df0:293:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:294::,2001:df0:294:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:295::,2001:df0:296:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:298::,2001:df0:298:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:299::,2001:df0:299:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:29a::,2001:df0:29a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:29b::,2001:df0:29b:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:29c::,2001:df0:29c:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:29d::,2001:df0:29d:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:29e::,2001:df0:29e:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:29f::,2001:df0:29f:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:2a0::,2001:df0:2a0:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:2a1::,2001:df0:2a1:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2a2::,2001:df0:2a2:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:2a3::,2001:df0:2a3:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2a4::,2001:df0:2a4:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2a5::,2001:df0:2a5:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:2a6::,2001:df0:2a6:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2a7::,2001:df0:2a7:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2a8::,2001:df0:2a8:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:2a9::,2001:df0:2aa:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2ab::,2001:df0:2ab:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2ac::,2001:df0:2ac:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:2ad::,2001:df0:2ad:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2ae::,2001:df0:2ae:ffff:ffff:ffff:ffff:ffff,WS +2001:df0:2af::,2001:df0:2af:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:2b0::,2001:df0:2b1:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2b2::,2001:df0:2b2:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2b4::,2001:df0:2b4:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2b5::,2001:df0:2b5:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2b7::,2001:df0:2b7:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2b8::,2001:df0:2b8:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:2b9::,2001:df0:2b9:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:2ba::,2001:df0:2ba:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:2bb::,2001:df0:2bb:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:2bc::,2001:df0:2bc:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2bd::,2001:df0:2bd:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2be::,2001:df0:2be:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2bf::,2001:df0:2bf:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:2c1::,2001:df0:2c1:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:2c2::,2001:df0:2c2:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2c3::,2001:df0:2c3:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:2c4::,2001:df0:2c4:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2c5::,2001:df0:2c5:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:2c6::,2001:df0:2c8:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2c9::,2001:df0:2c9:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2ca::,2001:df0:2ca:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2cb::,2001:df0:2cb:ffff:ffff:ffff:ffff:ffff,PK +2001:df0:2cc::,2001:df0:2cc:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2ce::,2001:df0:2e0:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2e1::,2001:df0:2e1:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2e2::,2001:df0:2e2:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2e3::,2001:df0:2e3:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2e4::,2001:df0:2e4:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2e5::,2001:df0:2e5:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2e6::,2001:df0:2e7:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2e8::,2001:df0:2e8:ffff:ffff:ffff:ffff:ffff,VN +2001:df0:2e9::,2001:df0:2e9:ffff:ffff:ffff:ffff:ffff,CN +2001:df0:2ea::,2001:df0:2ea:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:2ec::,2001:df0:2ec:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2ed::,2001:df0:2ee:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2ef::,2001:df0:2ef:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:2f0::,2001:df0:2f3:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2f4::,2001:df0:2f4:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2f5::,2001:df0:2f5:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:2f6::,2001:df0:2f6:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2f9::,2001:df0:2f9:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2fa::,2001:df0:2fa:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2fb::,2001:df0:2fb:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:2fc::,2001:df0:2fc:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:2fd::,2001:df0:2fd:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:2fe::,2001:df0:2ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:300::,2001:df0:311:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:314::,2001:df0:317:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:400::,2001:df0:400:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:401::,2001:df0:401:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:402::,2001:df0:403:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:404::,2001:df0:404:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:405::,2001:df0:405:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:407::,2001:df0:407:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:408::,2001:df0:408:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:409::,2001:df0:409:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:40a::,2001:df0:40a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:40c::,2001:df0:40c:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:40d::,2001:df0:40d:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:40e::,2001:df0:40f:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:410::,2001:df0:410:ffff:ffff:ffff:ffff:ffff,VU +2001:df0:411::,2001:df0:411:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:412::,2001:df0:412:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:413::,2001:df0:413:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:415::,2001:df0:415:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:417::,2001:df0:417:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:418::,2001:df0:419:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:41a::,2001:df0:41a:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:41b::,2001:df0:41b:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:41c::,2001:df0:41c:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:41d::,2001:df0:41e:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:41f::,2001:df0:41f:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:420::,2001:df0:420:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:421::,2001:df0:421:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:422::,2001:df0:422:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:423::,2001:df0:423:ffff:ffff:ffff:ffff:ffff,CN +2001:df0:424::,2001:df0:424:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:425::,2001:df0:425:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:426::,2001:df0:426:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:427::,2001:df0:427:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:430::,2001:df0:43f:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:440::,2001:df0:440:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:441::,2001:df0:441:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:442::,2001:df0:443:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:444::,2001:df0:445:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:446::,2001:df0:446:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:447::,2001:df0:447:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:448::,2001:df0:448:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:449::,2001:df0:449:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:44a::,2001:df0:44a:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:44b::,2001:df0:44b:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:44c::,2001:df0:44d:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:44e::,2001:df0:44e:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:44f::,2001:df0:44f:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:450::,2001:df0:450:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:451::,2001:df0:451:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:452::,2001:df0:452:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:453::,2001:df0:453:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:454::,2001:df0:454:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:455::,2001:df0:455:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:456::,2001:df0:456:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:457::,2001:df0:457:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:458::,2001:df0:458:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:459::,2001:df0:459:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:45a::,2001:df0:45a:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:45b::,2001:df0:45b:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:45c::,2001:df0:45d:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:45e::,2001:df0:45e:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:45f::,2001:df0:45f:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:460::,2001:df0:460:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:461::,2001:df0:461:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:462::,2001:df0:462:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:463::,2001:df0:463:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:464::,2001:df0:464:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:465::,2001:df0:465:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:466::,2001:df0:466:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:467::,2001:df0:467:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:468::,2001:df0:469:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:46a::,2001:df0:46a:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:46b::,2001:df0:46b:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:46c::,2001:df0:46c:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:500::,2001:df0:5ff:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:800::,2001:df0:800:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:c00::,2001:df0:c00:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:1000::,2001:df0:1000:ffff:ffff:ffff:ffff:ffff,TH +2001:df0:1400::,2001:df0:1400:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:1800::,2001:df0:1800:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:1c00::,2001:df0:1c00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2000::,2001:df0:2000:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2400::,2001:df0:2400:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:2800::,2001:df0:2800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:2c00::,2001:df0:2c00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:3000::,2001:df0:3000:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:3400::,2001:df0:3400:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:3800::,2001:df0:3800:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:3c00::,2001:df0:3c00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:4400::,2001:df0:4400:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:4c00::,2001:df0:4c00:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:5000::,2001:df0:5000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:5400::,2001:df0:5400:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:5800::,2001:df0:5800:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:5c00::,2001:df0:5c00:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:6000::,2001:df0:6000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:6400::,2001:df0:6400:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:6c00::,2001:df0:6c00:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:7000::,2001:df0:7000:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:7400::,2001:df0:7400:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:7800::,2001:df0:7800:ffff:ffff:ffff:ffff:ffff,WS +2001:df0:7c00::,2001:df0:7c00:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:8000::,2001:df0:8000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8400::,2001:df0:8400:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8800::,2001:df0:8800:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:8c00::,2001:df0:8c00:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:9400::,2001:df0:9400:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:9800::,2001:df0:9800:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:9c00::,2001:df0:9c00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:a000::,2001:df0:a000:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:a400::,2001:df0:a400:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:a800::,2001:df0:a800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:ac00::,2001:df0:ac00:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:b000::,2001:df0:b000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df0:b400::,2001:df0:b400:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:b800::,2001:df0:b800:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:bc00::,2001:df0:bc00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:c000::,2001:df0:c000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:c400::,2001:df0:c400:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:c800::,2001:df0:c800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:cc00::,2001:df0:cc00:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:d000::,2001:df0:d000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:d400::,2001:df0:d400:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:d800::,2001:df0:d800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:dc00::,2001:df0:dc00:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:e000::,2001:df0:e000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:e400::,2001:df0:e400:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:e800::,2001:df0:e800:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:ec00::,2001:df0:ec00:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:f000::,2001:df0:f000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:f400::,2001:df0:f401:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:f800::,2001:df0:f800:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:fc00::,2001:df0:fc01:ffff:ffff:ffff:ffff:ffff,IN +2001:df1::,2001:df1::ffff:ffff:ffff:ffff:ffff,TH +2001:df1:400::,2001:df1:400:ffff:ffff:ffff:ffff:ffff,BD +2001:df1:800::,2001:df1:800:ffff:ffff:ffff:ffff:ffff,SG +2001:df1:c00::,2001:df1:c00:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:1000::,2001:df1:1000:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:1400::,2001:df1:1400:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:1800::,2001:df1:1800:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:1c00::,2001:df1:1c00:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:2000::,2001:df1:2000:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:2800::,2001:df1:2800:ffff:ffff:ffff:ffff:ffff,SG +2001:df1:3000::,2001:df1:3000:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:3800::,2001:df1:3800:ffff:ffff:ffff:ffff:ffff,NZ +2001:df1:4000::,2001:df1:4000:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:4800::,2001:df1:4800:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:5000::,2001:df1:5000:ffff:ffff:ffff:ffff:ffff,HK +2001:df1:5800::,2001:df1:5800:ffff:ffff:ffff:ffff:ffff,BD +2001:df1:6000::,2001:df1:6000:ffff:ffff:ffff:ffff:ffff,SG +2001:df1:6800::,2001:df1:6800:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:7000::,2001:df1:7000:ffff:ffff:ffff:ffff:ffff,ID +2001:df1:7800::,2001:df1:7800:ffff:ffff:ffff:ffff:ffff,ID +2001:df1:8000::,2001:df1:8000:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:8800::,2001:df1:8800:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:9000::,2001:df1:9000:ffff:ffff:ffff:ffff:ffff,ID +2001:df1:9800::,2001:df1:9800:ffff:ffff:ffff:ffff:ffff,MY +2001:df1:a000::,2001:df1:a000:ffff:ffff:ffff:ffff:ffff,IN +2001:df1:a800::,2001:df1:a800:ffff:ffff:ffff:ffff:ffff,SG +2001:df1:b000::,2001:df1:b000:ffff:ffff:ffff:ffff:ffff,TH +2001:df1:b800::,2001:df1:b800:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:c000::,2001:df1:c000:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:c800::,2001:df1:c800:ffff:ffff:ffff:ffff:ffff,HK +2001:df1:d000::,2001:df1:d000:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:d800::,2001:df1:d800:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:e000::,2001:df1:e000:ffff:ffff:ffff:ffff:ffff,ID +2001:df1:e800::,2001:df1:e800:ffff:ffff:ffff:ffff:ffff,AU +2001:df1:f000::,2001:df1:f000:ffff:ffff:ffff:ffff:ffff,ID +2001:df1:f800::,2001:df1:f800:ffff:ffff:ffff:ffff:ffff,BN +2001:df2::,2001:df2::ffff:ffff:ffff:ffff:ffff,AU +2001:df2:800::,2001:df2:800:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:1000::,2001:df2:1000:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:1800::,2001:df2:1803:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:2000::,2001:df2:2000:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:2800::,2001:df2:2800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:3000::,2001:df2:3000:ffff:ffff:ffff:ffff:ffff,SG +2001:df2:3800::,2001:df2:3800:ffff:ffff:ffff:ffff:ffff,TH +2001:df2:4000::,2001:df2:4000:ffff:ffff:ffff:ffff:ffff,HK +2001:df2:4800::,2001:df2:4800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:5000::,2001:df2:5000:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:5800::,2001:df2:5800:ffff:ffff:ffff:ffff:ffff,HK +2001:df2:6000::,2001:df2:6000:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:6800::,2001:df2:6800:ffff:ffff:ffff:ffff:ffff,PH +2001:df2:7000::,2001:df2:7000:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:7800::,2001:df2:7800:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:8000::,2001:df2:8000:ffff:ffff:ffff:ffff:ffff,BN +2001:df2:8800::,2001:df2:8800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:9000::,2001:df2:9000:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:9800::,2001:df2:9803:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:a000::,2001:df2:a000:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:a800::,2001:df2:a800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:b000::,2001:df2:b000:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:c000::,2001:df2:c000:ffff:ffff:ffff:ffff:ffff,ID +2001:df2:c800::,2001:df2:c800:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:d000::,2001:df2:d000:ffff:ffff:ffff:ffff:ffff,HK +2001:df2:d800::,2001:df2:d800:ffff:ffff:ffff:ffff:ffff,JP +2001:df2:e000::,2001:df2:e000:ffff:ffff:ffff:ffff:ffff,AU +2001:df2:e800::,2001:df2:e800:ffff:ffff:ffff:ffff:ffff,IN +2001:df2:f000::,2001:df2:f000:ffff:ffff:ffff:ffff:ffff,VN +2001:df2:f800::,2001:df2:f800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3::,2001:df3::ffff:ffff:ffff:ffff:ffff,MY +2001:df3:800::,2001:df3:80f:ffff:ffff:ffff:ffff:ffff,CN +2001:df3:1000::,2001:df3:1000:ffff:ffff:ffff:ffff:ffff,BD +2001:df3:1800::,2001:df3:1800:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:2000::,2001:df3:2000:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:2800::,2001:df3:2800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:3000::,2001:df3:3000:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:3800::,2001:df3:3800:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:4000::,2001:df3:4000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df3:4800::,2001:df3:4800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:5000::,2001:df3:5000:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:5800::,2001:df3:5800:ffff:ffff:ffff:ffff:ffff,AU +2001:df3:6000::,2001:df3:6000:ffff:ffff:ffff:ffff:ffff,SG +2001:df3:6800::,2001:df3:6800:ffff:ffff:ffff:ffff:ffff,AU +2001:df3:7000::,2001:df3:7000:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:7800::,2001:df3:7800:ffff:ffff:ffff:ffff:ffff,SG +2001:df3:8000::,2001:df3:8000:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:8800::,2001:df3:8800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:9800::,2001:df3:9800:ffff:ffff:ffff:ffff:ffff,MY +2001:df3:a000::,2001:df3:a003:ffff:ffff:ffff:ffff:ffff,PH +2001:df3:a800::,2001:df3:a800:ffff:ffff:ffff:ffff:ffff,MY +2001:df3:b000::,2001:df3:b000:ffff:ffff:ffff:ffff:ffff,TH +2001:df3:b800::,2001:df3:b800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:c000::,2001:df3:c000:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:c800::,2001:df3:c800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:d000::,2001:df3:d000:ffff:ffff:ffff:ffff:ffff,AU +2001:df3:d800::,2001:df3:d800:ffff:ffff:ffff:ffff:ffff,SG +2001:df3:e000::,2001:df3:e000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df3:e800::,2001:df3:e800:ffff:ffff:ffff:ffff:ffff,IN +2001:df3:f000::,2001:df3:f000:ffff:ffff:ffff:ffff:ffff,ID +2001:df3:f800::,2001:df3:f800:ffff:ffff:ffff:ffff:ffff,IN +2001:df4::,2001:df4::ffff:ffff:ffff:ffff:ffff,MY +2001:df4:800::,2001:df4:800:ffff:ffff:ffff:ffff:ffff,AU +2001:df4:1000::,2001:df4:1000:ffff:ffff:ffff:ffff:ffff,HK +2001:df4:1800::,2001:df4:1800:ffff:ffff:ffff:ffff:ffff,IN +2001:df4:2000::,2001:df4:2000:ffff:ffff:ffff:ffff:ffff,TH +2001:df4:2800::,2001:df4:2800:ffff:ffff:ffff:ffff:ffff,HK +2001:df4:3000::,2001:df4:3000:ffff:ffff:ffff:ffff:ffff,TH +2001:df4:3800::,2001:df4:3800:ffff:ffff:ffff:ffff:ffff,BD +2001:df4:4000::,2001:df4:400f:ffff:ffff:ffff:ffff:ffff,SG +2001:df4:4800::,2001:df4:4800:ffff:ffff:ffff:ffff:ffff,AU +2001:df4:5000::,2001:df4:5000:ffff:ffff:ffff:ffff:ffff,ID +2001:df4:5800::,2001:df4:5800:ffff:ffff:ffff:ffff:ffff,AU +2001:df4:6000::,2001:df4:6000:ffff:ffff:ffff:ffff:ffff,MY +2001:df4:6800::,2001:df4:6800:ffff:ffff:ffff:ffff:ffff,SG +2001:df4:7000::,2001:df4:7000:ffff:ffff:ffff:ffff:ffff,HK +2001:df4:7800::,2001:df4:7800:ffff:ffff:ffff:ffff:ffff,IN +2001:df4:8000::,2001:df4:8000:ffff:ffff:ffff:ffff:ffff,MY +2001:df4:8800::,2001:df4:8800:ffff:ffff:ffff:ffff:ffff,HK +2001:df4:9000::,2001:df4:9000:ffff:ffff:ffff:ffff:ffff,SG +2001:df4:9800::,2001:df4:9800:ffff:ffff:ffff:ffff:ffff,ID +2001:df4:a000::,2001:df4:a000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df4:a800::,2001:df4:a800:ffff:ffff:ffff:ffff:ffff,ID +2001:df4:b000::,2001:df4:b000:ffff:ffff:ffff:ffff:ffff,IN +2001:df4:b800::,2001:df4:b800:ffff:ffff:ffff:ffff:ffff,AU +2001:df4:c000::,2001:df4:c000:ffff:ffff:ffff:ffff:ffff,ID +2001:df4:c800::,2001:df4:c800:ffff:ffff:ffff:ffff:ffff,SG +2001:df4:d000::,2001:df4:d000:ffff:ffff:ffff:ffff:ffff,IN +2001:df4:d800::,2001:df4:d800:ffff:ffff:ffff:ffff:ffff,VN +2001:df4:e000::,2001:df4:e000:ffff:ffff:ffff:ffff:ffff,IN +2001:df4:e800::,2001:df4:e800:ffff:ffff:ffff:ffff:ffff,MN +2001:df4:f000::,2001:df4:f000:ffff:ffff:ffff:ffff:ffff,IN +2001:df4:f800::,2001:df4:f800:ffff:ffff:ffff:ffff:ffff,AU +2001:df5::,2001:df5::ffff:ffff:ffff:ffff:ffff,AU +2001:df5:800::,2001:df5:800:ffff:ffff:ffff:ffff:ffff,HK +2001:df5:1000::,2001:df5:1000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df5:1800::,2001:df5:1800:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:2000::,2001:df5:2000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df5:2800::,2001:df5:2800:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:3000::,2001:df5:3000:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:3800::,2001:df5:3800:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:4000::,2001:df5:4000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:4800::,2001:df5:4800:ffff:ffff:ffff:ffff:ffff,BN +2001:df5:5000::,2001:df5:5000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:5800::,2001:df5:5800:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:6000::,2001:df5:6000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df5:6800::,2001:df5:6800:ffff:ffff:ffff:ffff:ffff,KR +2001:df5:7000::,2001:df5:7000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:7800::,2001:df5:7800:ffff:ffff:ffff:ffff:ffff,CN +2001:df5:8000::,2001:df5:8000:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:8800::,2001:df5:8800:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:9000::,2001:df5:9000:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:9800::,2001:df5:9800:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:a000::,2001:df5:a000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:a800::,2001:df5:a800:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:b000::,2001:df5:b000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df5:b800::,2001:df5:b800:ffff:ffff:ffff:ffff:ffff,HK +2001:df5:c800::,2001:df5:c800:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:d000::,2001:df5:d000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:d800::,2001:df5:d800:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:e000::,2001:df5:e000:ffff:ffff:ffff:ffff:ffff,MY +2001:df5:e800::,2001:df5:e800:ffff:ffff:ffff:ffff:ffff,PH +2001:df5:f000::,2001:df5:f000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:f800::,2001:df5:f800:ffff:ffff:ffff:ffff:ffff,SG +2001:df6::,2001:df6:1:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:800::,2001:df6:80f:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:1000::,2001:df6:1000:ffff:ffff:ffff:ffff:ffff,PH +2001:df6:1800::,2001:df6:1800:ffff:ffff:ffff:ffff:ffff,ID +2001:df6:2000::,2001:df6:2001:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:2800::,2001:df6:2800:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:3000::,2001:df6:3000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df6:3800::,2001:df6:3800:ffff:ffff:ffff:ffff:ffff,NZ +2001:df6:4000::,2001:df6:4001:ffff:ffff:ffff:ffff:ffff,AU +2001:df6:4800::,2001:df6:4801:ffff:ffff:ffff:ffff:ffff,NZ +2001:df6:5000::,2001:df6:5000:ffff:ffff:ffff:ffff:ffff,AU +2001:df6:5800::,2001:df6:5800:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:6000::,2001:df6:6000:ffff:ffff:ffff:ffff:ffff,JP +2001:df6:6800::,2001:df6:6800:ffff:ffff:ffff:ffff:ffff,CN +2001:df6:7000::,2001:df6:7000:ffff:ffff:ffff:ffff:ffff,VN +2001:df6:7800::,2001:df6:7800:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:8000::,2001:df6:8000:ffff:ffff:ffff:ffff:ffff,JP +2001:df6:8800::,2001:df6:8800:ffff:ffff:ffff:ffff:ffff,AU +2001:df6:9000::,2001:df6:9000:ffff:ffff:ffff:ffff:ffff,AU +2001:df6:9800::,2001:df6:9800:ffff:ffff:ffff:ffff:ffff,AU +2001:df6:a000::,2001:df6:a000:ffff:ffff:ffff:ffff:ffff,JP +2001:df6:a800::,2001:df6:a800:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:b000::,2001:df6:b000:ffff:ffff:ffff:ffff:ffff,TH +2001:df6:b800::,2001:df6:b800:ffff:ffff:ffff:ffff:ffff,SG +2001:df6:c000::,2001:df6:c000:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:c800::,2001:df6:c800:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:d000::,2001:df6:d000:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:d800::,2001:df6:d800:ffff:ffff:ffff:ffff:ffff,BD +2001:df6:e800::,2001:df6:e800:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:f000::,2001:df6:f000:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:f800::,2001:df6:f800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7::,2001:df7::ffff:ffff:ffff:ffff:ffff,IN +2001:df7:800::,2001:df7:800:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:1000::,2001:df7:1000:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:1800::,2001:df7:1800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:2000::,2001:df7:2000:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:2800::,2001:df7:2800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:3000::,2001:df7:3001:ffff:ffff:ffff:ffff:ffff,NZ +2001:df7:3800::,2001:df7:3800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:4000::,2001:df7:4000:ffff:ffff:ffff:ffff:ffff,SG +2001:df7:4800::,2001:df7:481f:ffff:ffff:ffff:ffff:ffff,JP +2001:df7:5000::,2001:df7:5000:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:5800::,2001:df7:5800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:6000::,2001:df7:6000:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:6800::,2001:df7:6800:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:7000::,2001:df7:7000:ffff:ffff:ffff:ffff:ffff,HK +2001:df7:7800::,2001:df7:7800:ffff:ffff:ffff:ffff:ffff,JP +2001:df7:8800::,2001:df7:8800:ffff:ffff:ffff:ffff:ffff,ID +2001:df7:9000::,2001:df7:9000:ffff:ffff:ffff:ffff:ffff,PH +2001:df7:9800::,2001:df7:9800:ffff:ffff:ffff:ffff:ffff,NZ +2001:df7:a000::,2001:df7:a000:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:a800::,2001:df7:a800:ffff:ffff:ffff:ffff:ffff,JP +2001:df7:b000::,2001:df7:b000:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:b800::,2001:df7:b800:ffff:ffff:ffff:ffff:ffff,SG +2001:df7:c000::,2001:df7:c003:ffff:ffff:ffff:ffff:ffff,SG +2001:df7:c800::,2001:df7:c800:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:d000::,2001:df7:d000:ffff:ffff:ffff:ffff:ffff,BD +2001:df7:d800::,2001:df7:d800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:e000::,2001:df7:e000:ffff:ffff:ffff:ffff:ffff,IN +2001:df7:e800::,2001:df7:e800:ffff:ffff:ffff:ffff:ffff,AU +2001:df7:f000::,2001:df7:f000:ffff:ffff:ffff:ffff:ffff,JP +2001:df7:f800::,2001:df7:f800:ffff:ffff:ffff:ffff:ffff,IN +2001:df8::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:e00::,2001:e01:ffff:ffff:ffff:ffff:ffff:ffff,ID 2001:e08::,2001:e08:ffff:ffff:ffff:ffff:ffff:ffff,CN 2001:e10::,2001:e10:ffff:ffff:ffff:ffff:ffff:ffff,TW @@ -303,7 +3281,7 @@ 2001:13e8::,2001:13e8:ffff:ffff:ffff:ffff:ffff:ffff,AR 2001:13f0::,2001:13f0:ffff:ffff:ffff:ffff:ffff:ffff,DO 2001:13f8::,2001:13f8:ffff:ffff:ffff:ffff:ffff:ffff,CO -2001:1400::,2001:1400:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:1400::,2001:1407:ffff:ffff:ffff:ffff:ffff:ffff,SE 2001:1408::,2001:1408:ffff:ffff:ffff:ffff:ffff:ffff,AT 2001:1410::,2001:1410:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:1418::,2001:1418:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -316,7 +3294,9 @@ 2001:1450::,2001:1450:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:1458::,2001:1459:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:1460::,2001:1460:ffff:ffff:ffff:ffff:ffff:ffff,NL -2001:1468::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:1468::,2001:1469:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:146a::,2001:146a::ffff:ffff:ffff:ffff:ffff,RU +2001:146a:1::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:1470::,2001:1477:ffff:ffff:ffff:ffff:ffff:ffff,SI 2001:1478::,2001:1478:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:1488::,2001:1488:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -386,7 +3366,9 @@ 2001:16a8::,2001:16a8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:16b0::,2001:16b0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2001:16b8::,2001:16b8:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:16c0::,2001:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR +2001:16c0::,2001:16c0:1233:ffff:ffff:ffff:ffff:ffff,IR +2001:16c0:1234::,2001:16c0:1234:ffff:ffff:ffff:ffff:ffff,AU +2001:16c0:1235::,2001:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR 2001:16c8::,2001:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:16d8::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -497,7 +3479,7 @@ 2001:1b50::,2001:1b57:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:1b58::,2001:1b58:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:1b60::,2001:1b67:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:1b68::,2001:1b68:ffff:ffff:ffff:ffff:ffff:ffff,TR +2001:1b68::,2001:1b6f:ffff:ffff:ffff:ffff:ffff:ffff,TR 2001:1b70::,2001:1b77:ffff:ffff:ffff:ffff:ffff:ffff,SE 2001:1b78::,2001:1b78:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:1b80::,2001:1b80:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -517,6 +3499,8 @@ 2001:1bf0::,2001:1bf7:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:1bf8::,2001:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,LV 2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:2002:4e48::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE +2001:2003:54fa::,2001:2003:54fa:ffff:ffff:ffff:ffff:ffff,FI 2001:4000::,2001:4000:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:4010::,2001:4010:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4018::,2001:4018:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -575,7 +3559,6 @@ 2001:41f0::,2001:41f0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:41f8::,2001:41f8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4200::,2001:4200:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2001:4208::,2001:4208:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2001:4210::,2001:4210:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2001:4218::,2001:4218:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2001:4220::,2001:4220:ffff:ffff:ffff:ffff:ffff:ffff,EG @@ -626,7 +3609,7 @@ 2001:43c8::,2001:43c8:ffff:ffff:ffff:ffff:ffff:ffff,EG 2001:43d0::,2001:43d0:ffff:ffff:ffff:ffff:ffff:ffff,KE 2001:43d8::,2001:43d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2001:43e0::,2001:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GH +2001:43e0::,2001:43e0:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2001:43e8::,2001:43e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f0::,2001:43f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW 2001:43f8::,2001:43f8:1:ffff:ffff:ffff:ffff:ffff,TZ @@ -656,7 +3639,7 @@ 2001:43f8:1c0::,2001:43f8:1c0:ffff:ffff:ffff:ffff:ffff,DZ 2001:43f8:1d0::,2001:43f8:1d0:ffff:ffff:ffff:ffff:ffff,GH 2001:43f8:1e0::,2001:43f8:1e0:ffff:ffff:ffff:ffff:ffff,NG -2001:43f8:1f0::,2001:43f8:1f5:ffff:ffff:ffff:ffff:ffff,ZA +2001:43f8:1f0::,2001:43f8:1f6:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:200::,2001:43f8:200:ffff:ffff:ffff:ffff:ffff,KE 2001:43f8:210::,2001:43f8:210:ffff:ffff:ffff:ffff:ffff,LS 2001:43f8:230::,2001:43f8:230:ffff:ffff:ffff:ffff:ffff,ZA @@ -724,7 +3707,34 @@ 2001:43f8:9a0::,2001:43f8:9a0:ffff:ffff:ffff:ffff:ffff,BJ 2001:43f8:9b0::,2001:43f8:9b1:ffff:ffff:ffff:ffff:ffff,SZ 2001:43f8:9c0::,2001:43f8:9c0:ffff:ffff:ffff:ffff:ffff,DJ -2001:4400::,2001:44ff:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:43f8:9d0::,2001:43f8:9d0:ffff:ffff:ffff:ffff:ffff,AO +2001:43f8:9e0::,2001:43f8:9e0:ffff:ffff:ffff:ffff:ffff,ZW +2001:43f8:9f0::,2001:43f8:9f0:ffff:ffff:ffff:ffff:ffff,NG +2001:43f8:a00::,2001:43f8:a00:ffff:ffff:ffff:ffff:ffff,NG +2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN +2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2001:4420::,2001:4420:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:4428::,2001:4428:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2001:4430::,2001:4430:ffff:ffff:ffff:ffff:ffff:ffff,KR +2001:4438::,2001:4438:ffff:ffff:ffff:ffff:ffff:ffff,CN +2001:4450::,2001:4450:ffff:ffff:ffff:ffff:ffff:ffff,PH +2001:4458::,2001:4458:ffff:ffff:ffff:ffff:ffff:ffff,MY +2001:4460::,2001:4460:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:4470::,2001:4470:ffff:ffff:ffff:ffff:ffff:ffff,MY +2001:4478::,2001:447b:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:4480::,2001:4480:ffff:ffff:ffff:ffff:ffff:ffff,HK +2001:4488::,2001:448b:ffff:ffff:ffff:ffff:ffff:ffff,ID +2001:4490::,2001:4493:ffff:ffff:ffff:ffff:ffff:ffff,IN +2001:4498::,2001:4498:ffff:ffff:ffff:ffff:ffff:ffff,MY +2001:44a0::,2001:44a0:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:44a8::,2001:44a8:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:44b0::,2001:44b0:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:44b8::,2001:44b8:ffff:ffff:ffff:ffff:ffff:ffff,AU +2001:44c0::,2001:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IN +2001:44c8::,2001:44c8:ffff:ffff:ffff:ffff:ffff:ffff,TH +2001:44d0::,2001:44df:ffff:ffff:ffff:ffff:ffff:ffff,KR +2001:44f0::,2001:44f0:ffff:ffff:ffff:ffff:ffff:ffff,TW 2001:4500::,2001:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW 2001:4508::,2001:4508:ffff:ffff:ffff:ffff:ffff:ffff,TW 2001:4510::,2001:4517:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -735,7 +3745,38 @@ 2001:4540::,2001:455f:ffff:ffff:ffff:ffff:ffff:ffff,TW 2001:4580::,2001:45bf:ffff:ffff:ffff:ffff:ffff:ffff,TW 2001:4600::,2001:46ff:ffff:ffff:ffff:ffff:ffff:ffff,NO -2001:4800::,2001:48ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4800::,2001:4808:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4810::,2001:4810:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4818::,2001:4818:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:4828::,2001:4828:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4830::,2001:4830:11ff:ffff:ffff:ffff:ffff:ffff,US +2001:4830:1200::,2001:4830:1200:ffff:ffff:ffff:ffff:ffff,AU +2001:4830:1201::,2001:4830:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4838::,2001:4838:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4840::,2001:4840:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4848::,2001:4848:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4850::,2001:4850:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4858::,2001:4858:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4860::,2001:4860:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4868::,2001:4868:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4870::,2001:4871:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4878::,2001:4878:8304:ffff:ffff:ffff:ffff:ffff,US +2001:4878:8305::,2001:4878:8305:ffff:ffff:ffff:ffff:ffff,IN +2001:4878:8306::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4888::,2001:4888:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4890::,2001:4890:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4898::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48a0::,2001:48a0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48a8::,2001:48a8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48b0::,2001:48b0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48b8::,2001:48b8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48c0::,2001:48c0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48c8::,2001:48c8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48d0::,2001:48d0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48d8::,2001:48d8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48e0::,2001:48e0:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48e8::,2001:48e8:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:48f8::,2001:48f8:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4900::,2001:4900:ffff:ffff:ffff:ffff:ffff:ffff,CA 2001:4908::,2001:4908:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4910::,2001:4910:ffff:ffff:ffff:ffff:ffff:ffff,BM @@ -788,7 +3829,7 @@ 2001:4b90::,2001:4b90:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:4b98::,2001:4b98:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:4ba0::,2001:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:4ba8::,2001:4ba8:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:4ba8::,2001:4baf:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4bb0::,2001:4bb0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:4bb8::,2001:4bb8:ffff:ffff:ffff:ffff:ffff:ffff,AT 2001:4bc0::,2001:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -799,14 +3840,73 @@ 2001:4be8::,2001:4be8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4bf0::,2001:4bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4bf8::,2001:4bf8:ffff:ffff:ffff:ffff:ffff:ffff,CH -2001:4c00::,2001:4dff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4c00::,2001:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:4c08::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4c10::,2001:4c10:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:4c20::,2001:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4c28::,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO +2001:4c30::,2001:4c30:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:4c38::,2001:4c3f:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:4c40::,2001:4c40:ffff:ffff:ffff:ffff:ffff:ffff,BE +2001:4c48::,2001:4c4f:ffff:ffff:ffff:ffff:ffff:ffff,HU +2001:4c50::,2001:4c57:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4c58::,2001:4c5f:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:4c60::,2001:4c60:ffff:ffff:ffff:ffff:ffff:ffff,ES +2001:4c68::,2001:4c68:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4c70::,2001:4c70:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:4c78::,2001:4c78:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:4c80::,2001:4c80:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4c88::,2001:4c88:ffff:ffff:ffff:ffff:ffff:ffff,IR +2001:4c90::,2001:4c97:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:4c98::,2001:4c98:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ca0::,2001:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ca8::,2001:4ca8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4cb0::,2001:4cb0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4cb8::,2001:4cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:4cc0::,2001:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,PT +2001:4cc8::,2001:4cc8:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:4cd0::,2001:4cd0:ffff:ffff:ffff:ffff:ffff:ffff,IL +2001:4cd8::,2001:4cd8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ce0::,2001:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4ce8::,2001:4cf0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4cf8::,2001:4cf8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4d00::,2001:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AM +2001:4d08::,2001:4d08:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4d10::,2001:4d10:ffff:ffff:ffff:ffff:ffff:ffff,ES +2001:4d18::,2001:4d18:ffff:ffff:ffff:ffff:ffff:ffff,RO +2001:4d20::,2001:4d20:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4d30::,2001:4d30:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4d38::,2001:4d38:ffff:ffff:ffff:ffff:ffff:ffff,IT +2001:4d48::,2001:4d48:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4d50::,2001:4d50:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4d58::,2001:4d58:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:4d60::,2001:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:4d68::,2001:4d68:ffff:ffff:ffff:ffff:ffff:ffff,IE +2001:4d70::,2001:4d70:ffff:ffff:ffff:ffff:ffff:ffff,GR +2001:4d78::,2001:4d78:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4d80::,2001:4d80:ffff:ffff:ffff:ffff:ffff:ffff,RO +2001:4d88::,2001:4d88:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4d90::,2001:4d90:ffff:ffff:ffff:ffff:ffff:ffff,ES +2001:4d98::,2001:4d98:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:4da0::,2001:4da7:ffff:ffff:ffff:ffff:ffff:ffff,CH +2001:4da8::,2001:4da8:ffff:ffff:ffff:ffff:ffff:ffff,NO +2001:4db0::,2001:4db0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4db8::,2001:4db8:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:4dc0::,2001:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4dc8::,2001:4dc8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4dd0::,2001:4dd7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:4dd8::,2001:4dd8:ffff:ffff:ffff:ffff:ffff:ffff,NO +2001:4de0::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:4de8::,2001:4de8:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL 2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2001:a000::,2001:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:b000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW -2003::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2003::,2003:62:4401:ffff:ffff:ffff:ffff:ffff,DE +2003:62:4402::,2003:62:4402:ffff:ffff:ffff:ffff:ffff,US +2003:62:4403::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR 2400:1000::,2400:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP -2400:1080::,2400:1080:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:1100::,2400:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:1200::,2400:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2400:1300::,2400:1300:ffff:ffff:ffff:ffff:ffff:ffff,TW @@ -885,7 +3985,6 @@ 2400:4c00::,2400:4c00:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:4c80::,2400:4c80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:4d00::,2400:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:4d80::,2400:4d80:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:4e00::,2400:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:4e80::,2400:4e80:ffff:ffff:ffff:ffff:ffff:ffff,TW 2400:4f00::,2400:4f00:ffff:ffff:ffff:ffff:ffff:ffff,PK @@ -1003,7 +4102,8 @@ 2400:8780::,2400:8780:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:8800::,2400:8800:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:8880::,2400:8880:ffff:ffff:ffff:ffff:ffff:ffff,IN -2400:8900::,2400:8900:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:8900::,2400:8900::ffff:ffff:ffff:ffff:ffff,JP +2400:8900:1::,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:8980::,2400:8980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8a80::,2400:8a80:ffff:ffff:ffff:ffff:ffff:ffff,PH @@ -1051,7 +4151,6 @@ 2400:a000::,2400:a000:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:a080::,2400:a080:ffff:ffff:ffff:ffff:ffff:ffff,JP 2400:a100::,2400:a100:ffff:ffff:ffff:ffff:ffff:ffff,NP -2400:a180::,2400:a180:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:a280::,2400:a280:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:a300::,2400:a300:ffff:ffff:ffff:ffff:ffff:ffff,JP 2400:a380::,2400:a380:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -1131,7 +4230,15 @@ 2400:c980::,2400:c980:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:ca00::,2400:ca00:ffff:ffff:ffff:ffff:ffff:ffff,BD 2400:ca80::,2400:ca80:ffff:ffff:ffff:ffff:ffff:ffff,AU -2400:cb00::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00::,2400:cb00:20:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:21::,2400:cb00:21:ffff:ffff:ffff:ffff:ffff,IT +2400:cb00:22::,2400:cb00:24:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:25::,2400:cb00:25:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:26::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:39::,2400:cb00:39:ffff:ffff:ffff:ffff:ffff,IT +2400:cb00:3a::,2400:cb00:f00c:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:f00d::,2400:cb00:f00d:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:f00e::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:cb80::,2400:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:cc00::,2400:cc00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:cc80::,2400:cc80:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -1372,6 +4479,7 @@ 2401:4480::,2401:4480:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:4500::,2401:4500:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:4580::,2401:4580:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:4600::,2401:4600:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:4680::,2401:4680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:4700::,2401:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:4780::,2401:4780:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -1402,85 +4510,165 @@ 2401:5480::,2401:5480:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:5500::,2401:5500:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:5580::,2401:5580:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2401:5680::,2401:5680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:5700::,2401:5700:ffff:ffff:ffff:ffff:ffff:ffff,TH +2401:5780::,2401:5780:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:5800::,2401:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:5880::,2401:5880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:5900::,2401:5900:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:5980::,2401:5980:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:5a00::,2401:5a00:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:5a80::,2401:5a80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:5b00::,2401:5b00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:5b80::,2401:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:5c00::,2401:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:5c80::,2401:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:5d00::,2401:5d00:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:5d80::,2401:5d80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:5e00::,2401:5e00:ffff:ffff:ffff:ffff:ffff:ffff,TW +2401:5e80::,2401:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:5f00::,2401:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:5f80::,2401:5f80:ffff:ffff:ffff:ffff:ffff:ffff,VN 2401:6000::,2401:6fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:7000::,2401:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2401:7080::,2401:7080:ffff:ffff:ffff:ffff:ffff:ffff,TW 2401:7100::,2401:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:7180::,2401:7180:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7200::,2401:7200:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:7280::,2401:7280:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:7300::,2401:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:7380::,2401:7380:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:7400::,2401:7401:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:7480::,2401:7480:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:7500::,2401:7500:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:7580::,2401:7580:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7600::,2401:7600:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:7680::,2401:7680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7700::,2401:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:7780::,2401:7780:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7800::,2401:7800:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:7880::,2401:7880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7900::,2401:7900:ffff:ffff:ffff:ffff:ffff:ffff,LK +2401:7980::,2401:7980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7a00::,2401:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:7a80::,2401:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7b00::,2401:7b00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:7b80::,2401:7b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7c00::,2401:7c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2401:7c80::,2401:7c80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7d00::,2401:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:7d80::,2401:7d80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:7e00::,2401:7e00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:7e80::,2401:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:7f00::,2401:7f00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:7f80::,2401:7f80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:8000::,2401:803f:ffff:ffff:ffff:ffff:ffff:ffff,TW +2401:8080::,2401:8080:ffff:ffff:ffff:ffff:ffff:ffff,AF 2401:8100::,2401:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:8180::,2401:8180:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:8200::,2401:8200:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:8280::,2401:8280:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:8300::,2401:8300:ffff:ffff:ffff:ffff:ffff:ffff,MV +2401:8380::,2401:8380:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:8400::,2401:8400:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:8480::,2401:8480:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:8500::,2401:8500:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:8580::,2401:8580:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:8600::,2401:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:8680::,2401:8680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:8700::,2401:8700:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:8780::,2401:8780:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:8800::,2401:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:8880::,2401:8880:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:8900::,2401:8900:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:8980::,2401:8980:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:8a00::,2401:8a00:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:8a80::,2401:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:8b00::,2401:8b00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:8b80::,2401:8b80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:8c00::,2401:8c01:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:8c80::,2401:8c80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2401:8d00::,2401:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:8d80::,2401:8d80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:8e00::,2401:8e00:ffff:ffff:ffff:ffff:ffff:ffff,PK +2401:8e80::,2401:8e80:ffff:ffff:ffff:ffff:ffff:ffff,PH 2401:8f00::,2401:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:8f80::,2401:8f80:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:9080::,2401:9080:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:9100::,2401:9100:ffff:ffff:ffff:ffff:ffff:ffff,MO +2401:9180::,2401:9180:ffff:ffff:ffff:ffff:ffff:ffff,TW 2401:9200::,2401:9200:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:9280::,2401:9280:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:9300::,2401:9300:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:9380::,2401:9380:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:9400::,2401:9400:ffff:ffff:ffff:ffff:ffff:ffff,PH +2401:9480::,2401:9480:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:9500::,2401:9500:ffff:ffff:ffff:ffff:ffff:ffff,PH +2401:9580::,2401:9580:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:9600::,2401:9600:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:9680::,2401:9680:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:9700::,2401:9700:ffff:ffff:ffff:ffff:ffff:ffff,KH +2401:9780::,2401:9780:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:9800::,2401:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH -2401:9900::,2401:9900:ffff:ffff:ffff:ffff:ffff:ffff,LK +2401:9880::,2401:9880:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:9980::,2401:9980:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:9a00::,2401:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:9a80::,2401:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:9b00::,2401:9b00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:9b80::,2401:9b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:9c00::,2401:9c00:ffff:ffff:ffff:ffff:ffff:ffff,BD +2401:9c80::,2401:9c80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:9d00::,2401:9d00:ffff:ffff:ffff:ffff:ffff:ffff,TH +2401:9d80::,2401:9d80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:9e00::,2401:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK +2401:9e80::,2401:9e80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2401:9f00::,2401:9f00:ffff:ffff:ffff:ffff:ffff:ffff,HK +2401:9f80::,2401:9f80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:a000::,2401:a000:ffff:ffff:ffff:ffff:ffff:ffff,KR +2401:a080::,2401:a080:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:a100::,2401:a100:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:a180::,2401:a180:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:a280::,2401:a280:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:a300::,2401:a300:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:a380::,2401:a380:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:a400::,2401:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:a480::,2401:a480:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:a500::,2401:a500:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:a580::,2401:a580:ffff:ffff:ffff:ffff:ffff:ffff,TH 2401:a600::,2401:a600:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:a680::,2401:a680:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:a700::,2401:a700:ffff:ffff:ffff:ffff:ffff:ffff,KH +2401:a780::,2401:a780:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:a800::,2401:a800:ffff:ffff:ffff:ffff:ffff:ffff,KR +2401:a880::,2401:a880:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:a900::,2401:a900:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:a980::,2401:a980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:aa00::,2401:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:aa80::,2401:aa80:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:ab00::,2401:ab00:ffff:ffff:ffff:ffff:ffff:ffff,TW +2401:ab80::,2401:ab80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:ac00::,2401:ac00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:ac80::,2401:ac80:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:ad00::,2401:ad00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2401:ad80::,2401:ad80:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:ae00::,2401:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID +2401:ae80::,2401:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:af00::,2401:af00:ffff:ffff:ffff:ffff:ffff:ffff,NC +2401:af80::,2401:af80:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:b000::,2401:b000:ffff:ffff:ffff:ffff:ffff:ffff,MY +2401:b080::,2401:b080:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:b100::,2401:b100:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:b180::,2401:b180:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:b200::,2401:b200:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:b280::,2401:b280:ffff:ffff:ffff:ffff:ffff:ffff,HK 2401:b300::,2401:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:b380::,2401:b380:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:b400::,2401:b400:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:b480::,2401:b480:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:b500::,2401:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU +2401:b580::,2401:b580:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:b600::,2401:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN +2401:b680::,2401:b680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:b700::,2401:b700:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:b800::,2401:b800:ffff:ffff:ffff:ffff:ffff:ffff,VN 2401:b900::,2401:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH @@ -1548,7 +4736,16 @@ 2401:f700::,2401:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:f800::,2401:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:f900::,2401:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG -2401:fa00::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00::,2401:fa00::ffff:ffff:ffff:ffff:ffff,AU +2401:fa00:1::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:d::,2401:fa00:d:ffff:ffff:ffff:ffff:ffff,KR +2401:fa00:e::,2401:fa00:e:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:f::,2401:fa00:f:ffff:ffff:ffff:ffff:ffff,SG +2401:fa00:10::,2401:fa00:14:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:15::,2401:fa00:15:ffff:ffff:ffff:ffff:ffff,JP +2401:fa00:16::,2401:fa00:3f:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:40::,2401:fa00:40:ffff:ffff:ffff:ffff:ffff,CN +2401:fa00:41::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:fb00::,2401:fb00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:fc00::,2401:fc00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:fd00::,2401:fd00:ffff:ffff:ffff:ffff:ffff:ffff,MY @@ -2005,6 +5202,7 @@ 2403:d400::,2403:d400:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:d500::,2403:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:d600::,2403:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU +2403:d700::,2403:d700:ffff:ffff:ffff:ffff:ffff:ffff,MN 2403:d800::,2403:d800:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2403:d900::,2403:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:da00::,2403:da00:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -2290,7 +5488,7 @@ 2404:e500::,2404:e500:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:e600::,2404:e600:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:e700::,2404:e700:ffff:ffff:ffff:ffff:ffff:ffff,ID -2404:e800::,2404:e8ff:ffff:ffff:ffff:ffff:ffff:ffff,SG +2404:e800::,2404:e801:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:e900::,2404:e900:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:ea00::,2404:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:eb00::,2404:eb00:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -2307,7 +5505,13 @@ 2404:f600::,2404:f600:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:f700::,2404:f700:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:f800::,2404:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP -2404:f801::,2404:f801:ffff:ffff:ffff:ffff:ffff:ffff,SG +2404:f801::,2404:f801:7:ffff:ffff:ffff:ffff:ffff,SG +2404:f801:8::,2404:f801:8:ffff:ffff:ffff:ffff:ffff,IN +2404:f801:9::,2404:f801:802f:ffff:ffff:ffff:ffff:ffff,SG +2404:f801:8030::,2404:f801:8030:ffff:ffff:ffff:ffff:ffff,IN +2404:f801:8031::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG +2404:f801:8058::,2404:f801:8058:ffff:ffff:ffff:ffff:ffff,IN +2404:f801:8059::,2404:f801:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:f900::,2404:f900:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:fa00::,2404:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:fb00::,2404:fb00:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -2520,7 +5724,6 @@ 2405:d200::,2405:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP 2405:d300::,2405:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:d400::,2405:d400:ffff:ffff:ffff:ffff:ffff:ffff,PH -2405:d500::,2405:d500:ffff:ffff:ffff:ffff:ffff:ffff,HK 2405:d600::,2405:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:d700::,2405:d700:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:d800::,2405:d800:ffff:ffff:ffff:ffff:ffff:ffff,SG @@ -2537,7 +5740,6 @@ 2405:e600::,2405:e600:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:e700::,2405:e700:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:e800::,2405:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP -2405:e900::,2405:e900:ffff:ffff:ffff:ffff:ffff:ffff,PH 2405:ea00::,2405:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2405:eb00::,2405:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG 2405:ec00::,2405:ec00:ffff:ffff:ffff:ffff:ffff:ffff,BT @@ -2590,7 +5792,11 @@ 2406:1d00::,2406:1d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2406:1e00::,2406:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2406:1f00::,2406:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2406:2000::,2406:2000:ffff:ffff:ffff:ffff:ffff:ffff,TW +2406:2000::,2406:2000:ef95:ffff:ffff:ffff:ffff:ffff,TW +2406:2000:ef96::,2406:2000:ef96:ffff:ffff:ffff:ffff:ffff,HK +2406:2000:ef97::,2406:2000:efb9:ffff:ffff:ffff:ffff:ffff,TW +2406:2000:efba::,2406:2000:efba:ffff:ffff:ffff:ffff:ffff,HK +2406:2000:efbb::,2406:2000:ffff:ffff:ffff:ffff:ffff:ffff,TW 2406:2100::,2406:2100:ffff:ffff:ffff:ffff:ffff:ffff,IN 2406:2200::,2406:2200:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:2300::,2406:2300:ffff:ffff:ffff:ffff:ffff:ffff,NZ @@ -2606,7 +5812,7 @@ 2406:2d00::,2406:2d00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2406:2e00::,2406:2e00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2406:2f00::,2406:2f00:ffff:ffff:ffff:ffff:ffff:ffff,IN -2406:3000::,2406:30ff:ffff:ffff:ffff:ffff:ffff:ffff,SG +2406:3000::,2406:3003:ffff:ffff:ffff:ffff:ffff:ffff,SG 2406:3100::,2406:3100:ffff:ffff:ffff:ffff:ffff:ffff,TH 2406:3200::,2406:3200:ffff:ffff:ffff:ffff:ffff:ffff,PH 2406:3300::,2406:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -2677,6 +5883,7 @@ 2406:7400::,2406:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN 2406:7500::,2406:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:7600::,2406:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU +2406:7700::,2406:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY 2406:7800::,2406:7801:ffff:ffff:ffff:ffff:ffff:ffff,BN 2406:7900::,2406:7900:ffff:ffff:ffff:ffff:ffff:ffff,TH 2406:7a00::,2406:7a00:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -2837,7 +6044,6 @@ 2407:1c00::,2407:1c00:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:1d00::,2407:1d00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:1e00::,2407:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2407:1f00::,2407:1f00:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:2000::,2407:2000:ffff:ffff:ffff:ffff:ffff:ffff,KR 2407:2100::,2407:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:2200::,2407:2200:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -2951,7 +6157,6 @@ 2407:9300::,2407:9300:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:9400::,2407:9400:ffff:ffff:ffff:ffff:ffff:ffff,MY 2407:9500::,2407:9500:ffff:ffff:ffff:ffff:ffff:ffff,NP -2407:9700::,2407:9700:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:9800::,2407:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH 2407:9900::,2407:9900:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:9a00::,2407:9a00:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -3064,6 +6269,7 @@ 240b:240::,240b:27f:ffff:ffff:ffff:ffff:ffff:ffff,JP 240b:8000::,240b:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN 240c::,240c:f:ffff:ffff:ffff:ffff:ffff:ffff,CN +240c:8000::,240c:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN 240d::,240d:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP 240e::,240e:fff:ffff:ffff:ffff:ffff:ffff:ffff,CN 240f::,240f:ff:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -3088,10 +6294,9 @@ 2600:1900::,2600:190f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:1a00::,2600:1a0f:ffff:ffff:ffff:ffff:ffff:ffff,GD 2600:1b00::,2600:1bff:ffff:ffff:ffff:ffff:ffff:ffff,JM -2600:1c00::,2600:1c0f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:1d00::,2600:1d0f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:1e00::,2600:1e0f:ffff:ffff:ffff:ffff:ffff:ffff,VC -2600:2000::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US +2600:1f00::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2400::,2600:2407:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2800::,2600:2803:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:2c00::,2600:2c03:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3119,7 +6324,7 @@ 2600:8400::,2600:840f:ffff:ffff:ffff:ffff:ffff:ffff,BB 2600:8800::,2600:880f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:e000::,2600:e00f:ffff:ffff:ffff:ffff:ffff:ffff,CA -2601::,2601:ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2601::,2601:f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602::,2602:10f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:200::,2602:200:ffff:ffff:ffff:ffff:ffff:ffff,CA 2602:210::,2602:210:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -3127,7 +6332,23 @@ 2602:230::,2602:231:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:232::,2602:232:ffff:ffff:ffff:ffff:ffff:ffff,CA 2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US -2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2602:300::,2602:306:b868:ffff:ffff:ffff:ffff:ffff,US +2602:306:b869::,2602:306:b869:ffff:ffff:ffff:ffff:ffff,NL +2602:306:b86a::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa2::,2602:ffa2:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa3::,2602:ffa3:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa4::,2602:ffa4:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa5::,2602:ffa5:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa6::,2602:ffa6:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa7::,2602:ffa7:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa8::,2602:ffa8:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffa9::,2602:ffa9:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffaa::,2602:ffaa:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffab::,2602:ffab:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffac::,2602:ffac:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffad::,2602:ffad:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffae::,2602:ffae:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffaf::,2602:ffaf:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffb0::,2602:ffb0:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffb1::,2602:ffb1:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ffb2::,2602:ffb2:fff:ffff:ffff:ffff:ffff:ffff,US @@ -3269,7 +6490,9 @@ 2604:1e80::,2604:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:1f00::,2604:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:1f80::,2604:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CA -2604:2000::,2604:2100:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2000::,2604:2000:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2080::,2604:2080:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2100::,2604:2100:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2180::,2604:2180:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2200::,2604:2200:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2280::,2604:2280:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3395,7 +6618,9 @@ 2604:5e80::,2604:5e80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:5f00::,2604:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:5f80::,2604:5f80:ffff:ffff:ffff:ffff:ffff:ffff,US -2604:6000::,2604:6100:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:6000::,2604:6000:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:6080::,2604:6080:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:6100::,2604:6100:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:6180::,2604:6180:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:6200::,2604:6200:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:6280::,2604:6280:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3469,10 +6694,10 @@ 2604:8500::,2604:8500:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:8580::,2604:8580:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:8600::,2604:8600:ffff:ffff:ffff:ffff:ffff:ffff,CA -2604:8680::,2604:8680:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:8700::,2604:8700:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:8780::,2604:8780:ffff:ffff:ffff:ffff:ffff:ffff,US -2604:8800::,2604:88ff:ffff:ffff:ffff:ffff:ffff:ffff,CA +2604:8800::,2604:8800:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:8880::,2604:8880:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:8900::,2604:8900:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:8980::,2604:8980:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:8a00::,2604:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3558,6 +6783,7 @@ 2604:b200::,2604:b200:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:b280::,2604:b280:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:b300::,2604:b300:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:b380::,2604:b380:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:b400::,2604:b400:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:b480::,2604:b480:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:b500::,2604:b500:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3601,6 +6827,7 @@ 2604:c800::,2604:c800:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:c880::,2604:c880:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:c900::,2604:c900:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:c980::,2604:c980:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:ca00::,2604:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:ca80::,2604:ca80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:cb00::,2604:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3630,7 +6857,6 @@ 2604:d700::,2604:d700:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:d780::,2604:d780:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:d800::,2604:d801:ffff:ffff:ffff:ffff:ffff:ffff,US -2604:d880::,2604:d880:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:d900::,2604:d900:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:d980::,2604:d980:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:da00::,2604:da00:fff:ffff:ffff:ffff:ffff:ffff,US @@ -3745,7 +6971,6 @@ 2605:1080::,2605:1080:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:1100::,2605:1100:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:1180::,2605:1180:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:1200::,2605:1200:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:1280::,2605:1280:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:1300::,2605:1300:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:1380::,2605:1380:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -3800,6 +7025,7 @@ 2605:2c80::,2605:2c80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2d00::,2605:2d00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2d80::,2605:2d80:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:2e00::,2605:2e00:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:2e80::,2605:2e80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2f00::,2605:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:2f80::,2605:2f80:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3852,7 +7078,6 @@ 2605:4700::,2605:4700:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:4780::,2605:4780:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:4800::,2605:4800:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:4880::,2605:4880:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:4900::,2605:4900:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:4980::,2605:4980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:4a00::,2605:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -3882,7 +7107,6 @@ 2605:5600::,2605:5600:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5680::,2605:5680:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5700::,2605:5700:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:5780::,2605:5780:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5800::,2605:5800:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5880::,2605:5880:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5900::,2605:5900:ffff:ffff:ffff:ffff:ffff:ffff,JM @@ -3899,7 +7123,9 @@ 2605:5e80::,2605:5e80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5f00::,2605:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:5f80::,2605:5f80:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:6000::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:6000::,2605:6000:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:6080::,2605:6080:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:6100::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:6180::,2605:6180:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:6200::,2605:6200:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:6280::,2605:6280:ffff:ffff:ffff:ffff:ffff:ffff,AI @@ -4014,39 +7240,77 @@ 2605:9900::,2605:9900:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9980::,2605:9980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9a00::,2605:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:9a80::,2605:9a80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9b00::,2605:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:9b80::,2605:9b80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9c00::,2605:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:9c80::,2605:9c80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9d00::,2605:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:9d80::,2605:9d80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9e00::,2605:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:9e80::,2605:9e80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:9f00::,2605:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:a000::,2605:a100:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:9f80::,2605:9f80:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a000::,2605:a000:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a080::,2605:a080:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a100::,2605:a100:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a180::,2605:a180:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a200::,2605:a200:ffff:ffff:ffff:ffff:ffff:ffff,JM +2605:a280::,2605:a280:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a300::,2605:a300:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a380::,2605:a380:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a400::,2605:a40f:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a480::,2605:a480:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a500::,2605:a500:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:a600::,2605:a700:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a580::,2605:a580:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a600::,2605:a601:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a680::,2605:a680:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:a700::,2605:a700:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a780::,2605:a780:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a800::,2605:a800:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:a880::,2605:a880:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a900::,2605:a900:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:a980::,2605:a980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:aa00::,2605:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:aa80::,2605:aa80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ab00::,2605:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:ab80::,2605:ab80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ac00::,2605:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:ac80::,2605:ac80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ad00::,2605:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:ad80::,2605:ad80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ae00::,2605:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:ae80::,2605:ae80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:af00::,2605:af00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:af80::,2605:af80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b000::,2605:b000:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:b080::,2605:b080:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b100::,2605:b100:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:b180::,2605:b180:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b200::,2605:b200:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:b280::,2605:b280:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b300::,2605:b300:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:b380::,2605:b380:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b400::,2605:b400:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:b480::,2605:b480:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:b500::,2605:b500:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:b580::,2605:b580:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b600::,2605:b600:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:b680::,2605:b680:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b700::,2605:b700:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:b780::,2605:b780:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b800::,2605:b800:ffff:ffff:ffff:ffff:ffff:ffff,PR +2605:b880::,2605:b880:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:b900::,2605:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:b980::,2605:b980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ba00::,2605:ba00:ffff:ffff:ffff:ffff:ffff:ffff,PR +2605:ba80::,2605:ba80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:bb00::,2605:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:bb80::,2605:bb80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:bc00::,2605:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:bc80::,2605:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:bd00::,2605:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:bd80::,2605:bd80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:be00::,2605:be00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:bf00::,2605:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:c000::,2605:c000:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -4081,7 +7345,8 @@ 2605:dd00::,2605:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:de00::,2605:de00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:df00::,2605:df00:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:e000::,2605:e100:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:e000::,2605:e000:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:e100::,2605:e100:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e200::,2605:e200:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:e300::,2605:e300:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:e400::,2605:e400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -4208,7 +7473,8 @@ 2606:5d00::,2606:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:5e00::,2606:5e00:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:5f00::,2606:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PR -2606:6000::,2606:6100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:6000::,2606:6000:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:6100::,2606:6100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:6200::,2606:6200:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:6300::,2606:6300:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:6400::,2606:6400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -4271,7 +7537,10 @@ 2606:9d00::,2606:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:9e00::,2606:9e00:ffff:ffff:ffff:ffff:ffff:ffff,BM 2606:9f00::,2606:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:a000::,2606:a100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:a000::,2606:a000:dd41:f5ff:ffff:ffff:ffff:ffff,US +2606:a000:dd41:f600::,2606:a000:dd41:f7ff:ffff:ffff:ffff:ffff,AU +2606:a000:dd41:f800::,2606:a000:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:a100::,2606:a100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a200::,2606:a200:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a300::,2606:a300:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a400::,2606:a400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -4320,7 +7589,7 @@ 2606:d000::,2606:d000:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d100::,2606:d100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d200::,2606:d200:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:d300::,2606:d300:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:d300::,2606:d300:fff:ffff:ffff:ffff:ffff:ffff,US 2606:d400::,2606:d400:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d500::,2606:d500:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d600::,2606:d600:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -4694,7 +7963,36 @@ 2607:f2e8::,2607:f2e8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f2f0::,2607:f2f0:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f2f8::,2607:f2f8:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:f300::,2607:f400:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f300::,2607:f300:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f308::,2607:f308:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f310::,2607:f310:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f318::,2607:f318:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f330::,2607:f330:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f338::,2607:f338:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:f340::,2607:f340:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f348::,2607:f348:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f350::,2607:f350:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f358::,2607:f358:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f360::,2607:f360:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f368::,2607:f368:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f370::,2607:f370:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f378::,2607:f378:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f380::,2607:f380:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f388::,2607:f388:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f390::,2607:f390:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f398::,2607:f398:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3a0::,2607:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3b0::,2607:f3b0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3b8::,2607:f3b8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3c0::,2607:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3c8::,2607:f3c8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3d0::,2607:f3d0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3d8::,2607:f3d8:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:f3e0::,2607:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:f3e8::,2607:f3e8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3f0::,2607:f3f0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f3f8::,2607:f3f8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f400::,2607:f400:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f408::,2607:f408:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f418::,2607:f418:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f420::,2607:f420:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -4933,7 +8231,38 @@ 2607:fbe8::,2607:fbe8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fbf0::,2607:fbf0:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fbf8::,2607:fbf8:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:fc00::,2607:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc00::,2607:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc08::,2607:fc08:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc10::,2607:fc10:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:fc18::,2607:fc18:fff:ffff:ffff:ffff:ffff:ffff,US +2607:fc20::,2607:fc20:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc28::,2607:fc28:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc30::,2607:fc30:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc38::,2607:fc38:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc40::,2607:fc40:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc48::,2607:fc48:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc50::,2607:fc50:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc58::,2607:fc58:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc60::,2607:fc60:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc68::,2607:fc68:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc70::,2607:fc70:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:fc78::,2607:fc78:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:fc80::,2607:fc80:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc88::,2607:fc88:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc90::,2607:fc90:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fc98::,2607:fc98:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fca0::,2607:fca0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fca8::,2607:fca8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fcb8::,2607:fcb8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fcc0::,2607:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:fcc8::,2607:fcc8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fcd0::,2607:fcd0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fcd8::,2607:fcd8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fce0::,2607:fce0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fce8::,2607:fce8:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fcf0::,2607:fcf0:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:fcf8::,2607:fcf8:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:fd00::,2607:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fd08::,2607:fd08:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fd10::,2607:fd10:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:fd28::,2607:fd28:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -5098,7 +8427,1042 @@ 2610:1e8::,2610:1e8:ffff:ffff:ffff:ffff:ffff:ffff,CA 2610:1f0::,2610:1f0:ffff:ffff:ffff:ffff:ffff:ffff,US 2610:1f8::,2610:1f8:ffff:ffff:ffff:ffff:ffff:ffff,US -2620::,2620:100:f:ffff:ffff:ffff:ffff:ffff,US +2620::,2620::ffff:ffff:ffff:ffff:ffff,US +2620:0:10::,2620::10:ffff:ffff:ffff:ffff:ffff,US +2620:0:20::,2620::20:ffff:ffff:ffff:ffff:ffff,US +2620:0:30::,2620::37:ffff:ffff:ffff:ffff:ffff,US +2620:0:60::,2620::60:ffff:ffff:ffff:ffff:ffff,FR +2620:0:70::,2620::70:ffff:ffff:ffff:ffff:ffff,US +2620:0:80::,2620::80:ffff:ffff:ffff:ffff:ffff,US +2620:0:90::,2620::90:ffff:ffff:ffff:ffff:ffff,US +2620:0:a0::,2620::a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:b0::,2620::b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:c0::,2620::c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:f0::,2620::f0:ffff:ffff:ffff:ffff:ffff,CA +2620:0:100::,2620::100:ffff:ffff:ffff:ffff:ffff,US +2620:0:110::,2620::110:ffff:ffff:ffff:ffff:ffff,US +2620:0:120::,2620::120:ffff:ffff:ffff:ffff:ffff,US +2620:0:140::,2620::140:ffff:ffff:ffff:ffff:ffff,US +2620:0:150::,2620::150:ffff:ffff:ffff:ffff:ffff,US +2620:0:160::,2620::160:ffff:ffff:ffff:ffff:ffff,CA +2620:0:170::,2620::170:ffff:ffff:ffff:ffff:ffff,US +2620:0:180::,2620::180:ffff:ffff:ffff:ffff:ffff,US +2620:0:190::,2620::190:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a0::,2620::1a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1b0::,2620::1b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1c0::,2620::1c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1d0::,2620::1d0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1f0::,2620::1f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:200::,2620::200:ffff:ffff:ffff:ffff:ffff,US +2620:0:210::,2620::210:ffff:ffff:ffff:ffff:ffff,US +2620:0:220::,2620::220:ffff:ffff:ffff:ffff:ffff,US +2620:0:230::,2620::230:ffff:ffff:ffff:ffff:ffff,CA +2620:0:240::,2620::240:ffff:ffff:ffff:ffff:ffff,US +2620:0:250::,2620::250:ffff:ffff:ffff:ffff:ffff,US +2620:0:260::,2620::260:ffff:ffff:ffff:ffff:ffff,US +2620:0:270::,2620::270:ffff:ffff:ffff:ffff:ffff,US +2620:0:280::,2620::280:ffff:ffff:ffff:ffff:ffff,US +2620:0:290::,2620::290:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b0::,2620::2b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2c0::,2620::2c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2d0::,2620::2d0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2f0::,2620::2f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:300::,2620::300:ffff:ffff:ffff:ffff:ffff,US +2620:0:320::,2620::320:ffff:ffff:ffff:ffff:ffff,US +2620:0:350::,2620::353:ffff:ffff:ffff:ffff:ffff,US +2620:0:360::,2620::361:ffff:ffff:ffff:ffff:ffff,US +2620:0:380::,2620::380:ffff:ffff:ffff:ffff:ffff,US +2620:0:390::,2620::390:ffff:ffff:ffff:ffff:ffff,US +2620:0:3b0::,2620::3b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:3c0::,2620::3c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:3e0::,2620::3e0:ffff:ffff:ffff:ffff:ffff,US +2620:0:3f0::,2620::3f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:400::,2620::57f:ffff:ffff:ffff:ffff:ffff,US +2620:0:600::,2620::600:ffff:ffff:ffff:ffff:ffff,US +2620:0:610::,2620::61f:ffff:ffff:ffff:ffff:ffff,US +2620:0:630::,2620::630:ffff:ffff:ffff:ffff:ffff,US +2620:0:640::,2620::640:ffff:ffff:ffff:ffff:ffff,US +2620:0:650::,2620::650:ffff:ffff:ffff:ffff:ffff,US +2620:0:660::,2620::660:ffff:ffff:ffff:ffff:ffff,US +2620:0:670::,2620::671:ffff:ffff:ffff:ffff:ffff,US +2620:0:680::,2620::680:ffff:ffff:ffff:ffff:ffff,US +2620:0:690::,2620::691:ffff:ffff:ffff:ffff:ffff,US +2620:0:6a0::,2620::6a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:6b0::,2620::6b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:6c0::,2620::6c7:ffff:ffff:ffff:ffff:ffff,US +2620:0:6d0::,2620::6d0:ffff:ffff:ffff:ffff:ffff,US +2620:0:6e0::,2620::6e0:ffff:ffff:ffff:ffff:ffff,US +2620:0:6f0::,2620::6f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:700::,2620::77f:ffff:ffff:ffff:ffff:ffff,US +2620:0:800::,2620::802:ffff:ffff:ffff:ffff:ffff,US +2620:0:810::,2620::810:ffff:ffff:ffff:ffff:ffff,CA +2620:0:820::,2620::820:ffff:ffff:ffff:ffff:ffff,US +2620:0:840::,2620::840:ffff:ffff:ffff:ffff:ffff,US +2620:0:850::,2620::850:ffff:ffff:ffff:ffff:ffff,US +2620:0:860::,2620::863:ffff:ffff:ffff:ffff:ffff,US +2620:0:870::,2620::877:ffff:ffff:ffff:ffff:ffff,US +2620:0:880::,2620::880:ffff:ffff:ffff:ffff:ffff,US +2620:0:890::,2620::890:ffff:ffff:ffff:ffff:ffff,US +2620:0:8a0::,2620::8a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:8d0::,2620::8d0:ffff:ffff:ffff:ffff:ffff,US +2620:0:8e0::,2620::8e0:ffff:ffff:ffff:ffff:ffff,US +2620:0:8f0::,2620::8f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:900::,2620::900:ffff:ffff:ffff:ffff:ffff,US +2620:0:910::,2620::910:ffff:ffff:ffff:ffff:ffff,US +2620:0:920::,2620::920:ffff:ffff:ffff:ffff:ffff,US +2620:0:930::,2620::930:ffff:ffff:ffff:ffff:ffff,US +2620:0:940::,2620::940:ffff:ffff:ffff:ffff:ffff,US +2620:0:950::,2620::950:ffff:ffff:ffff:ffff:ffff,US +2620:0:960::,2620::960:ffff:ffff:ffff:ffff:ffff,US +2620:0:970::,2620::970:ffff:ffff:ffff:ffff:ffff,US +2620:0:980::,2620::980:ffff:ffff:ffff:ffff:ffff,US +2620:0:990::,2620::990:ffff:ffff:ffff:ffff:ffff,US +2620:0:9a0::,2620::9a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:9b0::,2620::9b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:9c0::,2620::9c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:9e0::,2620::9e0:ffff:ffff:ffff:ffff:ffff,US +2620:0:9f0::,2620::9f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:a00::,2620::a1f:ffff:ffff:ffff:ffff:ffff,US +2620:0:b00::,2620::b00:ffff:ffff:ffff:ffff:ffff,US +2620:0:b10::,2620::b13:ffff:ffff:ffff:ffff:ffff,US +2620:0:b20::,2620::b20:ffff:ffff:ffff:ffff:ffff,US +2620:0:b30::,2620::b30:ffff:ffff:ffff:ffff:ffff,US +2620:0:b40::,2620::b40:ffff:ffff:ffff:ffff:ffff,US +2620:0:b50::,2620::b50:ffff:ffff:ffff:ffff:ffff,US +2620:0:b60::,2620::b61:ffff:ffff:ffff:ffff:ffff,US +2620:0:b80::,2620::b80:ffff:ffff:ffff:ffff:ffff,US +2620:0:b90::,2620::b90:ffff:ffff:ffff:ffff:ffff,US +2620:0:ba0::,2620::ba0:ffff:ffff:ffff:ffff:ffff,US +2620:0:bb0::,2620::bb0:ffff:ffff:ffff:ffff:ffff,US +2620:0:bd0::,2620::bd0:ffff:ffff:ffff:ffff:ffff,CA +2620:0:be0::,2620::be0:ffff:ffff:ffff:ffff:ffff,US +2620:0:bf0::,2620::bf0:ffff:ffff:ffff:ffff:ffff,US +2620:0:c10::,2620::c20:ffff:ffff:ffff:ffff:ffff,US +2620:0:c30::,2620::c30:ffff:ffff:ffff:ffff:ffff,US +2620:0:c40::,2620::c40:ffff:ffff:ffff:ffff:ffff,US +2620:0:c60::,2620::c60:ffff:ffff:ffff:ffff:ffff,US +2620:0:c70::,2620::c70:ffff:ffff:ffff:ffff:ffff,US +2620:0:c80::,2620::c80:ffff:ffff:ffff:ffff:ffff,US +2620:0:c90::,2620::ca0:ffff:ffff:ffff:ffff:ffff,US +2620:0:cb0::,2620::cb0:ffff:ffff:ffff:ffff:ffff,US +2620:0:cc0::,2620::ccf:ffff:ffff:ffff:ffff:ffff,US +2620:0:ce0::,2620::ce0:ffff:ffff:ffff:ffff:ffff,US +2620:0:cf0::,2620::cf0:ffff:ffff:ffff:ffff:ffff,US +2620:0:d20::,2620::d20:ffff:ffff:ffff:ffff:ffff,US +2620:0:d30::,2620::d30:ffff:ffff:ffff:ffff:ffff,US +2620:0:d50::,2620::d50:ffff:ffff:ffff:ffff:ffff,US +2620:0:d60::,2620::d63:ffff:ffff:ffff:ffff:ffff,US +2620:0:d70::,2620::d77:ffff:ffff:ffff:ffff:ffff,US +2620:0:d80::,2620::d80:ffff:ffff:ffff:ffff:ffff,US +2620:0:d90::,2620::d90:ffff:ffff:ffff:ffff:ffff,US +2620:0:dc0::,2620::dc0:ffff:ffff:ffff:ffff:ffff,US +2620:0:dd0::,2620::dd0:ffff:ffff:ffff:ffff:ffff,CN +2620:0:de0::,2620::de0:ffff:ffff:ffff:ffff:ffff,US +2620:0:df0::,2620::df0:ffff:ffff:ffff:ffff:ffff,US +2620:0:e00::,2620::e00:ffff:ffff:ffff:ffff:ffff,US +2620:0:e10::,2620::e10:ffff:ffff:ffff:ffff:ffff,US +2620:0:e20::,2620::e23:ffff:ffff:ffff:ffff:ffff,US +2620:0:e30::,2620::e30:ffff:ffff:ffff:ffff:ffff,US +2620:0:e50::,2620::e50:ffff:ffff:ffff:ffff:ffff,US +2620:0:e60::,2620::e60:ffff:ffff:ffff:ffff:ffff,US +2620:0:e80::,2620::e80:ffff:ffff:ffff:ffff:ffff,US +2620:0:e90::,2620::e90:ffff:ffff:ffff:ffff:ffff,US +2620:0:ea0::,2620::eb0:ffff:ffff:ffff:ffff:ffff,US +2620:0:ed0::,2620::ed0:ffff:ffff:ffff:ffff:ffff,US +2620:0:ee0::,2620::ee0:ffff:ffff:ffff:ffff:ffff,US +2620:0:ef0::,2620::ef0:ffff:ffff:ffff:ffff:ffff,US +2620:0:f00::,2620::f7f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1000::,2620::101f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1020::,2620::1020:ffff:ffff:ffff:ffff:ffff,MX +2620:0:1021::,2620::103f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1040::,2620::1040:ffff:ffff:ffff:ffff:ffff,IE +2620:0:1041::,2620::1041:ffff:ffff:ffff:ffff:ffff,US +2620:0:1042::,2620::1042:ffff:ffff:ffff:ffff:ffff,GB +2620:0:1043::,2620::104a:ffff:ffff:ffff:ffff:ffff,US +2620:0:104b::,2620::104b:ffff:ffff:ffff:ffff:ffff,NL +2620:0:104c::,2620::105e:ffff:ffff:ffff:ffff:ffff,US +2620:0:105f::,2620::105f:ffff:ffff:ffff:ffff:ffff,CH +2620:0:1060::,2620::106a:ffff:ffff:ffff:ffff:ffff,US +2620:0:106b::,2620::106b:ffff:ffff:ffff:ffff:ffff,RU +2620:0:106c::,2620::1072:ffff:ffff:ffff:ffff:ffff,US +2620:0:1073::,2620::1073:ffff:ffff:ffff:ffff:ffff,GB +2620:0:1074::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US +2620:0:1400::,2620::143f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1500::,2620::157f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1600::,2620::167f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1700::,2620::170f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1800::,2620::181f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a00::,2620::1a00:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a10::,2620::1a10:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a20::,2620::1a20:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a30::,2620::1a30:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a40::,2620::1a40:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a50::,2620::1a50:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a70::,2620::1a70:ffff:ffff:ffff:ffff:ffff,US +2620:0:1a80::,2620::1a80:ffff:ffff:ffff:ffff:ffff,US +2620:0:1aa0::,2620::1aa0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1ab0::,2620::1ab0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1ac0::,2620::1ac0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1ad0::,2620::1ad7:ffff:ffff:ffff:ffff:ffff,US +2620:0:1ae0::,2620::1ae0:ffff:ffff:ffff:ffff:ffff,US +2620:0:1af0::,2620::1af0:ffff:ffff:ffff:ffff:ffff,CA +2620:0:1b00::,2620::1b07:ffff:ffff:ffff:ffff:ffff,US +2620:0:1c00::,2620::1cff:ffff:ffff:ffff:ffff:ffff,US +2620:0:2000::,2620::203f:ffff:ffff:ffff:ffff:ffff,US +2620:0:2210::,2620::2210:ffff:ffff:ffff:ffff:ffff,US +2620:0:2220::,2620::2220:ffff:ffff:ffff:ffff:ffff,CA +2620:0:2240::,2620::2240:ffff:ffff:ffff:ffff:ffff,US +2620:0:2250::,2620::2250:ffff:ffff:ffff:ffff:ffff,US +2620:0:2260::,2620::2260:ffff:ffff:ffff:ffff:ffff,US +2620:0:2280::,2620::2280:ffff:ffff:ffff:ffff:ffff,US +2620:0:2290::,2620::2290:ffff:ffff:ffff:ffff:ffff,US +2620:0:22a0::,2620::22a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:22b0::,2620::22b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:22c0::,2620::22c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:22d0::,2620::22d0:ffff:ffff:ffff:ffff:ffff,US +2620:0:22e0::,2620::22e0:ffff:ffff:ffff:ffff:ffff,CA +2620:0:22f0::,2620::22f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2300::,2620::230f:ffff:ffff:ffff:ffff:ffff,US +2620:0:2400::,2620::24ff:ffff:ffff:ffff:ffff:ffff,US +2620:0:2800::,2620::2800:ffff:ffff:ffff:ffff:ffff,US +2620:0:2810::,2620::2810:ffff:ffff:ffff:ffff:ffff,US +2620:0:2820::,2620::2820:ffff:ffff:ffff:ffff:ffff,US +2620:0:2830::,2620::2830:ffff:ffff:ffff:ffff:ffff,US +2620:0:2840::,2620::2840:ffff:ffff:ffff:ffff:ffff,US +2620:0:2850::,2620::2850:ffff:ffff:ffff:ffff:ffff,US +2620:0:2860::,2620::2860:ffff:ffff:ffff:ffff:ffff,US +2620:0:2870::,2620::2870:ffff:ffff:ffff:ffff:ffff,US +2620:0:2880::,2620::2880:ffff:ffff:ffff:ffff:ffff,US +2620:0:28a0::,2620::28a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:28b0::,2620::28b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:28d0::,2620::28d0:ffff:ffff:ffff:ffff:ffff,US +2620:0:28f0::,2620::28f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2900::,2620::290f:ffff:ffff:ffff:ffff:ffff,US +2620:0:2a00::,2620::2a1f:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b00::,2620::2b00:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b10::,2620::2b10:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b20::,2620::2b20:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b30::,2620::2b40:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b50::,2620::2b50:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b60::,2620::2b60:ffff:ffff:ffff:ffff:ffff,US +2620:0:2b70::,2620::2b8f:ffff:ffff:ffff:ffff:ffff,US +2620:0:2bc0::,2620::2bc3:ffff:ffff:ffff:ffff:ffff,US +2620:0:2be0::,2620::2be0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2d00::,2620::2d7f:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e00::,2620::2e00:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e10::,2620::2e10:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e30::,2620::2e30:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e40::,2620::2e40:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e50::,2620::2e50:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e60::,2620::2e60:ffff:ffff:ffff:ffff:ffff,US +2620:0:2e70::,2620::2e80:ffff:ffff:ffff:ffff:ffff,US +2620:0:2ea0::,2620::2ea0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2eb0::,2620::2eb0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2ed0::,2620::2ed0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2ee0::,2620::2ee0:ffff:ffff:ffff:ffff:ffff,US +2620:0:2f00::,2620::2f7f:ffff:ffff:ffff:ffff:ffff,US +2620:0:5000::,2620::5000:ffff:ffff:ffff:ffff:ffff,US +2620:0:5010::,2620::5010:ffff:ffff:ffff:ffff:ffff,US +2620:0:5030::,2620::5030:ffff:ffff:ffff:ffff:ffff,US +2620:0:5040::,2620::5040:ffff:ffff:ffff:ffff:ffff,US +2620:0:5050::,2620::5050:ffff:ffff:ffff:ffff:ffff,US +2620:0:5060::,2620::5060:ffff:ffff:ffff:ffff:ffff,CA +2620:0:5070::,2620::5070:ffff:ffff:ffff:ffff:ffff,US +2620:0:5080::,2620::5080:ffff:ffff:ffff:ffff:ffff,US +2620:0:5090::,2620::5090:ffff:ffff:ffff:ffff:ffff,US +2620:0:50a0::,2620::50a0:ffff:ffff:ffff:ffff:ffff,US +2620:0:50b0::,2620::50b0:ffff:ffff:ffff:ffff:ffff,US +2620:0:50c0::,2620::50c0:ffff:ffff:ffff:ffff:ffff,US +2620:0:50d0::,2620::50d1:ffff:ffff:ffff:ffff:ffff,US +2620:0:50e0::,2620::50e0:ffff:ffff:ffff:ffff:ffff,US +2620:0:50f0::,2620::50f0:ffff:ffff:ffff:ffff:ffff,US +2620:0:5100::,2620::510f:ffff:ffff:ffff:ffff:ffff,US +2620:0:5200::,2620::5200:ffff:ffff:ffff:ffff:ffff,US +2620:0:5300::,2620::530f:ffff:ffff:ffff:ffff:ffff,US +2620:0:aa00::,2620::aa00:ffff:ffff:ffff:ffff:ffff,US +2620:1::,2620:1::ffff:ffff:ffff:ffff:ffff,US +2620:1:4000::,2620:1:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1:8000::,2620:1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1:c000::,2620:1:c000:ffff:ffff:ffff:ffff:ffff,US +2620:2::,2620:2::ffff:ffff:ffff:ffff:ffff,US +2620:2:4000::,2620:2:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:2:8000::,2620:2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:2:c000::,2620:2:c000:ffff:ffff:ffff:ffff:ffff,US +2620:3::,2620:3::ffff:ffff:ffff:ffff:ffff,US +2620:3:4000::,2620:3:4000:ffff:ffff:ffff:ffff:ffff,US +2620:3:8000::,2620:3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3:c000::,2620:3:c000:ffff:ffff:ffff:ffff:ffff,US +2620:4::,2620:4::ffff:ffff:ffff:ffff:ffff,US +2620:4:4000::,2620:4:4000:ffff:ffff:ffff:ffff:ffff,US +2620:4:8000::,2620:4:8000:ffff:ffff:ffff:ffff:ffff,US +2620:4:c000::,2620:4:c000:ffff:ffff:ffff:ffff:ffff,US +2620:5::,2620:5::ffff:ffff:ffff:ffff:ffff,US +2620:5:4000::,2620:5:400f:ffff:ffff:ffff:ffff:ffff,US +2620:5:8000::,2620:5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:5:c000::,2620:5:c000:ffff:ffff:ffff:ffff:ffff,US +2620:6::,2620:6::ffff:ffff:ffff:ffff:ffff,CA +2620:6:4000::,2620:6:4000:ffff:ffff:ffff:ffff:ffff,US +2620:6:8000::,2620:6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:6:c000::,2620:6:c000:ffff:ffff:ffff:ffff:ffff,US +2620:7::,2620:7::ffff:ffff:ffff:ffff:ffff,US +2620:7:4000::,2620:7:4000:ffff:ffff:ffff:ffff:ffff,US +2620:7:8000::,2620:7:8000:ffff:ffff:ffff:ffff:ffff,US +2620:7:c000::,2620:7:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8::,2620:8:7f:ffff:ffff:ffff:ffff:ffff,CA +2620:8:8200::,2620:8:8200:ffff:ffff:ffff:ffff:ffff,US +2620:9::,2620:9::ffff:ffff:ffff:ffff:ffff,US +2620:9:4000::,2620:9:4000:ffff:ffff:ffff:ffff:ffff,US +2620:9:8000::,2620:9:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9:c000::,2620:9:c000:ffff:ffff:ffff:ffff:ffff,US +2620:a::,2620:a:f:ffff:ffff:ffff:ffff:ffff,CA +2620:a:4000::,2620:a:4000:ffff:ffff:ffff:ffff:ffff,US +2620:a:8000::,2620:a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a:c000::,2620:a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:b::,2620:b::ffff:ffff:ffff:ffff:ffff,US +2620:b:4000::,2620:b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:b:8000::,2620:b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b:c000::,2620:b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:c::,2620:c::ffff:ffff:ffff:ffff:ffff,US +2620:c:4000::,2620:c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:c:8000::,2620:c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c:c000::,2620:c:c000:ffff:ffff:ffff:ffff:ffff,US +2620:d::,2620:d::ffff:ffff:ffff:ffff:ffff,US +2620:d:4000::,2620:d:4000:ffff:ffff:ffff:ffff:ffff,US +2620:d:8000::,2620:d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d:c000::,2620:d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:e::,2620:e::ffff:ffff:ffff:ffff:ffff,US +2620:e:4000::,2620:e:4000:ffff:ffff:ffff:ffff:ffff,US +2620:e:8000::,2620:e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e:c000::,2620:e:c000:ffff:ffff:ffff:ffff:ffff,US +2620:f::,2620:f:f:ffff:ffff:ffff:ffff:ffff,US +2620:f:4000::,2620:f:4000:ffff:ffff:ffff:ffff:ffff,US +2620:f:8000::,2620:f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f:c000::,2620:f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:10::,2620:10::ffff:ffff:ffff:ffff:ffff,US +2620:10:4000::,2620:10:4000:ffff:ffff:ffff:ffff:ffff,US +2620:10:8000::,2620:10:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:10:c000::,2620:10:c000:ffff:ffff:ffff:ffff:ffff,US +2620:11::,2620:11:ff:ffff:ffff:ffff:ffff:ffff,US +2620:11:4000::,2620:11:4000:ffff:ffff:ffff:ffff:ffff,US +2620:11:8000::,2620:11:8000:ffff:ffff:ffff:ffff:ffff,US +2620:11:c000::,2620:11:c000:ffff:ffff:ffff:ffff:ffff,US +2620:12::,2620:12::ffff:ffff:ffff:ffff:ffff,US +2620:12:4000::,2620:12:4000:ffff:ffff:ffff:ffff:ffff,US +2620:12:8000::,2620:12:8000:ffff:ffff:ffff:ffff:ffff,US +2620:12:c000::,2620:12:c000:ffff:ffff:ffff:ffff:ffff,US +2620:13::,2620:13::ffff:ffff:ffff:ffff:ffff,CA +2620:13:4000::,2620:13:4000:ffff:ffff:ffff:ffff:ffff,US +2620:13:8000::,2620:13:8000:ffff:ffff:ffff:ffff:ffff,US +2620:13:c000::,2620:13:c000:ffff:ffff:ffff:ffff:ffff,US +2620:14::,2620:14::ffff:ffff:ffff:ffff:ffff,US +2620:14:4000::,2620:14:4000:ffff:ffff:ffff:ffff:ffff,US +2620:14:8000::,2620:14:8000:ffff:ffff:ffff:ffff:ffff,US +2620:14:c000::,2620:14:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:15::,2620:15::ffff:ffff:ffff:ffff:ffff,US +2620:15:4000::,2620:15:4000:ffff:ffff:ffff:ffff:ffff,US +2620:15:8000::,2620:15:8000:ffff:ffff:ffff:ffff:ffff,US +2620:15:c000::,2620:15:c000:ffff:ffff:ffff:ffff:ffff,US +2620:16::,2620:16::ffff:ffff:ffff:ffff:ffff,CA +2620:16:4000::,2620:16:4000:ffff:ffff:ffff:ffff:ffff,US +2620:16:8000::,2620:16:8000:ffff:ffff:ffff:ffff:ffff,US +2620:16:c000::,2620:16:c000:ffff:ffff:ffff:ffff:ffff,US +2620:17::,2620:17::ffff:ffff:ffff:ffff:ffff,US +2620:17:4000::,2620:17:4000:ffff:ffff:ffff:ffff:ffff,US +2620:17:8000::,2620:17:800f:ffff:ffff:ffff:ffff:ffff,US +2620:17:c000::,2620:17:c000:ffff:ffff:ffff:ffff:ffff,US +2620:18::,2620:18::ffff:ffff:ffff:ffff:ffff,US +2620:18:4000::,2620:18:4000:ffff:ffff:ffff:ffff:ffff,US +2620:18:8000::,2620:18:8000:ffff:ffff:ffff:ffff:ffff,US +2620:18:c000::,2620:18:c000:ffff:ffff:ffff:ffff:ffff,KN +2620:19::,2620:19::ffff:ffff:ffff:ffff:ffff,US +2620:19:4000::,2620:19:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:19:8000::,2620:19:8000:ffff:ffff:ffff:ffff:ffff,US +2620:19:c000::,2620:19:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1a::,2620:1a::ffff:ffff:ffff:ffff:ffff,US +2620:1a:4000::,2620:1a:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1a:8000::,2620:1a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1a:c000::,2620:1a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1b::,2620:1b:f:ffff:ffff:ffff:ffff:ffff,US +2620:1b:4000::,2620:1b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1b:8000::,2620:1b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1b:c000::,2620:1b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1c::,2620:1c::ffff:ffff:ffff:ffff:ffff,US +2620:1c:4000::,2620:1c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1c:8000::,2620:1c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1c:c000::,2620:1c:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1d::,2620:1d::ffff:ffff:ffff:ffff:ffff,US +2620:1d:4000::,2620:1d:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1d:8000::,2620:1d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1d:c000::,2620:1d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1e::,2620:1e::ffff:ffff:ffff:ffff:ffff,US +2620:1e:4000::,2620:1e:4000:ffff:ffff:ffff:ffff:ffff,US +2620:1e:8000::,2620:1e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1e:c000::,2620:1e:c000:ffff:ffff:ffff:ffff:ffff,US +2620:1f::,2620:1f::ffff:ffff:ffff:ffff:ffff,US +2620:1f:4000::,2620:1f:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:1f:8000::,2620:1f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:1f:c000::,2620:1f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:20::,2620:20::ffff:ffff:ffff:ffff:ffff,US +2620:20:4000::,2620:20:4000:ffff:ffff:ffff:ffff:ffff,US +2620:20:8000::,2620:20:8000:ffff:ffff:ffff:ffff:ffff,US +2620:20:c000::,2620:20:c000:ffff:ffff:ffff:ffff:ffff,US +2620:21::,2620:21::ffff:ffff:ffff:ffff:ffff,US +2620:21:4000::,2620:21:4000:ffff:ffff:ffff:ffff:ffff,US +2620:21:8000::,2620:21:8000:ffff:ffff:ffff:ffff:ffff,US +2620:21:c000::,2620:21:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:22::,2620:22::ffff:ffff:ffff:ffff:ffff,US +2620:22:4000::,2620:22:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:22:8000::,2620:22:8000:ffff:ffff:ffff:ffff:ffff,US +2620:22:c000::,2620:22:c000:ffff:ffff:ffff:ffff:ffff,US +2620:23::,2620:23::ffff:ffff:ffff:ffff:ffff,US +2620:23:4000::,2620:23:4000:ffff:ffff:ffff:ffff:ffff,US +2620:23:8000::,2620:23:8000:ffff:ffff:ffff:ffff:ffff,US +2620:23:c000::,2620:23:c000:ffff:ffff:ffff:ffff:ffff,US +2620:24::,2620:24:1f:ffff:ffff:ffff:ffff:ffff,US +2620:24:8080::,2620:24:8080:ffff:ffff:ffff:ffff:ffff,US +2620:25::,2620:25::ffff:ffff:ffff:ffff:ffff,US +2620:25:4000::,2620:25:4000:ffff:ffff:ffff:ffff:ffff,US +2620:25:8000::,2620:25:8000:ffff:ffff:ffff:ffff:ffff,US +2620:25:c000::,2620:25:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:26::,2620:26::ffff:ffff:ffff:ffff:ffff,US +2620:26:4000::,2620:26:400f:ffff:ffff:ffff:ffff:ffff,US +2620:26:8000::,2620:26:8000:ffff:ffff:ffff:ffff:ffff,US +2620:26:c000::,2620:26:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:27::,2620:27:f:ffff:ffff:ffff:ffff:ffff,US +2620:27:8080::,2620:27:8080:ffff:ffff:ffff:ffff:ffff,US +2620:28::,2620:28::ffff:ffff:ffff:ffff:ffff,US +2620:28:4000::,2620:28:400f:ffff:ffff:ffff:ffff:ffff,US +2620:28:8000::,2620:28:8000:ffff:ffff:ffff:ffff:ffff,US +2620:28:c000::,2620:28:c000:ffff:ffff:ffff:ffff:ffff,US +2620:29::,2620:29::ffff:ffff:ffff:ffff:ffff,US +2620:29:4000::,2620:29:4000:ffff:ffff:ffff:ffff:ffff,US +2620:29:8000::,2620:29:8000:ffff:ffff:ffff:ffff:ffff,US +2620:29:c000::,2620:29:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:2a::,2620:2a::ffff:ffff:ffff:ffff:ffff,US +2620:2a:4000::,2620:2a:400f:ffff:ffff:ffff:ffff:ffff,US +2620:2a:8000::,2620:2a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:2a:c000::,2620:2a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:2b::,2620:2b::ffff:ffff:ffff:ffff:ffff,US +2620:2b:4000::,2620:2b:400f:ffff:ffff:ffff:ffff:ffff,US +2620:2b:8000::,2620:2b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:2b:c000::,2620:2b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:2c::,2620:2c:f:ffff:ffff:ffff:ffff:ffff,US +2620:2c:8080::,2620:2c:8080:ffff:ffff:ffff:ffff:ffff,US +2620:2d::,2620:2d::ffff:ffff:ffff:ffff:ffff,US +2620:2d:4000::,2620:2d:400f:ffff:ffff:ffff:ffff:ffff,US +2620:2d:8000::,2620:2d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:2d:c000::,2620:2d:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:2e::,2620:2e:3f:ffff:ffff:ffff:ffff:ffff,US +2620:2e:8080::,2620:2e:8080:ffff:ffff:ffff:ffff:ffff,US +2620:2f::,2620:2f::ffff:ffff:ffff:ffff:ffff,CA +2620:2f:4000::,2620:2f:4000:ffff:ffff:ffff:ffff:ffff,US +2620:2f:8000::,2620:2f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:2f:c000::,2620:2f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:30::,2620:30::ffff:ffff:ffff:ffff:ffff,US +2620:30:4000::,2620:30:4000:ffff:ffff:ffff:ffff:ffff,US +2620:30:8000::,2620:30:8000:ffff:ffff:ffff:ffff:ffff,US +2620:30:c000::,2620:30:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:31::,2620:31::ffff:ffff:ffff:ffff:ffff,US +2620:31:4000::,2620:31:40ff:ffff:ffff:ffff:ffff:ffff,US +2620:31:8000::,2620:31:8000:ffff:ffff:ffff:ffff:ffff,US +2620:31:c000::,2620:31:c000:ffff:ffff:ffff:ffff:ffff,US +2620:32::,2620:32::ffff:ffff:ffff:ffff:ffff,US +2620:32:4000::,2620:32:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:32:8000::,2620:32:8000:ffff:ffff:ffff:ffff:ffff,US +2620:32:c000::,2620:32:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:33::,2620:33::ffff:ffff:ffff:ffff:ffff,US +2620:33:4000::,2620:33:400f:ffff:ffff:ffff:ffff:ffff,US +2620:33:8000::,2620:33:8000:ffff:ffff:ffff:ffff:ffff,US +2620:33:c000::,2620:33:c000:ffff:ffff:ffff:ffff:ffff,US +2620:34::,2620:34::ffff:ffff:ffff:ffff:ffff,US +2620:34:4000::,2620:34:4000:ffff:ffff:ffff:ffff:ffff,US +2620:34:8000::,2620:34:8000:ffff:ffff:ffff:ffff:ffff,US +2620:34:c000::,2620:34:c000:ffff:ffff:ffff:ffff:ffff,US +2620:35::,2620:35::ffff:ffff:ffff:ffff:ffff,US +2620:35:4000::,2620:35:400f:ffff:ffff:ffff:ffff:ffff,CA +2620:35:8000::,2620:35:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:35:c000::,2620:35:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:36::,2620:36::ffff:ffff:ffff:ffff:ffff,US +2620:36:4000::,2620:36:400f:ffff:ffff:ffff:ffff:ffff,CA +2620:36:8000::,2620:36:8000:ffff:ffff:ffff:ffff:ffff,US +2620:36:c000::,2620:36:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:37::,2620:37::ffff:ffff:ffff:ffff:ffff,US +2620:37:4000::,2620:37:400f:ffff:ffff:ffff:ffff:ffff,US +2620:37:8000::,2620:37:8000:ffff:ffff:ffff:ffff:ffff,US +2620:37:c000::,2620:37:c000:ffff:ffff:ffff:ffff:ffff,US +2620:38::,2620:38::ffff:ffff:ffff:ffff:ffff,US +2620:38:4000::,2620:38:400f:ffff:ffff:ffff:ffff:ffff,US +2620:38:8000::,2620:38:8000:ffff:ffff:ffff:ffff:ffff,US +2620:38:c000::,2620:38:c000:ffff:ffff:ffff:ffff:ffff,US +2620:39::,2620:39::ffff:ffff:ffff:ffff:ffff,US +2620:39:4000::,2620:39:4000:ffff:ffff:ffff:ffff:ffff,US +2620:39:8000::,2620:39:8000:ffff:ffff:ffff:ffff:ffff,US +2620:39:c000::,2620:39:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:3a::,2620:3a::ffff:ffff:ffff:ffff:ffff,US +2620:3a:4000::,2620:3a:400f:ffff:ffff:ffff:ffff:ffff,US +2620:3a:8000::,2620:3a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3a:c000::,2620:3a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:3b::,2620:3b::ffff:ffff:ffff:ffff:ffff,US +2620:3b:4000::,2620:3b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:3b:8000::,2620:3b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3b:c000::,2620:3b:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:3c::,2620:3c:3f:ffff:ffff:ffff:ffff:ffff,US +2620:3c:8080::,2620:3c:8080:ffff:ffff:ffff:ffff:ffff,US +2620:3d::,2620:3d::ffff:ffff:ffff:ffff:ffff,US +2620:3d:4000::,2620:3d:4000:ffff:ffff:ffff:ffff:ffff,US +2620:3d:8000::,2620:3d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3d:c000::,2620:3d:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:3e::,2620:3e::ffff:ffff:ffff:ffff:ffff,US +2620:3e:4000::,2620:3e:4000:ffff:ffff:ffff:ffff:ffff,US +2620:3e:8000::,2620:3e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3e:c000::,2620:3e:c000:ffff:ffff:ffff:ffff:ffff,US +2620:3f::,2620:3f::ffff:ffff:ffff:ffff:ffff,US +2620:3f:4000::,2620:3f:4000:ffff:ffff:ffff:ffff:ffff,US +2620:3f:8000::,2620:3f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:3f:c000::,2620:3f:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:40::,2620:40::ffff:ffff:ffff:ffff:ffff,US +2620:40:4000::,2620:40:4000:ffff:ffff:ffff:ffff:ffff,US +2620:40:8000::,2620:40:8000:ffff:ffff:ffff:ffff:ffff,US +2620:40:c000::,2620:40:c000:ffff:ffff:ffff:ffff:ffff,US +2620:41::,2620:41:1:ffff:ffff:ffff:ffff:ffff,US +2620:41:4000::,2620:41:4000:ffff:ffff:ffff:ffff:ffff,US +2620:41:8000::,2620:41:8000:ffff:ffff:ffff:ffff:ffff,US +2620:41:c000::,2620:41:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:42::,2620:42::ffff:ffff:ffff:ffff:ffff,US +2620:42:4000::,2620:42:4000:ffff:ffff:ffff:ffff:ffff,US +2620:42:c000::,2620:42:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:43::,2620:43::ffff:ffff:ffff:ffff:ffff,US +2620:43:4000::,2620:43:4000:ffff:ffff:ffff:ffff:ffff,US +2620:43:8000::,2620:43:8000:ffff:ffff:ffff:ffff:ffff,US +2620:43:c000::,2620:43:c000:ffff:ffff:ffff:ffff:ffff,US +2620:44::,2620:44:1:ffff:ffff:ffff:ffff:ffff,US +2620:44:4000::,2620:44:4000:ffff:ffff:ffff:ffff:ffff,US +2620:44:8000::,2620:44:8000:ffff:ffff:ffff:ffff:ffff,US +2620:45::,2620:45::ffff:ffff:ffff:ffff:ffff,CA +2620:45:4000::,2620:45:4000:ffff:ffff:ffff:ffff:ffff,US +2620:45:8000::,2620:45:8000:ffff:ffff:ffff:ffff:ffff,US +2620:45:c000::,2620:45:c000:ffff:ffff:ffff:ffff:ffff,US +2620:46::,2620:46::ffff:ffff:ffff:ffff:ffff,US +2620:46:4000::,2620:46:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:46:8000::,2620:46:8000:ffff:ffff:ffff:ffff:ffff,US +2620:46:c000::,2620:46:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:47::,2620:47::ffff:ffff:ffff:ffff:ffff,US +2620:47:4000::,2620:47:4000:ffff:ffff:ffff:ffff:ffff,US +2620:47:8000::,2620:47:8000:ffff:ffff:ffff:ffff:ffff,US +2620:47:c000::,2620:47:c000:ffff:ffff:ffff:ffff:ffff,US +2620:48::,2620:48::ffff:ffff:ffff:ffff:ffff,US +2620:48:4000::,2620:48:4000:ffff:ffff:ffff:ffff:ffff,US +2620:48:8000::,2620:48:8000:ffff:ffff:ffff:ffff:ffff,US +2620:48:c000::,2620:48:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:49::,2620:49:f:ffff:ffff:ffff:ffff:ffff,CA +2620:49:8080::,2620:49:8080:ffff:ffff:ffff:ffff:ffff,US +2620:4a::,2620:4a::ffff:ffff:ffff:ffff:ffff,US +2620:4a:4000::,2620:4a:4000:ffff:ffff:ffff:ffff:ffff,US +2620:4a:8000::,2620:4a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:4a:c000::,2620:4a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:4b::,2620:4b::ffff:ffff:ffff:ffff:ffff,CA +2620:4b:4000::,2620:4b:400f:ffff:ffff:ffff:ffff:ffff,US +2620:4b:8000::,2620:4b:800f:ffff:ffff:ffff:ffff:ffff,US +2620:4b:c000::,2620:4b:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:4c::,2620:4c:1:ffff:ffff:ffff:ffff:ffff,US +2620:4c:4000::,2620:4c:400f:ffff:ffff:ffff:ffff:ffff,US +2620:4c:c000::,2620:4c:c000:ffff:ffff:ffff:ffff:ffff,US +2620:4d::,2620:4d::ffff:ffff:ffff:ffff:ffff,US +2620:4d:4000::,2620:4d:400f:ffff:ffff:ffff:ffff:ffff,US +2620:4d:8000::,2620:4d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:4d:c000::,2620:4d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:4e::,2620:4e::ffff:ffff:ffff:ffff:ffff,US +2620:4e:4000::,2620:4e:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:4e:8000::,2620:4e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:4e:c000::,2620:4e:c000:ffff:ffff:ffff:ffff:ffff,US +2620:4f::,2620:4f::ffff:ffff:ffff:ffff:ffff,US +2620:4f:4000::,2620:4f:4000:ffff:ffff:ffff:ffff:ffff,US +2620:4f:8000::,2620:4f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:4f:c000::,2620:4f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:50::,2620:50:f:ffff:ffff:ffff:ffff:ffff,US +2620:50:8080::,2620:50:8080:ffff:ffff:ffff:ffff:ffff,US +2620:51::,2620:51::ffff:ffff:ffff:ffff:ffff,US +2620:51:4000::,2620:51:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:51:8000::,2620:51:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:51:c000::,2620:51:c000:ffff:ffff:ffff:ffff:ffff,US +2620:52::,2620:52:3:ffff:ffff:ffff:ffff:ffff,US +2620:52:4000::,2620:52:4000:ffff:ffff:ffff:ffff:ffff,US +2620:52:8000::,2620:52:8000:ffff:ffff:ffff:ffff:ffff,US +2620:52:c000::,2620:52:c000:ffff:ffff:ffff:ffff:ffff,US +2620:53::,2620:53::ffff:ffff:ffff:ffff:ffff,US +2620:53:4000::,2620:53:400f:ffff:ffff:ffff:ffff:ffff,US +2620:53:8000::,2620:53:8000:ffff:ffff:ffff:ffff:ffff,US +2620:53:c000::,2620:53:c000:ffff:ffff:ffff:ffff:ffff,US +2620:54::,2620:54::ffff:ffff:ffff:ffff:ffff,US +2620:54:4000::,2620:54:4000:ffff:ffff:ffff:ffff:ffff,US +2620:54:8000::,2620:54:8000:ffff:ffff:ffff:ffff:ffff,US +2620:54:c000::,2620:54:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:55::,2620:55::ffff:ffff:ffff:ffff:ffff,US +2620:55:4000::,2620:55:400f:ffff:ffff:ffff:ffff:ffff,US +2620:55:8000::,2620:55:8000:ffff:ffff:ffff:ffff:ffff,US +2620:55:c000::,2620:55:c000:ffff:ffff:ffff:ffff:ffff,US +2620:56::,2620:56::ffff:ffff:ffff:ffff:ffff,US +2620:56:4000::,2620:56:4000:ffff:ffff:ffff:ffff:ffff,US +2620:56:8000::,2620:56:8000:ffff:ffff:ffff:ffff:ffff,US +2620:56:c000::,2620:56:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:57::,2620:57::ffff:ffff:ffff:ffff:ffff,US +2620:57:4000::,2620:57:400f:ffff:ffff:ffff:ffff:ffff,KY +2620:57:8000::,2620:57:8000:ffff:ffff:ffff:ffff:ffff,US +2620:57:c000::,2620:57:c000:ffff:ffff:ffff:ffff:ffff,US +2620:58::,2620:58:ff:ffff:ffff:ffff:ffff:ffff,US +2620:58:8800::,2620:58:8800:ffff:ffff:ffff:ffff:ffff,US +2620:59::,2620:59::ffff:ffff:ffff:ffff:ffff,US +2620:59:4000::,2620:59:4000:ffff:ffff:ffff:ffff:ffff,US +2620:59:8000::,2620:59:8000:ffff:ffff:ffff:ffff:ffff,US +2620:59:c000::,2620:59:c000:ffff:ffff:ffff:ffff:ffff,US +2620:5a::,2620:5a::ffff:ffff:ffff:ffff:ffff,US +2620:5a:4000::,2620:5a:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:5a:8000::,2620:5a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:5a:c000::,2620:5a:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:5b::,2620:5b::ffff:ffff:ffff:ffff:ffff,US +2620:5b:4000::,2620:5b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:5b:8000::,2620:5b:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:5b:c000::,2620:5b:c00f:ffff:ffff:ffff:ffff:ffff,CA +2620:5c::,2620:5c::ffff:ffff:ffff:ffff:ffff,US +2620:5c:4000::,2620:5c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:5c:8000::,2620:5c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:5c:c000::,2620:5c:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:5d::,2620:5d::ffff:ffff:ffff:ffff:ffff,US +2620:5d:4000::,2620:5d:4000:ffff:ffff:ffff:ffff:ffff,US +2620:5d:8000::,2620:5d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:5d:c000::,2620:5d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:5e::,2620:5e::ffff:ffff:ffff:ffff:ffff,US +2620:5e:4000::,2620:5e:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:5e:8000::,2620:5e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:5e:c000::,2620:5e:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:5f::,2620:5f::ffff:ffff:ffff:ffff:ffff,US +2620:5f:4000::,2620:5f:4000:ffff:ffff:ffff:ffff:ffff,US +2620:5f:8000::,2620:5f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:5f:c000::,2620:5f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:60::,2620:60::ffff:ffff:ffff:ffff:ffff,US +2620:60:4000::,2620:60:400f:ffff:ffff:ffff:ffff:ffff,US +2620:60:8000::,2620:60:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:60:c000::,2620:60:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:61::,2620:61::ffff:ffff:ffff:ffff:ffff,CA +2620:61:4000::,2620:61:400f:ffff:ffff:ffff:ffff:ffff,US +2620:61:8000::,2620:61:8000:ffff:ffff:ffff:ffff:ffff,US +2620:61:c000::,2620:61:c000:ffff:ffff:ffff:ffff:ffff,US +2620:62::,2620:62::ffff:ffff:ffff:ffff:ffff,US +2620:62:4000::,2620:62:400f:ffff:ffff:ffff:ffff:ffff,CA +2620:62:8000::,2620:62:8000:ffff:ffff:ffff:ffff:ffff,US +2620:62:c000::,2620:62:c000:ffff:ffff:ffff:ffff:ffff,US +2620:63::,2620:63::ffff:ffff:ffff:ffff:ffff,US +2620:63:4000::,2620:63:4000:ffff:ffff:ffff:ffff:ffff,US +2620:63:8000::,2620:63:8000:ffff:ffff:ffff:ffff:ffff,US +2620:63:c000::,2620:63:c000:ffff:ffff:ffff:ffff:ffff,US +2620:64::,2620:64::ffff:ffff:ffff:ffff:ffff,US +2620:64:4000::,2620:64:4000:ffff:ffff:ffff:ffff:ffff,US +2620:64:8000::,2620:64:8000:ffff:ffff:ffff:ffff:ffff,TW +2620:64:c000::,2620:64:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:65::,2620:65:ff:ffff:ffff:ffff:ffff:ffff,US +2620:65:8000::,2620:65:800f:ffff:ffff:ffff:ffff:ffff,US +2620:65:c000::,2620:65:c000:ffff:ffff:ffff:ffff:ffff,US +2620:66::,2620:66::ffff:ffff:ffff:ffff:ffff,CA +2620:66:4000::,2620:66:400f:ffff:ffff:ffff:ffff:ffff,US +2620:66:8000::,2620:66:8000:ffff:ffff:ffff:ffff:ffff,US +2620:66:c000::,2620:66:c000:ffff:ffff:ffff:ffff:ffff,US +2620:67::,2620:67::ffff:ffff:ffff:ffff:ffff,US +2620:67:4000::,2620:67:4000:ffff:ffff:ffff:ffff:ffff,US +2620:67:8000::,2620:67:8000:ffff:ffff:ffff:ffff:ffff,US +2620:67:c000::,2620:67:c000:ffff:ffff:ffff:ffff:ffff,US +2620:68::,2620:68::ffff:ffff:ffff:ffff:ffff,US +2620:68:4000::,2620:68:4000:ffff:ffff:ffff:ffff:ffff,US +2620:68:8000::,2620:68:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:68:c000::,2620:68:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:69:4000::,2620:69:4000:ffff:ffff:ffff:ffff:ffff,US +2620:69:8000::,2620:69:8000:ffff:ffff:ffff:ffff:ffff,US +2620:69:c000::,2620:69:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:6a::,2620:6a::ffff:ffff:ffff:ffff:ffff,US +2620:6a:4000::,2620:6a:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:6a:8000::,2620:6a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:6a:c000::,2620:6a:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:6b::,2620:6b::ffff:ffff:ffff:ffff:ffff,US +2620:6b:4000::,2620:6b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:6b:8000::,2620:6b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:6b:c000::,2620:6b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:6c::,2620:6c:3f:ffff:ffff:ffff:ffff:ffff,US +2620:6c:8080::,2620:6c:8080:ffff:ffff:ffff:ffff:ffff,US +2620:6d:40::,2620:6d:40:ffff:ffff:ffff:ffff:ffff,US +2620:6d:8000::,2620:6d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:6d:c000::,2620:6d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:6e::,2620:6e::ffff:ffff:ffff:ffff:ffff,US +2620:6e:4000::,2620:6e:4000:ffff:ffff:ffff:ffff:ffff,US +2620:6e:8000::,2620:6e:800f:ffff:ffff:ffff:ffff:ffff,US +2620:6e:c000::,2620:6e:c000:ffff:ffff:ffff:ffff:ffff,US +2620:6f::,2620:6f::ffff:ffff:ffff:ffff:ffff,US +2620:6f:4000::,2620:6f:4000:ffff:ffff:ffff:ffff:ffff,US +2620:6f:8000::,2620:6f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:6f:c000::,2620:6f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:70::,2620:70::ffff:ffff:ffff:ffff:ffff,US +2620:70:4000::,2620:70:4000:ffff:ffff:ffff:ffff:ffff,US +2620:70:8000::,2620:70:8000:ffff:ffff:ffff:ffff:ffff,US +2620:70:c000::,2620:70:c000:ffff:ffff:ffff:ffff:ffff,US +2620:71::,2620:71::ffff:ffff:ffff:ffff:ffff,US +2620:71:4000::,2620:71:4000:ffff:ffff:ffff:ffff:ffff,US +2620:71:8000::,2620:71:8000:ffff:ffff:ffff:ffff:ffff,US +2620:71:c000::,2620:71:c000:ffff:ffff:ffff:ffff:ffff,US +2620:72::,2620:72::ffff:ffff:ffff:ffff:ffff,US +2620:72:4000::,2620:72:4000:ffff:ffff:ffff:ffff:ffff,US +2620:72:8000::,2620:72:8000:ffff:ffff:ffff:ffff:ffff,US +2620:72:c000::,2620:72:c000:ffff:ffff:ffff:ffff:ffff,US +2620:73::,2620:73::ffff:ffff:ffff:ffff:ffff,US +2620:73:4000::,2620:73:4000:ffff:ffff:ffff:ffff:ffff,US +2620:73:8000::,2620:73:8000:ffff:ffff:ffff:ffff:ffff,US +2620:73:c000::,2620:73:c000:ffff:ffff:ffff:ffff:ffff,US +2620:74::,2620:74:1f:ffff:ffff:ffff:ffff:ffff,US +2620:74:8080::,2620:74:8080:ffff:ffff:ffff:ffff:ffff,US +2620:75::,2620:75::ffff:ffff:ffff:ffff:ffff,US +2620:75:4000::,2620:75:4000:ffff:ffff:ffff:ffff:ffff,US +2620:75:8000::,2620:75:8000:ffff:ffff:ffff:ffff:ffff,US +2620:75:c000::,2620:75:c000:ffff:ffff:ffff:ffff:ffff,US +2620:76::,2620:76::ffff:ffff:ffff:ffff:ffff,US +2620:76:4000::,2620:76:4000:ffff:ffff:ffff:ffff:ffff,US +2620:76:8000::,2620:76:8000:ffff:ffff:ffff:ffff:ffff,US +2620:76:c000::,2620:76:c000:ffff:ffff:ffff:ffff:ffff,US +2620:77::,2620:77::ffff:ffff:ffff:ffff:ffff,US +2620:77:4000::,2620:77:4000:ffff:ffff:ffff:ffff:ffff,US +2620:77:8000::,2620:77:8000:ffff:ffff:ffff:ffff:ffff,US +2620:77:c000::,2620:77:c000:ffff:ffff:ffff:ffff:ffff,US +2620:78::,2620:78::ffff:ffff:ffff:ffff:ffff,US +2620:78:4000::,2620:78:4000:ffff:ffff:ffff:ffff:ffff,US +2620:78:8000::,2620:78:8000:ffff:ffff:ffff:ffff:ffff,US +2620:78:c000::,2620:78:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:79::,2620:79::ffff:ffff:ffff:ffff:ffff,US +2620:79:4000::,2620:79:4000:ffff:ffff:ffff:ffff:ffff,US +2620:79:8000::,2620:79:8000:ffff:ffff:ffff:ffff:ffff,US +2620:79:c000::,2620:79:c000:ffff:ffff:ffff:ffff:ffff,US +2620:7a::,2620:7a::ffff:ffff:ffff:ffff:ffff,US +2620:7a:4000::,2620:7a:4000:ffff:ffff:ffff:ffff:ffff,US +2620:7a:8000::,2620:7a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:7a:c000::,2620:7a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:7b::,2620:7b::ffff:ffff:ffff:ffff:ffff,US +2620:7b:4000::,2620:7b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:7b:8000::,2620:7b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:7b:e000::,2620:7b:e000:ffff:ffff:ffff:ffff:ffff,US +2620:7c:4000::,2620:7c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:7c:a000::,2620:7c:a000:ffff:ffff:ffff:ffff:ffff,US +2620:7d::,2620:7d::ffff:ffff:ffff:ffff:ffff,US +2620:7d:4000::,2620:7d:4000:ffff:ffff:ffff:ffff:ffff,US +2620:7d:8000::,2620:7d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:7d:c000::,2620:7d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:7e::,2620:7e:f:ffff:ffff:ffff:ffff:ffff,US +2620:7e:60c0::,2620:7e:60c0:ffff:ffff:ffff:ffff:ffff,US +2620:7e:c080::,2620:7e:c080:ffff:ffff:ffff:ffff:ffff,US +2620:7f:2040::,2620:7f:2040:ffff:ffff:ffff:ffff:ffff,US +2620:7f:8000::,2620:7f:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:7f:c000::,2620:7f:c000:ffff:ffff:ffff:ffff:ffff,US +2620:80::,2620:80::ffff:ffff:ffff:ffff:ffff,US +2620:80:4000::,2620:80:4000:ffff:ffff:ffff:ffff:ffff,US +2620:80:8000::,2620:80:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:80:c000::,2620:80:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:81::,2620:81::ffff:ffff:ffff:ffff:ffff,US +2620:81:4000::,2620:81:4000:ffff:ffff:ffff:ffff:ffff,US +2620:81:8000::,2620:81:8000:ffff:ffff:ffff:ffff:ffff,US +2620:81:c000::,2620:81:c000:ffff:ffff:ffff:ffff:ffff,US +2620:82:4000::,2620:82:4000:ffff:ffff:ffff:ffff:ffff,US +2620:82:8000::,2620:82:8000:ffff:ffff:ffff:ffff:ffff,US +2620:82:c000::,2620:82:c000:ffff:ffff:ffff:ffff:ffff,US +2620:83::,2620:83::ffff:ffff:ffff:ffff:ffff,US +2620:83:4000::,2620:83:4000:ffff:ffff:ffff:ffff:ffff,US +2620:83:8000::,2620:83:8000:ffff:ffff:ffff:ffff:ffff,US +2620:83:c000::,2620:83:c000:ffff:ffff:ffff:ffff:ffff,US +2620:84::,2620:84:1:ffff:ffff:ffff:ffff:ffff,US +2620:84:4000::,2620:84:4000:ffff:ffff:ffff:ffff:ffff,US +2620:84:8000::,2620:84:8000:ffff:ffff:ffff:ffff:ffff,US +2620:84:c000::,2620:84:c000:ffff:ffff:ffff:ffff:ffff,US +2620:85::,2620:85::ffff:ffff:ffff:ffff:ffff,US +2620:85:4000::,2620:85:4000:ffff:ffff:ffff:ffff:ffff,US +2620:85:8000::,2620:85:8000:ffff:ffff:ffff:ffff:ffff,US +2620:85:c000::,2620:85:c000:ffff:ffff:ffff:ffff:ffff,US +2620:86::,2620:86::ffff:ffff:ffff:ffff:ffff,US +2620:86:4000::,2620:86:4000:ffff:ffff:ffff:ffff:ffff,US +2620:86:8000::,2620:86:8000:ffff:ffff:ffff:ffff:ffff,US +2620:86:c000::,2620:86:c000:ffff:ffff:ffff:ffff:ffff,US +2620:87::,2620:87::ffff:ffff:ffff:ffff:ffff,US +2620:87:4000::,2620:87:4000:ffff:ffff:ffff:ffff:ffff,US +2620:87:8000::,2620:87:8000:ffff:ffff:ffff:ffff:ffff,US +2620:87:c000::,2620:87:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:88::,2620:88::ffff:ffff:ffff:ffff:ffff,US +2620:88:4000::,2620:88:4000:ffff:ffff:ffff:ffff:ffff,US +2620:88:8000::,2620:88:8000:ffff:ffff:ffff:ffff:ffff,US +2620:88:c000::,2620:88:c000:ffff:ffff:ffff:ffff:ffff,US +2620:89::,2620:89::ffff:ffff:ffff:ffff:ffff,US +2620:89:4000::,2620:89:4000:ffff:ffff:ffff:ffff:ffff,US +2620:89:8000::,2620:89:8000:ffff:ffff:ffff:ffff:ffff,US +2620:89:c000::,2620:89:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8a::,2620:8a::ffff:ffff:ffff:ffff:ffff,US +2620:8a:4000::,2620:8a:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:8a:8000::,2620:8a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:8a:c000::,2620:8a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8b::,2620:8b::ffff:ffff:ffff:ffff:ffff,US +2620:8b:4000::,2620:8b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:8b:8000::,2620:8b:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:8b:c000::,2620:8b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8c:4000::,2620:8c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:8c:8000::,2620:8c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:8c:c000::,2620:8c:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8d::,2620:8d::ffff:ffff:ffff:ffff:ffff,US +2620:8d:4000::,2620:8d:4000:ffff:ffff:ffff:ffff:ffff,US +2620:8d:8000::,2620:8d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:8d:c000::,2620:8d:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8e::,2620:8e::ffff:ffff:ffff:ffff:ffff,US +2620:8e:4000::,2620:8e:4000:ffff:ffff:ffff:ffff:ffff,US +2620:8e:8000::,2620:8e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:8e:c000::,2620:8e:c000:ffff:ffff:ffff:ffff:ffff,US +2620:8f::,2620:8f::ffff:ffff:ffff:ffff:ffff,US +2620:8f:4000::,2620:8f:400f:ffff:ffff:ffff:ffff:ffff,US +2620:8f:8000::,2620:8f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:8f:c000::,2620:8f:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:90::,2620:90::ffff:ffff:ffff:ffff:ffff,CA +2620:90:4000::,2620:90:4000:ffff:ffff:ffff:ffff:ffff,US +2620:90:8000::,2620:90:8000:ffff:ffff:ffff:ffff:ffff,US +2620:90:c000::,2620:90:c000:ffff:ffff:ffff:ffff:ffff,US +2620:91::,2620:91::ffff:ffff:ffff:ffff:ffff,US +2620:91:4000::,2620:91:4000:ffff:ffff:ffff:ffff:ffff,US +2620:91:8000::,2620:91:8000:ffff:ffff:ffff:ffff:ffff,US +2620:91:c000::,2620:91:c000:ffff:ffff:ffff:ffff:ffff,US +2620:92::,2620:92:f:ffff:ffff:ffff:ffff:ffff,US +2620:92:4000::,2620:92:4000:ffff:ffff:ffff:ffff:ffff,US +2620:92:8000::,2620:92:8000:ffff:ffff:ffff:ffff:ffff,US +2620:92:c000::,2620:92:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:93::,2620:93::ffff:ffff:ffff:ffff:ffff,US +2620:93:4000::,2620:93:4000:ffff:ffff:ffff:ffff:ffff,US +2620:93:8000::,2620:93:8000:ffff:ffff:ffff:ffff:ffff,US +2620:93:c000::,2620:93:c000:ffff:ffff:ffff:ffff:ffff,US +2620:94::,2620:94::ffff:ffff:ffff:ffff:ffff,US +2620:94:4000::,2620:94:4000:ffff:ffff:ffff:ffff:ffff,US +2620:94:8000::,2620:94:8000:ffff:ffff:ffff:ffff:ffff,US +2620:94:c000::,2620:94:c000:ffff:ffff:ffff:ffff:ffff,US +2620:95::,2620:95::ffff:ffff:ffff:ffff:ffff,US +2620:95:4000::,2620:95:400f:ffff:ffff:ffff:ffff:ffff,US +2620:95:8000::,2620:95:8000:ffff:ffff:ffff:ffff:ffff,US +2620:95:c000::,2620:95:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:96::,2620:96::ffff:ffff:ffff:ffff:ffff,US +2620:96:4000::,2620:96:400f:ffff:ffff:ffff:ffff:ffff,CA +2620:96:8000::,2620:96:8000:ffff:ffff:ffff:ffff:ffff,US +2620:96:c000::,2620:96:c000:ffff:ffff:ffff:ffff:ffff,US +2620:97::,2620:97::ffff:ffff:ffff:ffff:ffff,US +2620:97:4000::,2620:97:4000:ffff:ffff:ffff:ffff:ffff,US +2620:97:8000::,2620:97:8000:ffff:ffff:ffff:ffff:ffff,US +2620:97:c000::,2620:97:c000:ffff:ffff:ffff:ffff:ffff,US +2620:98::,2620:98::ffff:ffff:ffff:ffff:ffff,US +2620:98:4000::,2620:98:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:98:8000::,2620:98:8000:ffff:ffff:ffff:ffff:ffff,US +2620:98:c000::,2620:98:c000:ffff:ffff:ffff:ffff:ffff,US +2620:99::,2620:99::ffff:ffff:ffff:ffff:ffff,US +2620:99:4000::,2620:99:4000:ffff:ffff:ffff:ffff:ffff,CA +2620:99:8000::,2620:99:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9a::,2620:9a::ffff:ffff:ffff:ffff:ffff,CA +2620:9a:8000::,2620:9a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9b:8000::,2620:9b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9c::,2620:9c::ffff:ffff:ffff:ffff:ffff,US +2620:9c:8000::,2620:9c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9d::,2620:9d::ffff:ffff:ffff:ffff:ffff,US +2620:9d:8000::,2620:9d:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9e::,2620:9e::ffff:ffff:ffff:ffff:ffff,US +2620:9e:8000::,2620:9e:8000:ffff:ffff:ffff:ffff:ffff,US +2620:9f::,2620:9f:ff:ffff:ffff:ffff:ffff:ffff,US +2620:9f:8000::,2620:9f:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a0::,2620:a0::ffff:ffff:ffff:ffff:ffff,US +2620:a0:8000::,2620:a0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a1::,2620:a1::ffff:ffff:ffff:ffff:ffff,US +2620:a1:8000::,2620:a1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a2::,2620:a2::ffff:ffff:ffff:ffff:ffff,US +2620:a2:8000::,2620:a2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a3::,2620:a3::ffff:ffff:ffff:ffff:ffff,US +2620:a3:8000::,2620:a3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a3:c020::,2620:a3:c020:ffff:ffff:ffff:ffff:ffff,US +2620:a4:40::,2620:a4:40:ffff:ffff:ffff:ffff:ffff,US +2620:a4:4060::,2620:a4:4060:ffff:ffff:ffff:ffff:ffff,US +2620:a4:8080::,2620:a4:8080:ffff:ffff:ffff:ffff:ffff,US +2620:a5::,2620:a5::ffff:ffff:ffff:ffff:ffff,US +2620:a5:8000::,2620:a5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a6::,2620:a6::ffff:ffff:ffff:ffff:ffff,US +2620:a6:8000::,2620:a6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a7::,2620:a7::ffff:ffff:ffff:ffff:ffff,US +2620:a7:8000::,2620:a7:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a8::,2620:a8::ffff:ffff:ffff:ffff:ffff,US +2620:a8:8000::,2620:a8:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a9::,2620:a9::ffff:ffff:ffff:ffff:ffff,US +2620:a9:8000::,2620:a9:800f:ffff:ffff:ffff:ffff:ffff,US +2620:aa::,2620:aa::ffff:ffff:ffff:ffff:ffff,US +2620:aa:8000::,2620:aa:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ab::,2620:ab::ffff:ffff:ffff:ffff:ffff,US +2620:ab:8000::,2620:ab:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ac::,2620:ac::ffff:ffff:ffff:ffff:ffff,US +2620:ac:8000::,2620:ac:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ad::,2620:ad::ffff:ffff:ffff:ffff:ffff,US +2620:ad:8000::,2620:ad:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ae::,2620:ae::ffff:ffff:ffff:ffff:ffff,CA +2620:ae:8000::,2620:ae:8000:ffff:ffff:ffff:ffff:ffff,US +2620:af::,2620:af::ffff:ffff:ffff:ffff:ffff,US +2620:af:8000::,2620:af:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b0::,2620:b0::ffff:ffff:ffff:ffff:ffff,CA +2620:b0:8000::,2620:b0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b1::,2620:b1::ffff:ffff:ffff:ffff:ffff,US +2620:b1:8000::,2620:b1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b2::,2620:b2::ffff:ffff:ffff:ffff:ffff,US +2620:b2:8000::,2620:b2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b3::,2620:b3::ffff:ffff:ffff:ffff:ffff,US +2620:b3:8000::,2620:b3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b4::,2620:b4::ffff:ffff:ffff:ffff:ffff,US +2620:b4:8000::,2620:b4:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:b5::,2620:b5::ffff:ffff:ffff:ffff:ffff,US +2620:b5:8000::,2620:b5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b6::,2620:b6::ffff:ffff:ffff:ffff:ffff,US +2620:b6:8000::,2620:b6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b7::,2620:b7::ffff:ffff:ffff:ffff:ffff,US +2620:b7:8000::,2620:b7:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:b8::,2620:b8::ffff:ffff:ffff:ffff:ffff,US +2620:b8:8000::,2620:b8:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b9::,2620:b9::ffff:ffff:ffff:ffff:ffff,US +2620:b9:8000::,2620:b9:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ba::,2620:ba::ffff:ffff:ffff:ffff:ffff,US +2620:ba:8000::,2620:ba:8000:ffff:ffff:ffff:ffff:ffff,US +2620:bb::,2620:bb::ffff:ffff:ffff:ffff:ffff,US +2620:bb:8000::,2620:bb:8000:ffff:ffff:ffff:ffff:ffff,US +2620:bc:8000::,2620:bc:8000:ffff:ffff:ffff:ffff:ffff,US +2620:bd::,2620:bd::ffff:ffff:ffff:ffff:ffff,CA +2620:bd:8000::,2620:bd:8000:ffff:ffff:ffff:ffff:ffff,US +2620:be::,2620:be::ffff:ffff:ffff:ffff:ffff,US +2620:be:8000::,2620:be:8000:ffff:ffff:ffff:ffff:ffff,US +2620:bf::,2620:bf::ffff:ffff:ffff:ffff:ffff,US +2620:bf:8000::,2620:bf:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c0::,2620:c0::ffff:ffff:ffff:ffff:ffff,US +2620:c0:8000::,2620:c0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c1::,2620:c1::ffff:ffff:ffff:ffff:ffff,US +2620:c1:8000::,2620:c1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c2::,2620:c2::ffff:ffff:ffff:ffff:ffff,CA +2620:c2:8000::,2620:c2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c3::,2620:c3::ffff:ffff:ffff:ffff:ffff,US +2620:c3:8000::,2620:c3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c4::,2620:c4::ffff:ffff:ffff:ffff:ffff,US +2620:c4:8000::,2620:c4:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c5::,2620:c5::ffff:ffff:ffff:ffff:ffff,US +2620:c5:8000::,2620:c5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c6::,2620:c6::ffff:ffff:ffff:ffff:ffff,US +2620:c6:8000::,2620:c6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c7::,2620:c7::ffff:ffff:ffff:ffff:ffff,US +2620:c7:8000::,2620:c7:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c8::,2620:c8::ffff:ffff:ffff:ffff:ffff,US +2620:c8:8000::,2620:c8:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c9::,2620:c9::ffff:ffff:ffff:ffff:ffff,US +2620:c9:8000::,2620:c9:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ca::,2620:ca::ffff:ffff:ffff:ffff:ffff,US +2620:ca:8000::,2620:ca:8000:ffff:ffff:ffff:ffff:ffff,US +2620:cb::,2620:cb::ffff:ffff:ffff:ffff:ffff,US +2620:cb:8000::,2620:cb:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:cc::,2620:cc::ffff:ffff:ffff:ffff:ffff,US +2620:cc:8000::,2620:cc:8000:ffff:ffff:ffff:ffff:ffff,US +2620:cd::,2620:cd::ffff:ffff:ffff:ffff:ffff,US +2620:cd:8000::,2620:cd:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ce::,2620:ce::ffff:ffff:ffff:ffff:ffff,US +2620:ce:8000::,2620:ce:8000:ffff:ffff:ffff:ffff:ffff,US +2620:cf::,2620:cf::ffff:ffff:ffff:ffff:ffff,US +2620:cf:8000::,2620:cf:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d0::,2620:d0::ffff:ffff:ffff:ffff:ffff,US +2620:d0:8000::,2620:d0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d1::,2620:d1::ffff:ffff:ffff:ffff:ffff,US +2620:d1:8000::,2620:d1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d2::,2620:d2::ffff:ffff:ffff:ffff:ffff,US +2620:d2:8000::,2620:d2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d3::,2620:d3::ffff:ffff:ffff:ffff:ffff,US +2620:d3:8000::,2620:d3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d4::,2620:d4::ffff:ffff:ffff:ffff:ffff,US +2620:d4:8000::,2620:d4:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d5::,2620:d5::ffff:ffff:ffff:ffff:ffff,US +2620:d5:8000::,2620:d5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d6::,2620:d6::ffff:ffff:ffff:ffff:ffff,US +2620:d6:8000::,2620:d6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d7::,2620:d7::ffff:ffff:ffff:ffff:ffff,US +2620:d7:8000::,2620:d7:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d8::,2620:d8::ffff:ffff:ffff:ffff:ffff,US +2620:d8:8000::,2620:d8:8000:ffff:ffff:ffff:ffff:ffff,US +2620:d9::,2620:d9::ffff:ffff:ffff:ffff:ffff,US +2620:d9:8000::,2620:d9:8000:ffff:ffff:ffff:ffff:ffff,US +2620:da::,2620:da::ffff:ffff:ffff:ffff:ffff,US +2620:da:8000::,2620:da:8000:ffff:ffff:ffff:ffff:ffff,US +2620:db::,2620:db::ffff:ffff:ffff:ffff:ffff,US +2620:db:8000::,2620:db:8000:ffff:ffff:ffff:ffff:ffff,US +2620:dc::,2620:dc::ffff:ffff:ffff:ffff:ffff,US +2620:dc:8::,2620:dc:8:ffff:ffff:ffff:ffff:ffff,US +2620:dc:8000::,2620:dc:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:dd::,2620:dd::ffff:ffff:ffff:ffff:ffff,CA +2620:dd:8000::,2620:dd:8000:ffff:ffff:ffff:ffff:ffff,US +2620:de::,2620:de::ffff:ffff:ffff:ffff:ffff,US +2620:de:8000::,2620:de:8000:ffff:ffff:ffff:ffff:ffff,US +2620:df::,2620:df::ffff:ffff:ffff:ffff:ffff,US +2620:df:8000::,2620:df:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e0::,2620:e0::ffff:ffff:ffff:ffff:ffff,US +2620:e0:8000::,2620:e0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e1::,2620:e1::ffff:ffff:ffff:ffff:ffff,US +2620:e1:8000::,2620:e1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e2::,2620:e2::ffff:ffff:ffff:ffff:ffff,US +2620:e2:8000::,2620:e2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e3::,2620:e3::ffff:ffff:ffff:ffff:ffff,US +2620:e3:8000::,2620:e3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e4::,2620:e4::ffff:ffff:ffff:ffff:ffff,US +2620:e4:8000::,2620:e4:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e5::,2620:e5::ffff:ffff:ffff:ffff:ffff,US +2620:e5:8000::,2620:e5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e6::,2620:e6::ffff:ffff:ffff:ffff:ffff,US +2620:e6:8000::,2620:e6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e7::,2620:e7::ffff:ffff:ffff:ffff:ffff,US +2620:e7:8000::,2620:e7:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:e8::,2620:e8::ffff:ffff:ffff:ffff:ffff,US +2620:e8:8000::,2620:e8:8000:ffff:ffff:ffff:ffff:ffff,US +2620:e9::,2620:e9::ffff:ffff:ffff:ffff:ffff,US +2620:e9:8000::,2620:e9:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ea::,2620:ea:f:ffff:ffff:ffff:ffff:ffff,US +2620:ea:8000::,2620:ea:8000:ffff:ffff:ffff:ffff:ffff,US +2620:eb::,2620:eb::ffff:ffff:ffff:ffff:ffff,US +2620:eb:8000::,2620:eb:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ec::,2620:ec::ffff:ffff:ffff:ffff:ffff,US +2620:ec:8000::,2620:ec:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ed::,2620:ed::ffff:ffff:ffff:ffff:ffff,US +2620:ed:8000::,2620:ed:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ee::,2620:ee::ffff:ffff:ffff:ffff:ffff,US +2620:ee:8000::,2620:ee:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ef::,2620:ef::ffff:ffff:ffff:ffff:ffff,US +2620:ef:8000::,2620:ef:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f0::,2620:f0::ffff:ffff:ffff:ffff:ffff,US +2620:f0:8000::,2620:f0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f1::,2620:f1::ffff:ffff:ffff:ffff:ffff,US +2620:f1:8000::,2620:f1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f2::,2620:f2::ffff:ffff:ffff:ffff:ffff,CA +2620:f2:8000::,2620:f2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f3::,2620:f3::ffff:ffff:ffff:ffff:ffff,US +2620:f3:8000::,2620:f3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f4::,2620:f4::ffff:ffff:ffff:ffff:ffff,US +2620:f4:8000::,2620:f4:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:f5::,2620:f5::ffff:ffff:ffff:ffff:ffff,US +2620:f5:8000::,2620:f5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f6::,2620:f6::ffff:ffff:ffff:ffff:ffff,CA +2620:f6:8000::,2620:f6:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f7::,2620:f7::ffff:ffff:ffff:ffff:ffff,US +2620:f7:8000::,2620:f7:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f8::,2620:f8::ffff:ffff:ffff:ffff:ffff,US +2620:f8:8000::,2620:f8:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f9::,2620:f9:f:ffff:ffff:ffff:ffff:ffff,US +2620:f9:8000::,2620:f9:8000:ffff:ffff:ffff:ffff:ffff,US +2620:fa::,2620:fa::ffff:ffff:ffff:ffff:ffff,US +2620:fa:8000::,2620:fa:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:fb::,2620:fb::ffff:ffff:ffff:ffff:ffff,US +2620:fb:8000::,2620:fb:8000:ffff:ffff:ffff:ffff:ffff,US +2620:fc::,2620:fc::ffff:ffff:ffff:ffff:ffff,CA +2620:fc:8000::,2620:fc:8000:ffff:ffff:ffff:ffff:ffff,US +2620:fd::,2620:fd::ffff:ffff:ffff:ffff:ffff,CA +2620:fd:8000::,2620:fd:8000:ffff:ffff:ffff:ffff:ffff,US +2620:fe::,2620:fe:ff:ffff:ffff:ffff:ffff:ffff,US +2620:fe:8000::,2620:fe:8000:ffff:ffff:ffff:ffff:ffff,US +2620:ff::,2620:ff::ffff:ffff:ffff:ffff:ffff,US +2620:ff:8000::,2620:ff:8000:ffff:ffff:ffff:ffff:ffff,US +2620:100::,2620:100:f:ffff:ffff:ffff:ffff:ffff,US 2620:100:1000::,2620:100:1001:ffff:ffff:ffff:ffff:ffff,US 2620:100:3000::,2620:100:3007:ffff:ffff:ffff:ffff:ffff,US 2620:100:4000::,2620:100:403f:ffff:ffff:ffff:ffff:ffff,US @@ -5121,7 +9485,9 @@ 2620:101:6000::,2620:101:6001:ffff:ffff:ffff:ffff:ffff,US 2620:101:7000::,2620:101:7001:ffff:ffff:ffff:ffff:ffff,US 2620:101:8000::,2620:101:80ff:ffff:ffff:ffff:ffff:ffff,US -2620:101:9000::,2620:101:900f:ffff:ffff:ffff:ffff:ffff,US +2620:101:9000::,2620:101:9004:ffff:ffff:ffff:ffff:ffff,US +2620:101:9005::,2620:101:9005:ffff:ffff:ffff:ffff:ffff,CA +2620:101:9006::,2620:101:900f:ffff:ffff:ffff:ffff:ffff,US 2620:101:a000::,2620:101:a001:ffff:ffff:ffff:ffff:ffff,US 2620:101:b000::,2620:101:b07f:ffff:ffff:ffff:ffff:ffff,US 2620:101:c000::,2620:101:c00f:ffff:ffff:ffff:ffff:ffff,CA @@ -5526,6 +9892,31 @@ 2620:11b:4000::,2620:11b:40ff:ffff:ffff:ffff:ffff:ffff,US 2620:11b:5000::,2620:11b:500f:ffff:ffff:ffff:ffff:ffff,US 2620:11b:6000::,2620:11b:600f:ffff:ffff:ffff:ffff:ffff,US +2620:11b:7000::,2620:11b:700f:ffff:ffff:ffff:ffff:ffff,US +2620:11b:8000::,2620:11b:80ff:ffff:ffff:ffff:ffff:ffff,US +2620:11b:9000::,2620:11b:900f:ffff:ffff:ffff:ffff:ffff,US +2620:11b:a000::,2620:11b:a00f:ffff:ffff:ffff:ffff:ffff,US +2620:11b:b000::,2620:11b:b00f:ffff:ffff:ffff:ffff:ffff,US +2620:11b:c000::,2620:11b:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:11b:d000::,2620:11b:d0ff:ffff:ffff:ffff:ffff:ffff,US +2620:11b:e000::,2620:11b:e0ff:ffff:ffff:ffff:ffff:ffff,US +2620:11b:f000::,2620:11b:f0ff:ffff:ffff:ffff:ffff:ffff,US +2620:11c::,2620:11c:f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:1000::,2620:11c:10ff:ffff:ffff:ffff:ffff:ffff,BB +2620:11c:2000::,2620:11c:20ff:ffff:ffff:ffff:ffff:ffff,CA +2620:11c:3000::,2620:11c:30ff:ffff:ffff:ffff:ffff:ffff,US +2620:11c:4000::,2620:11c:40ff:ffff:ffff:ffff:ffff:ffff,US +2620:11c:5000::,2620:11c:500f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:6000::,2620:11c:600f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:7000::,2620:11c:700f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:8000::,2620:11c:80ff:ffff:ffff:ffff:ffff:ffff,US +2620:11c:9000::,2620:11c:900f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:a000::,2620:11c:a00f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:b000::,2620:11c:b00f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:c000::,2620:11c:c00f:ffff:ffff:ffff:ffff:ffff,CA +2620:11c:d000::,2620:11c:d00f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:e000::,2620:11c:e00f:ffff:ffff:ffff:ffff:ffff,US +2620:11c:f000::,2620:11c:f00f:ffff:ffff:ffff:ffff:ffff,US 2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US 2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US 2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US @@ -5575,7 +9966,7 @@ 2620:176::,2620:177:fff:ffff:ffff:ffff:ffff:ffff,US 2620:178::,2620:178:fff:ffff:ffff:ffff:ffff:ffff,US 2620:179::,2620:179:fff:ffff:ffff:ffff:ffff:ffff,US -2620:17a::,2620:17a:fff:ffff:ffff:ffff:ffff:ffff,US +2620:17a::,2620:17a:fff:ffff:ffff:ffff:ffff:ffff,FR 2620:17b::,2620:17b:fff:ffff:ffff:ffff:ffff:ffff,US 2620:17c::,2620:17c:fff:ffff:ffff:ffff:ffff:ffff,US 2620:17e::,2620:17e:fff:ffff:ffff:ffff:ffff:ffff,US @@ -5587,6 +9978,8 @@ 2620:1d0::,2620:1d0:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1e0::,2620:1e1:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1e2::,2620:1e2:fff:ffff:ffff:ffff:ffff:ffff,US +2620:1e3::,2620:1e3:fff:ffff:ffff:ffff:ffff:ffff,US +2620:1e4::,2620:1e4:ffff:ffff:ffff:ffff:ffff:ffff,CA 2620:1f0::,2620:1f1:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1f2::,2620:1f4:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1f5::,2620:1f5:fff:ffff:ffff:ffff:ffff:ffff,CA @@ -5875,6 +10268,7 @@ 2801:10::,2801:10:7:ffff:ffff:ffff:ffff:ffff,AR 2801:10:2000::,2801:10:2000:ffff:ffff:ffff:ffff:ffff,AR 2801:10:4000::,2801:10:4000:ffff:ffff:ffff:ffff:ffff,AR +2801:10:6000::,2801:10:6000:ffff:ffff:ffff:ffff:ffff,HN 2801:10:8000::,2801:10:8000:ffff:ffff:ffff:ffff:ffff,AR 2801:10:a000::,2801:10:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO @@ -5887,27 +10281,32 @@ 2801:12::,2801:12::ffff:ffff:ffff:ffff:ffff,PY 2801:12:2000::,2801:12:2000:ffff:ffff:ffff:ffff:ffff,HN 2801:12:4000::,2801:12:4000:ffff:ffff:ffff:ffff:ffff,CO +2801:12:6000::,2801:12:6000:ffff:ffff:ffff:ffff:ffff,SV 2801:12:8000::,2801:12:8000:ffff:ffff:ffff:ffff:ffff,AR -2801:12:a000::,2801:12:a000:ffff:ffff:ffff:ffff:ffff,CL +2801:12:a000::,2801:12:a00f:ffff:ffff:ffff:ffff:ffff,CL 2801:12:c000::,2801:12:c000:ffff:ffff:ffff:ffff:ffff,AR 2801:13::,2801:13::ffff:ffff:ffff:ffff:ffff,VE 2801:13:2000::,2801:13:2000:ffff:ffff:ffff:ffff:ffff,AR 2801:13:4000::,2801:13:4000:ffff:ffff:ffff:ffff:ffff,CL 2801:13:8000::,2801:13:8000:ffff:ffff:ffff:ffff:ffff,SV +2801:13:a000::,2801:13:a000:ffff:ffff:ffff:ffff:ffff,CO 2801:13:c000::,2801:13:c000:ffff:ffff:ffff:ffff:ffff,TT 2801:14::,2801:14::ffff:ffff:ffff:ffff:ffff,CO 2801:14:2000::,2801:14:2000:ffff:ffff:ffff:ffff:ffff,AR 2801:14:4000::,2801:14:4000:ffff:ffff:ffff:ffff:ffff,CO +2801:14:6000::,2801:14:6000:ffff:ffff:ffff:ffff:ffff,BO 2801:14:a000::,2801:14:a001:ffff:ffff:ffff:ffff:ffff,UY 2801:14:c000::,2801:14:c000:ffff:ffff:ffff:ffff:ffff,BO 2801:15::,2801:15::ffff:ffff:ffff:ffff:ffff,EC 2801:15:2000::,2801:15:2000:ffff:ffff:ffff:ffff:ffff,CR 2801:15:4000::,2801:15:4000:ffff:ffff:ffff:ffff:ffff,CO 2801:15:8000::,2801:15:8000:ffff:ffff:ffff:ffff:ffff,CR +2801:15:a000::,2801:15:a000:ffff:ffff:ffff:ffff:ffff,DO 2801:15:c000::,2801:15:c000:ffff:ffff:ffff:ffff:ffff,GT 2801:16::,2801:16::ffff:ffff:ffff:ffff:ffff,CW 2801:16:2000::,2801:16:2000:ffff:ffff:ffff:ffff:ffff,HN 2801:16:4000::,2801:16:4000:ffff:ffff:ffff:ffff:ffff,AR +2801:16:6000::,2801:16:6000:ffff:ffff:ffff:ffff:ffff,AR 2801:16:8000::,2801:16:8000:ffff:ffff:ffff:ffff:ffff,CO 2801:16:a000::,2801:16:a000:ffff:ffff:ffff:ffff:ffff,CR 2801:16:c000::,2801:16:c000:ffff:ffff:ffff:ffff:ffff,AR @@ -5915,10 +10314,12 @@ 2801:17:2000::,2801:17:2000:ffff:ffff:ffff:ffff:ffff,PY 2801:17:4000::,2801:17:4000:ffff:ffff:ffff:ffff:ffff,CO 2801:17:8000::,2801:17:8000:ffff:ffff:ffff:ffff:ffff,CR +2801:17:a000::,2801:17:a000:ffff:ffff:ffff:ffff:ffff,HT 2801:17:c000::,2801:17:c000:ffff:ffff:ffff:ffff:ffff,PA 2801:18::,2801:18::ffff:ffff:ffff:ffff:ffff,CR 2801:18:2000::,2801:18:2000:ffff:ffff:ffff:ffff:ffff,CO 2801:18:4000::,2801:18:4000:ffff:ffff:ffff:ffff:ffff,CO +2801:18:6000::,2801:18:6000:ffff:ffff:ffff:ffff:ffff,AR 2801:18:8000::,2801:18:8000:ffff:ffff:ffff:ffff:ffff,AR 2801:18:a000::,2801:18:a000:ffff:ffff:ffff:ffff:ffff,BO 2801:18:c000::,2801:18:c000:ffff:ffff:ffff:ffff:ffff,AR @@ -5931,6 +10332,7 @@ 2801:1a::,2801:1a::ffff:ffff:ffff:ffff:ffff,CO 2801:1a:2000::,2801:1a:2000:ffff:ffff:ffff:ffff:ffff,AR 2801:1a:4000::,2801:1a:4000:ffff:ffff:ffff:ffff:ffff,CO +2801:1a:6000::,2801:1a:6000:ffff:ffff:ffff:ffff:ffff,CR 2801:1a:8000::,2801:1a:8000:ffff:ffff:ffff:ffff:ffff,CL 2801:1a:a000::,2801:1a:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:1a:c000::,2801:1a:c000:ffff:ffff:ffff:ffff:ffff,CO @@ -5938,10 +10340,12 @@ 2801:1b:2000::,2801:1b:2000:ffff:ffff:ffff:ffff:ffff,UY 2801:1b:4000::,2801:1b:4000:ffff:ffff:ffff:ffff:ffff,CL 2801:1b:8000::,2801:1b:8000:ffff:ffff:ffff:ffff:ffff,CL +2801:1b:a000::,2801:1b:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:1b:c000::,2801:1b:c000:ffff:ffff:ffff:ffff:ffff,PA 2801:1c::,2801:1c::ffff:ffff:ffff:ffff:ffff,PY 2801:1c:2000::,2801:1c:2000:ffff:ffff:ffff:ffff:ffff,PE 2801:1c:4000::,2801:1c:4000:ffff:ffff:ffff:ffff:ffff,CO +2801:1c:6000::,2801:1c:6000:ffff:ffff:ffff:ffff:ffff,PA 2801:1c:8000::,2801:1c:8000:ffff:ffff:ffff:ffff:ffff,EC 2801:1c:a000::,2801:1c:a000:ffff:ffff:ffff:ffff:ffff,CO 2801:1c:c000::,2801:1c:c000:ffff:ffff:ffff:ffff:ffff,HN @@ -5949,6 +10353,7 @@ 2801:1d:2000::,2801:1d:2000:ffff:ffff:ffff:ffff:ffff,GT 2801:1d:4000::,2801:1d:4000:ffff:ffff:ffff:ffff:ffff,TT 2801:1d:8000::,2801:1d:8000:ffff:ffff:ffff:ffff:ffff,AR +2801:1d:a000::,2801:1d:a000:ffff:ffff:ffff:ffff:ffff,CR 2801:1d:c000::,2801:1d:c000:ffff:ffff:ffff:ffff:ffff,AR 2801:1e::,2801:1e::ffff:ffff:ffff:ffff:ffff,EC 2801:1e:2000::,2801:1e:2000:ffff:ffff:ffff:ffff:ffff,AR @@ -5960,6 +10365,7 @@ 2801:1f:2000::,2801:1f:2000:ffff:ffff:ffff:ffff:ffff,CR 2801:1f:4000::,2801:1f:4000:ffff:ffff:ffff:ffff:ffff,CR 2801:1f:8000::,2801:1f:8000:ffff:ffff:ffff:ffff:ffff,AR +2801:1f:a000::,2801:1f:a000:ffff:ffff:ffff:ffff:ffff,CL 2801:1f:c000::,2801:1f:c000:ffff:ffff:ffff:ffff:ffff,CR 2801:80::,2801:80::ffff:ffff:ffff:ffff:ffff,BR 2801:80:10::,2801:80:10:ffff:ffff:ffff:ffff:ffff,BR @@ -6137,7 +10543,6 @@ 2801:80:b10::,2801:80:b10:ffff:ffff:ffff:ffff:ffff,BR 2801:80:b20::,2801:80:b20:ffff:ffff:ffff:ffff:ffff,BR 2801:80:b30::,2801:80:b30:ffff:ffff:ffff:ffff:ffff,BR -2801:80:b40::,2801:80:b40:ffff:ffff:ffff:ffff:ffff,BR 2801:80:b50::,2801:80:b50:ffff:ffff:ffff:ffff:ffff,BR 2801:80:b60::,2801:80:b60:ffff:ffff:ffff:ffff:ffff,BR 2801:80:b70::,2801:80:b70:ffff:ffff:ffff:ffff:ffff,BR @@ -6151,6 +10556,23 @@ 2801:80:c10::,2801:80:c10:ffff:ffff:ffff:ffff:ffff,BR 2801:80:c20::,2801:80:c20:ffff:ffff:ffff:ffff:ffff,BR 2801:80:c30::,2801:80:c30:ffff:ffff:ffff:ffff:ffff,BR +2801:80:c40::,2801:80:c40:ffff:ffff:ffff:ffff:ffff,BR +2801:80:c50::,2801:80:c50:ffff:ffff:ffff:ffff:ffff,BR +2801:80:c60::,2801:80:c60:ffff:ffff:ffff:ffff:ffff,BR +2801:80:c70::,2801:80:c70:ffff:ffff:ffff:ffff:ffff,BR +2801:80:c80::,2801:80:c80:ffff:ffff:ffff:ffff:ffff,BR +2801:80:c90::,2801:80:c90:ffff:ffff:ffff:ffff:ffff,BR +2801:80:ca0::,2801:80:ca0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:cb0::,2801:80:cb0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:cc0::,2801:80:cc0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:cd0::,2801:80:cd0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:ce0::,2801:80:ce0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:cf0::,2801:80:cf0:ffff:ffff:ffff:ffff:ffff,BR +2801:80:d10::,2801:80:d10:ffff:ffff:ffff:ffff:ffff,BR +2801:80:d20::,2801:80:d2f:ffff:ffff:ffff:ffff:ffff,BR +2801:80:d40::,2801:80:d40:ffff:ffff:ffff:ffff:ffff,BR +2801:80:d50::,2801:80:d50:ffff:ffff:ffff:ffff:ffff,BR +2801:80:d60::,2801:80:d6f:ffff:ffff:ffff:ffff:ffff,BR 2801:82::,2801:82:ffff:ffff:ffff:ffff:ffff:ffff,BR 2801:84::,2801:84:ffff:ffff:ffff:ffff:ffff:ffff,BR 2801:86::,2801:86:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -6209,6 +10631,7 @@ 2801:160::,2801:160:ff:ffff:ffff:ffff:ffff:ffff,CO 2801:170::,2801:170:fff:ffff:ffff:ffff:ffff:ffff,CO 2801:180::,2801:180:f:ffff:ffff:ffff:ffff:ffff,PA +2801:188::,2801:188:f:ffff:ffff:ffff:ffff:ffff,AR 2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO 2801:1a0::,2801:1a0:3f:ffff:ffff:ffff:ffff:ffff,CO 2801:1b0::,2801:1b0:ff:ffff:ffff:ffff:ffff:ffff,CO @@ -6224,6 +10647,7 @@ 2803:200::,2803:200:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:280::,2803:280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:300::,2803:300:ffff:ffff:ffff:ffff:ffff:ffff,DO +2803:380::,2803:380:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:400::,2803:400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:480::,2803:480:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:500::,2803:500:ffff:ffff:ffff:ffff:ffff:ffff,PE @@ -6238,6 +10662,7 @@ 2803:a00::,2803:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a80::,2803:a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:b00::,2803:b00:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:b80::,2803:b80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:c00::,2803:c00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c80::,2803:c80:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:d00::,2803:d00:ffff:ffff:ffff:ffff:ffff:ffff,GY @@ -6252,8 +10677,8 @@ 2803:1200::,2803:1200:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:1280::,2803:1280:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:1300::,2803:1300:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:1380::,2803:1380:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:1400::,2803:1400:ffff:ffff:ffff:ffff:ffff:ffff,DO -2803:1480::,2803:1480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1500::,2803:1500:ffff:ffff:ffff:ffff:ffff:ffff,TT 2803:1580::,2803:1580:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ @@ -6266,8 +10691,10 @@ 2803:1a00::,2803:1a00:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1a80::,2803:1a80:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:1b00::,2803:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:1b80::,2803:1b80:ffff:ffff:ffff:ffff:ffff:ffff,TT 2803:1c80::,2803:1c80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1d00::,2803:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:1d80::,2803:1d80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1e00::,2803:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:1e80::,2803:1e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1f00::,2803:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6278,6 +10705,7 @@ 2803:2200::,2803:2200:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:2280::,2803:2280:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:2300::,2803:2300:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:2380::,2803:2380:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2400::,2803:2400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2480::,2803:2480:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:2500::,2803:2500:ffff:ffff:ffff:ffff:ffff:ffff,PE @@ -6292,9 +10720,11 @@ 2803:2a00::,2803:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:2a80::,2803:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:2b00::,2803:2b00:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:2b80::,2803:2b80:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:2c00::,2803:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2c80::,2803:2c80:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:2d00::,2803:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:2d80::,2803:2d80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:2e00::,2803:2e00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:2e80::,2803:2e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2f00::,2803:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6305,6 +10735,7 @@ 2803:3200::,2803:3200:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:3280::,2803:3280:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:3300::,2803:3300:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:3380::,2803:3380:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3400::,2803:3400:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:3480::,2803:3480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3500::,2803:3500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6322,6 +10753,7 @@ 2803:3c00::,2803:3c00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:3c80::,2803:3c80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3d00::,2803:3d00:ffff:ffff:ffff:ffff:ffff:ffff,BZ +2803:3d80::,2803:3d80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3e00::,2803:3e00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3e80::,2803:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:3f00::,2803:3f00:ffff:ffff:ffff:ffff:ffff:ffff,HN @@ -6332,6 +10764,7 @@ 2803:4200::,2803:4200:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:4280::,2803:4280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4300::,2803:4300:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:4380::,2803:4380:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:4400::,2803:4400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4480::,2803:4480:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:4500::,2803:4500:ffff:ffff:ffff:ffff:ffff:ffff,CW @@ -6346,6 +10779,7 @@ 2803:4a00::,2803:4a00:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:4a80::,2803:4a80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4b00::,2803:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:4b80::,2803:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4c00::,2803:4c00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:4c80::,2803:4c80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:4d00::,2803:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -6360,6 +10794,7 @@ 2803:5200::,2803:5200:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5280::,2803:5280:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:5300::,2803:5300:ffff:ffff:ffff:ffff:ffff:ffff,GT +2803:5380::,2803:5380:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:5400::,2803:5400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5480::,2803:5480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5500::,2803:5500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6368,14 +10803,16 @@ 2803:5680::,2803:5680:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:5700::,2803:5700:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:5880::,2803:5880:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GY +2803:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GF 2803:5980::,2803:5980:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5a00::,2803:5a00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5a80::,2803:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:5b00::,2803:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:5b80::,2803:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5c00::,2803:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:5c80::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:5d00::,2803:5d00:ffff:ffff:ffff:ffff:ffff:ffff,SV +2803:5d80::,2803:5d80:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:5e00::,2803:5e00:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:5e80::,2803:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5f00::,2803:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6386,6 +10823,7 @@ 2803:6200::,2803:6200:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:6280::,2803:6280:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:6300::,2803:6300:ffff:ffff:ffff:ffff:ffff:ffff,GT +2803:6380::,2803:6380:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6400::,2803:6400:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:6480::,2803:6480:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:6500::,2803:6500:ffff:ffff:ffff:ffff:ffff:ffff,PE @@ -6400,9 +10838,11 @@ 2803:6a00::,2803:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:6a80::,2803:6a80:ffff:ffff:ffff:ffff:ffff:ffff,NI 2803:6b00::,2803:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:6b80::,2803:6b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6c00::,2803:6c00:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:6c80::,2803:6c80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6d00::,2803:6d00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:6d80::,2803:6d80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:6e00::,2803:6e00:ffff:ffff:ffff:ffff:ffff:ffff,SR 2803:6e80::,2803:6e80:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:6f00::,2803:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -6413,6 +10853,7 @@ 2803:7200::,2803:7200:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:7280::,2803:7280:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:7300::,2803:7300:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:7380::,2803:7380:ffff:ffff:ffff:ffff:ffff:ffff,SX 2803:7400::,2803:7400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7480::,2803:7480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7500::,2803:7500:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -6430,6 +10871,7 @@ 2803:7c00::,2803:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:7c80::,2803:7c80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:7d00::,2803:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:7d80::,2803:7d80:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:7e00::,2803:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7e80::,2803:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7f00::,2803:7f00:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -6440,6 +10882,7 @@ 2803:8200::,2803:8200:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:8280::,2803:8280:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:8300::,2803:8300:ffff:ffff:ffff:ffff:ffff:ffff,EC +2803:8380::,2803:8380:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8400::,2803:8400:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:8480::,2803:8480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8500::,2803:8500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6454,6 +10897,7 @@ 2803:8a00::,2803:8a00:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:8b00::,2803:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:8b80::,2803:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:8c00::,2803:8c00:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:8c80::,2803:8c80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:8d00::,2803:8d00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6468,6 +10912,7 @@ 2803:9200::,2803:9200:ffff:ffff:ffff:ffff:ffff:ffff,SV 2803:9280::,2803:9280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9300::,2803:9300:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:9380::,2803:9380:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:9400::,2803:9400:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:9480::,2803:9480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9500::,2803:9500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6482,9 +10927,11 @@ 2803:9a00::,2803:9a00:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:9a80::,2803:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:9b00::,2803:9b00:ffff:ffff:ffff:ffff:ffff:ffff,DO +2803:9b80::,2803:9b80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9c00::,2803:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9c80::,2803:9c80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9d00::,2803:9d00:ffff:ffff:ffff:ffff:ffff:ffff,SV +2803:9d80::,2803:9d80:ffff:ffff:ffff:ffff:ffff:ffff,SV 2803:9e00::,2803:9e00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9e80::,2803:9e80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:9f00::,2803:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6495,6 +10942,7 @@ 2803:a200::,2803:a200:ffff:ffff:ffff:ffff:ffff:ffff,SR 2803:a280::,2803:a280:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:a300::,2803:a300:ffff:ffff:ffff:ffff:ffff:ffff,BZ +2803:a380::,2803:a380:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:a400::,2803:a400:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a500::,2803:a500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6509,9 +10957,11 @@ 2803:aa00::,2803:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:aa80::,2803:aa80:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:ab00::,2803:ab00:ffff:ffff:ffff:ffff:ffff:ffff,DO +2803:ab80::,2803:ab80:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:ac00::,2803:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:ac80::,2803:ac80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:ad00::,2803:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:ad80::,2803:ad80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:ae00::,2803:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ae80::,2803:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:af00::,2803:af00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6522,6 +10972,7 @@ 2803:b200::,2803:b200:ffff:ffff:ffff:ffff:ffff:ffff,UY 2803:b280::,2803:b280:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:b300::,2803:b300:ffff:ffff:ffff:ffff:ffff:ffff,PY +2803:b380::,2803:b380:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b400::,2803:b400:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:b480::,2803:b480:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:b500::,2803:b500:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -6539,6 +10990,7 @@ 2803:bc00::,2803:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:bc80::,2803:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:bd00::,2803:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:bd80::,2803:bd80:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:be00::,2803:be00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:be80::,2803:be80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:bf00::,2803:bf00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6549,6 +11001,7 @@ 2803:c200::,2803:c200:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:c280::,2803:c280:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:c300::,2803:c300:ffff:ffff:ffff:ffff:ffff:ffff,GT +2803:c380::,2803:c380:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:c400::,2803:c400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c480::,2803:c480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c500::,2803:c500:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6563,9 +11016,11 @@ 2803:ca00::,2803:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ca80::,2803:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:cb00::,2803:cb00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:cb80::,2803:cb80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:cc00::,2803:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:cc80::,2803:cc80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:cd00::,2803:cd00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:cd80::,2803:cd80:ffff:ffff:ffff:ffff:ffff:ffff,TT 2803:ce00::,2803:ce00:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:ce80::,2803:ce80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:cf00::,2803:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -6576,6 +11031,7 @@ 2803:d200::,2803:d200:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:d280::,2803:d280:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:d300::,2803:d300:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:d380::,2803:d380:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:d400::,2803:d400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d500::,2803:d500:ffff:ffff:ffff:ffff:ffff:ffff,BZ @@ -6593,6 +11049,7 @@ 2803:dc00::,2803:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:dc80::,2803:dc80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:dd00::,2803:dd00:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:dd80::,2803:dd80:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:de00::,2803:de00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:de80::,2803:de80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:df00::,2803:df00:ffff:ffff:ffff:ffff:ffff:ffff,SV @@ -6603,6 +11060,7 @@ 2803:e200::,2803:e200:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e280::,2803:e280:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e300::,2803:e300:ffff:ffff:ffff:ffff:ffff:ffff,CR +2803:e380::,2803:e380:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:e400::,2803:e400:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e480::,2803:e480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e500::,2803:e500:ffff:ffff:ffff:ffff:ffff:ffff,PE @@ -6617,9 +11075,11 @@ 2803:ea00::,2803:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ea80::,2803:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:eb00::,2803:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:eb80::,2803:eb80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ec00::,2803:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ec80::,2803:ec80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ed00::,2803:ed00:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:ed80::,2803:ed80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:ee00::,2803:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ee80::,2803:ee80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:ef00::,2803:ef00:ffff:ffff:ffff:ffff:ffff:ffff,PA @@ -6630,6 +11090,7 @@ 2803:f200::,2803:f200:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f280::,2803:f280:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:f300::,2803:f300:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:f380::,2803:f380:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f400::,2803:f400:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:f480::,2803:f480:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:f500::,2803:f500:ffff:ffff:ffff:ffff:ffff:ffff,CW @@ -6644,8 +11105,10 @@ 2803:fa00::,2803:fa00:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:fa80::,2803:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fb00::,2803:fb00:ffff:ffff:ffff:ffff:ffff:ffff,PA +2803:fc00::,2803:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PY 2803:fc80::,2803:fc80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:fd00::,2803:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CO +2803:fd80::,2803:fd80:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:fe00::,2803:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:fe80::,2803:fe80:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:ff00::,2803:ff00:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -7050,7 +11513,6 @@ 2804:670::,2804:670:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:674::,2804:674:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:678::,2804:678:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:67c::,2804:67c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:680::,2804:680:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:684::,2804:684:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:688::,2804:688:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -8381,15 +12843,233 @@ 2804:1b78::,2804:1b78:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1b7c::,2804:1b7c:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1b80::,2804:1b80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b84::,2804:1b84:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b88::,2804:1b88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b8c::,2804:1b8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b90::,2804:1b90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b94::,2804:1b94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b98::,2804:1b98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1b9c::,2804:1b9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ba0::,2804:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ba4::,2804:1ba4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ba8::,2804:1ba8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bac::,2804:1bac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bb0::,2804:1bb0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bb4::,2804:1bb4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bb8::,2804:1bb8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bbc::,2804:1bbc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bc0::,2804:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bc4::,2804:1bc4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bc8::,2804:1bc8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bcc::,2804:1bcc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bd0::,2804:1bd0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bd4::,2804:1bd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bd8::,2804:1bd8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bdc::,2804:1bdc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1be0::,2804:1be0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1be4::,2804:1be4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1be8::,2804:1be8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bec::,2804:1bec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bf0::,2804:1bf0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bf4::,2804:1bf4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bf8::,2804:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1bfc::,2804:1bfc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c00::,2804:1c00:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c04::,2804:1c04:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c08::,2804:1c08:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c0c::,2804:1c0c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c10::,2804:1c10:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c14::,2804:1c14:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c18::,2804:1c18:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c1c::,2804:1c1c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c20::,2804:1c20:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c24::,2804:1c24:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c28::,2804:1c28:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c2c::,2804:1c2c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c30::,2804:1c30:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c34::,2804:1c34:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c38::,2804:1c38:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c3c::,2804:1c3c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c40::,2804:1c40:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c44::,2804:1c44:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c48::,2804:1c48:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c4c::,2804:1c4c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c50::,2804:1c50:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c54::,2804:1c54:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c58::,2804:1c58:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c5c::,2804:1c5c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c60::,2804:1c60:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c64::,2804:1c64:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c68::,2804:1c68:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c6c::,2804:1c6c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c70::,2804:1c70:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c74::,2804:1c74:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c78::,2804:1c78:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c7c::,2804:1c7c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c80::,2804:1c80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c84::,2804:1c84:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c88::,2804:1c88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c8c::,2804:1c8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c90::,2804:1c90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c94::,2804:1c94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c98::,2804:1c98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1c9c::,2804:1c9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ca0::,2804:1ca0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ca4::,2804:1ca4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ca8::,2804:1ca8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cac::,2804:1cac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cb0::,2804:1cb0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cb4::,2804:1cb4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cb8::,2804:1cb8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cbc::,2804:1cbc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cc0::,2804:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cc4::,2804:1cc4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cc8::,2804:1cc8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ccc::,2804:1ccc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cd0::,2804:1cd0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cd4::,2804:1cd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cd8::,2804:1cd8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cdc::,2804:1cdc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ce0::,2804:1ce0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ce4::,2804:1ce4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ce8::,2804:1ce8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cec::,2804:1cec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cf0::,2804:1cf0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cf4::,2804:1cf4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cf8::,2804:1cf8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1cfc::,2804:1cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d00::,2804:1d00:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d04::,2804:1d04:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d08::,2804:1d08:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d0c::,2804:1d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d10::,2804:1d10:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d14::,2804:1d14:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d18::,2804:1d18:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d1c::,2804:1d1c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d20::,2804:1d20:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d24::,2804:1d24:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d28::,2804:1d28:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d2c::,2804:1d2c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d30::,2804:1d30:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d34::,2804:1d34:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d38::,2804:1d38:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d3c::,2804:1d3c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d40::,2804:1d40:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d44::,2804:1d44:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d48::,2804:1d48:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d4c::,2804:1d4c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d50::,2804:1d50:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d54::,2804:1d54:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d58::,2804:1d58:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d5c::,2804:1d5c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d60::,2804:1d60:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d64::,2804:1d64:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d68::,2804:1d68:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d6c::,2804:1d6c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d70::,2804:1d70:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d74::,2804:1d74:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d78::,2804:1d78:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d7c::,2804:1d7c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d80::,2804:1d80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d84::,2804:1d84:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d88::,2804:1d88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d8c::,2804:1d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d90::,2804:1d90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d94::,2804:1d94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d98::,2804:1d98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1d9c::,2804:1d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1da0::,2804:1da0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1da4::,2804:1da4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1da8::,2804:1da8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dac::,2804:1dac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1db0::,2804:1db0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1db4::,2804:1db4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1db8::,2804:1db8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dbc::,2804:1dbc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dc0::,2804:1dc0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dc4::,2804:1dc4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dc8::,2804:1dc8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dcc::,2804:1dcc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dd0::,2804:1dd0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dd4::,2804:1dd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dd8::,2804:1dd8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ddc::,2804:1ddc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1de0::,2804:1de0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1de4::,2804:1de4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1de8::,2804:1de8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dec::,2804:1dec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1df0::,2804:1df0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1df4::,2804:1df4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1df8::,2804:1df8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1dfc::,2804:1dfc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e00::,2804:1e00:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e04::,2804:1e04:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e08::,2804:1e08:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e0c::,2804:1e0c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e10::,2804:1e10:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e14::,2804:1e14:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e18::,2804:1e18:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e1c::,2804:1e1c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e20::,2804:1e20:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e24::,2804:1e24:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e28::,2804:1e28:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e2c::,2804:1e2c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e30::,2804:1e30:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e34::,2804:1e34:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e38::,2804:1e38:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e3c::,2804:1e3c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e40::,2804:1e40:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e44::,2804:1e44:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e48::,2804:1e48:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e4c::,2804:1e4c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e50::,2804:1e50:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e54::,2804:1e54:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e58::,2804:1e58:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e5c::,2804:1e5c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e60::,2804:1e60:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e64::,2804:1e64:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e68::,2804:1e68:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e6c::,2804:1e6c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e70::,2804:1e70:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e74::,2804:1e74:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e78::,2804:1e78:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e7c::,2804:1e7c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e80::,2804:1e80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e84::,2804:1e84:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e88::,2804:1e88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e8c::,2804:1e8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e90::,2804:1e90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e94::,2804:1e94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e98::,2804:1e98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1e9c::,2804:1e9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ea0::,2804:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ea4::,2804:1ea4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ea8::,2804:1ea8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1eac::,2804:1eac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1eb0::,2804:1eb0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1eb4::,2804:1eb4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1eb8::,2804:1eb8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ebc::,2804:1ebc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ec0::,2804:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ec4::,2804:1ec4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ec8::,2804:1ec8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ecc::,2804:1ecc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ed0::,2804:1ed0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ed4::,2804:1ed4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1ed8::,2804:1ed8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1edc::,2804:1edc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f00::,2804:1f00:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f02::,2804:1f02:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f04::,2804:1f04:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f06::,2804:1f06:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f08::,2804:1f08:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1f0a::,2804:1f0a:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1f0c::,2804:1f0c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1f0e::,2804:1f0e:1fff:ffff:ffff:ffff:ffff:ffff,BR 2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:200::,2806:200:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:210::,2806:216::ffff:ffff:ffff:ffff:ffff,MX -2806:217::,2806:218:ffff:ffff:ffff:ffff:ffff:ffff,MX +2806:217::,2806:21b:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:220::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:230::,2806:230:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:238::,2806:238::ffff:ffff:ffff:ffff:ffff,MX @@ -8417,7 +13097,9 @@ 2806:370::,2806:370:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:1000::,2806:10ff:ffff:ffff:ffff:ffff:ffff:ffff,MX 2a00::,2a00:3ff:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:800::,2a00:87f:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a00:800::,2a00:801:210:ffff:ffff:ffff:ffff:ffff,SE +2a00:801:211::,2a00:801:211:ffff:ffff:ffff:ffff:ffff,NO +2a00:801:212::,2a00:87f:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:c00::,2a00:c00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:c08::,2a00:c08:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:c10::,2a00:c10:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -8481,7 +13163,6 @@ 2a00:e10::,2a00:e10:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:e18::,2a00:e18:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a00:e20::,2a00:e20:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a00:e28::,2a00:e28:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:e30::,2a00:e30:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:e38::,2a00:e38:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a00:e40::,2a00:e40:ffff:ffff:ffff:ffff:ffff:ffff,BG @@ -8793,7 +13474,7 @@ 2a00:1878::,2a00:1878:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:1880::,2a00:1880:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a00:1888::,2a00:1888:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a00:1890::,2a00:1890:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:1890::,2a00:1897:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1898::,2a00:1898:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:18a0::,2a00:18a0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:18a8::,2a00:18a8:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -8809,7 +13490,7 @@ 2a00:18f8::,2a00:18f8:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a00:1900::,2a00:1900:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1908::,2a00:1908:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a00:1910::,2a00:1910:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:1910::,2a00:1917:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1918::,2a00:191f:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a00:1920::,2a00:1920:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1928::,2a00:1928:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -9113,7 +13794,7 @@ 2a00:4a80::,2a00:4a80:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:4aa0::,2a00:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:4ac0::,2a00:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a00:4ae0::,2a00:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a00:4ae0::,2a00:4ae7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:4b00::,2a00:4b00:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:4b40::,2a00:4b40:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a00:4b60::,2a00:4b60:ffff:ffff:ffff:ffff:ffff:ffff,CY @@ -9124,7 +13805,6 @@ 2a00:4c00::,2a00:4c00:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:4c20::,2a00:4c20:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a00:4c40::,2a00:4c40:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:4c60::,2a00:4c60:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:4c80::,2a00:4c87:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a00:4ca0::,2a00:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:4cc0::,2a00:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,FI @@ -9240,7 +13920,7 @@ 2a00:5b40::,2a00:5b40:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:5b60::,2a00:5b60:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:5b80::,2a00:5b87:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a00:5ba0::,2a00:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:5ba0::,2a00:5ba7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:5bc0::,2a00:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:5be0::,2a00:5be0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:5c00::,2a00:5c00:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -9322,7 +14002,7 @@ 2a00:65e0::,2a00:65e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:6600::,2a00:6600:ffff:ffff:ffff:ffff:ffff:ffff,BH 2a00:6620::,2a00:6620:ffff:ffff:ffff:ffff:ffff:ffff,GR -2a00:6640::,2a00:6640:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a00:6640::,2a00:6647:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:6660::,2a00:6660:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a00:6680::,2a00:6680:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:66a0::,2a00:66a0:ffff:ffff:ffff:ffff:ffff:ffff,IL @@ -9529,7 +14209,7 @@ 2a00:81e0::,2a00:81e0:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a00:8200::,2a00:8200:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a00:8220::,2a00:8220:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a00:8240::,2a00:8240:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a00:8240::,2a00:8247:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:8260::,2a00:8260:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:8280::,2a00:8280:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:82a0::,2a00:82a0:ffff:ffff:ffff:ffff:ffff:ffff,BG @@ -10001,7 +14681,14 @@ 2a00:c0a0::,2a00:c0a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ 2a00:c0c0::,2a00:c0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:c0e0::,2a00:c0e0:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a00:c100::,2a00:c1ff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:c100::,2a00:c100:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a00:c120::,2a00:c120:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:c140::,2a00:c140:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a00:c160::,2a00:c160:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a00:c180::,2a00:c180:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a00:c1a0::,2a00:c1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:c1c0::,2a00:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a00:c1e0::,2a00:c1e7:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:c200::,2a00:c200:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a00:c220::,2a00:c220:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:c240::,2a00:c240:ffff:ffff:ffff:ffff:ffff:ffff,AE @@ -10059,7 +14746,7 @@ 2a00:c920::,2a00:c920:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a00:c940::,2a00:c940:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:c960::,2a00:c960:ffff:ffff:ffff:ffff:ffff:ffff,GR -2a00:c980::,2a00:c980:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a00:c980::,2a00:c987:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:c9a0::,2a00:c9a0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:c9c0::,2a00:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:c9e0::,2a00:c9e0:ffff:ffff:ffff:ffff:ffff:ffff,IQ @@ -10073,7 +14760,6 @@ 2a00:cb00::,2a00:cb00:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a00:cb20::,2a00:cb20:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:cb40::,2a00:cb40:ffff:ffff:ffff:ffff:ffff:ffff,SK -2a00:cb60::,2a00:cb60:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a00:cb80::,2a00:cb80:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:cba0::,2a00:cba0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:cbc0::,2a00:cbc0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -10380,7 +15066,6 @@ 2a00:f3a0::,2a00:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:f3c0::,2a00:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:f3e0::,2a00:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a00:f400::,2a00:f400:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a00:f420::,2a00:f420:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:f440::,2a00:f440:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:f460::,2a00:f460:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -10473,12 +15158,42 @@ 2a00:ffa0::,2a00:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:ffc0::,2a00:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:ffe0::,2a00:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a01::,2a01:ff:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a01::,2a01::ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:8::,2a01:8:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a01:10::,2a01:10:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a01:18::,2a01:18:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a01:20::,2a01:20:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:28::,2a01:28:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a01:30::,2a01:30:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a01:38::,2a01:38:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a01:40::,2a01:40:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:48::,2a01:48:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a01:50::,2a01:50:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:58::,2a01:58:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a01:68::,2a01:68:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:70::,2a01:70:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:78::,2a01:78:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a01:80::,2a01:80:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a01:88::,2a01:88:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a01:90::,2a01:90:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:98::,2a01:98:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:a0::,2a01:a0:ffff:ffff:ffff:ffff:ffff:ffff,MT +2a01:a8::,2a01:a8:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a01:b0::,2a01:b1:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a01:b8::,2a01:b8:ffff:ffff:ffff:ffff:ffff:ffff,VA +2a01:c0::,2a01:c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:c8::,2a01:c8:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:d0::,2a01:d0:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a01:d8::,2a01:d8:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a01:e0::,2a01:e0:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a01:e8::,2a01:e8:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a01:f0::,2a01:f0:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a01:f8::,2a01:f8:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a01:100::,2a01:100:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a01:108::,2a01:108:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a01:110:10::,2a01:110:10:ffff:ffff:ffff:ffff:ffff,GB 2a01:120::,2a01:120:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:130::,2a01:130:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:138::,2a01:13f:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a01:130::,2a01:13f:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:140::,2a01:140:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:148::,2a01:148:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:150::,2a01:150:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -10496,7 +15211,7 @@ 2a01:1b0::,2a01:1b0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:1b8::,2a01:1b8:ffff:ffff:ffff:ffff:ffff:ffff,EE 2a01:1c0::,2a01:1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a01:1c8::,2a01:1c8:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a01:1c8::,2a01:1cf:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a01:1d0::,2a01:1d0:ffff:ffff:ffff:ffff:ffff:ffff,JO 2a01:1d8::,2a01:1d8:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:1e0::,2a01:1e0:ffff:ffff:ffff:ffff:ffff:ffff,IE @@ -10531,6 +15246,7 @@ 2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:2d8::,2a01:2d8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a01:300:22::,2a01:300:22:ffff:ffff:ffff:ffff:ffff,GB 2a01:308::,2a01:308:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:310::,2a01:310:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:320::,2a01:320:ffff:ffff:ffff:ffff:ffff:ffff,MD @@ -10538,9 +15254,11 @@ 2a01:330::,2a01:330:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:338::,2a01:338:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:340::,2a01:340:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a01:348::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:348::,2a01:348:6f:ffff:ffff:ffff:ffff:ffff,GB +2a01:348:70::,2a01:348:70:ffff:ffff:ffff:ffff:ffff,AE +2a01:348:71::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:350::,2a01:350:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a01:358::,2a01:358:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a01:358::,2a01:35f:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a01:360::,2a01:360:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:368::,2a01:36f:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a01:378::,2a01:378:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -10678,7 +15396,11 @@ 2a01:7f8::,2a01:7f8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:800::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:c00::,2a01:c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:e00::,2a01:eff:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:e00::,2a01:e35:2e0a:ffff:ffff:ffff:ffff:ffff,FR +2a01:e35:2e0b::,2a01:e35:2e0b:ffff:ffff:ffff:ffff:ffff,US +2a01:e35:2e0c::,2a01:e35:8bde:ffff:ffff:ffff:ffff:ffff,FR +2a01:e35:8bdf::,2a01:e35:8bdf:ffff:ffff:ffff:ffff:ffff,NL +2a01:e35:8be0::,2a01:e3f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:1000::,2a01:17ff:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:2000::,2a01:2fff:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:4000::,2a01:4000:ffff:ffff:ffff:ffff:ffff:ffff,AM @@ -10724,7 +15446,6 @@ 2a01:45c0::,2a01:45c0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:45e0::,2a01:45e0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:4600::,2a01:4600:ffff:ffff:ffff:ffff:ffff:ffff,BH -2a01:4620::,2a01:4620:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:4640::,2a01:4640:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:4660::,2a01:4660:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:4680::,2a01:4680:ffff:ffff:ffff:ffff:ffff:ffff,RS @@ -10813,7 +15534,6 @@ 2a01:5140::,2a01:5140:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:5160::,2a01:5160:ffff:ffff:ffff:ffff:ffff:ffff,ME 2a01:5180::,2a01:5180:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a01:51a0::,2a01:51a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:51c0::,2a01:51c7:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a01:5200::,2a01:5200:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a01:5220::,2a01:5220:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -10850,7 +15570,7 @@ 2a01:5620::,2a01:5620:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:5640::,2a01:5640:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:5660::,2a01:5660:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a01:5680::,2a01:5680:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:5680::,2a01:5687:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:56a0::,2a01:56a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:56c0::,2a01:56c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:56e0::,2a01:56e0:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -11081,7 +15801,6 @@ 2a01:7400::,2a01:7400:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:7420::,2a01:7420:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7440::,2a01:7440:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a01:7460::,2a01:7460:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7480::,2a01:7480:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:74a0::,2a01:74a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:74c0::,2a01:74c0:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -11113,7 +15832,6 @@ 2a01:7820::,2a01:7820:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7840::,2a01:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7860::,2a01:7860:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a01:7880::,2a01:7880:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:78a0::,2a01:78a0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:78c0::,2a01:78c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:78e0::,2a01:78e0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -11232,7 +15950,7 @@ 2a01:8780::,2a01:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:87c0::,2a01:87c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:87e0::,2a01:87e0:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a01:8800::,2a01:8800:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a01:8800::,2a01:8807:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:8820::,2a01:8820:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:8840::,2a01:8840:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:8860::,2a01:8860:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -11272,7 +15990,7 @@ 2a01:8ca0::,2a01:8ca0:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a01:8cc0::,2a01:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a01:8ce0::,2a01:8ce0:ffff:ffff:ffff:ffff:ffff:ffff,KZ -2a01:8d00::,2a01:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a01:8d00::,2a01:8d03:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:8d20::,2a01:8d20:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:8d40::,2a01:8d47:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:8d80::,2a01:8d80:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -11289,7 +16007,7 @@ 2a01:8f00::,2a01:8f00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:8f20::,2a01:8f20:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:8f40::,2a01:8f40:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a01:8f60::,2a01:8f60:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a01:8f60::,2a01:8f67:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a01:8f80::,2a01:8f80:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:8fa0::,2a01:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:8fc0::,2a01:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -11453,7 +16171,6 @@ 2a01:a400::,2a01:a400:ffff:ffff:ffff:ffff:ffff:ffff,JE 2a01:a420::,2a01:a420:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a01:a440::,2a01:a440:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a01:a460::,2a01:a460:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:a4a0::,2a01:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a01:a4c0::,2a01:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a01:a4e0::,2a01:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -11712,7 +16429,6 @@ 2a02:188::,2a02:18f:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:190::,2a02:190:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:198::,2a02:198:ffff:ffff:ffff:ffff:ffff:ffff,IE -2a02:1a0::,2a02:1a7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:1a8::,2a02:1a8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:1b8::,2a02:1b8:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:1c0::,2a02:1c0:ffff:ffff:ffff:ffff:ffff:ffff,BG @@ -11726,7 +16442,7 @@ 2a02:200::,2a02:200:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:208::,2a02:208:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:210::,2a02:210:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a02:218::,2a02:218:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:218::,2a02:21f:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:220::,2a02:220:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a02:228::,2a02:22f:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:230::,2a02:230:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -11734,7 +16450,7 @@ 2a02:240::,2a02:240:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:248::,2a02:248:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:250::,2a02:250:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a02:258::,2a02:258:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:258::,2a02:25f:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:260::,2a02:260:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:268::,2a02:268:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a02:270::,2a02:270:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -11798,7 +16514,7 @@ 2a02:450::,2a02:450:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:458::,2a02:458:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:460::,2a02:460:ffff:ffff:ffff:ffff:ffff:ffff,DK -2a02:468::,2a02:468:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:468::,2a02:46f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:470::,2a02:470:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:478::,2a02:478:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:480::,2a02:480:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -11816,7 +16532,34 @@ 2a02:4e8::,2a02:4e8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:4f0::,2a02:4f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:4f8::,2a02:4f8:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a02:500::,2a02:5ff:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a02:500::,2a02:500:ffff:ffff:ffff:ffff:ffff:ffff,LV +2a02:508::,2a02:508:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a02:518::,2a02:518:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a02:520::,2a02:520:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:530::,2a02:530:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:538::,2a02:538:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a02:540::,2a02:540:ffff:ffff:ffff:ffff:ffff:ffff,CY +2a02:548::,2a02:548:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:550::,2a02:550:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:558::,2a02:558:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a02:560::,2a02:560:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:568::,2a02:568:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:570::,2a02:570:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:578::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:580::,2a02:587:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a02:588::,2a02:588:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:590::,2a02:590:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:598::,2a02:598:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:5a0::,2a02:5a0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:5b0::,2a02:5b0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:5b8::,2a02:5b8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:5c0::,2a02:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a02:5c8::,2a02:5c8:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a02:5d0::,2a02:5d0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:5d8::,2a02:5d8:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a02:5e0::,2a02:5e0:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a02:5f0::,2a02:5f0:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a02:5f8::,2a02:5f8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:600::,2a02:600:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:608::,2a02:608:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:610::,2a02:610:ffff:ffff:ffff:ffff:ffff:ffff,LV @@ -11892,7 +16635,7 @@ 2a02:840::,2a02:840:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a02:848::,2a02:848:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:850::,2a02:850:ffff:ffff:ffff:ffff:ffff:ffff,AT -2a02:858::,2a02:858:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a02:858::,2a02:85f:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a02:860::,2a02:860:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:868::,2a02:868:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:870::,2a02:870:ffff:ffff:ffff:ffff:ffff:ffff,PT @@ -11913,7 +16656,40 @@ 2a02:8e8::,2a02:8e8:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:8f0::,2a02:8f0:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a02:8f8::,2a02:8f8:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a02:900::,2a02:a00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:900::,2a02:900:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a02:908::,2a02:908:f460:ffff:ffff:ffff:ffff:ffff,DE +2a02:908:f461::,2a02:908:f461:ffff:ffff:ffff:ffff:ffff,CA +2a02:908:f462::,2a02:908:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:910::,2a02:910:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:918::,2a02:918:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:920::,2a02:920:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a02:928::,2a02:928:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:930::,2a02:930:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:938::,2a02:93f:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:940::,2a02:940:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a02:950::,2a02:957:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a02:958::,2a02:958:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:960::,2a02:960:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:968::,2a02:968:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:970::,2a02:970:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:978::,2a02:978:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:980::,2a02:980:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a02:988::,2a02:988:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:990::,2a02:990:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:998::,2a02:998:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:9a0::,2a02:9a0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a02:9a8::,2a02:9a8:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a02:9b0::,2a02:9b0:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a02:9b8::,2a02:9b9:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:9c0::,2a02:9c0:ffff:ffff:ffff:ffff:ffff:ffff,JO +2a02:9c8::,2a02:9c8:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:9d0::,2a02:9d0:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a02:9d8::,2a02:9d8:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:9e0::,2a02:9e0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:9e8::,2a02:9e8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:9f0::,2a02:9f0:ffff:ffff:ffff:ffff:ffff:ffff,IS +2a02:9f8::,2a02:9f8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:a00::,2a02:a00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:a08::,2a02:a08:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:a10::,2a02:a10:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:a18::,2a02:a18:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -11946,13 +16722,13 @@ 2a02:af0::,2a02:af0:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:af8::,2a02:af8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:b00::,2a02:b00:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a02:b08::,2a02:b08:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:b08::,2a02:b0f:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:b10::,2a02:b10:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:b18::,2a02:b18:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:b20::,2a02:b20:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:b28::,2a02:b28:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:b30::,2a02:b30:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:b48::,2a02:b48:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a02:b48::,2a02:b4f:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a02:b50::,2a02:b50:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:b58::,2a02:b58:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a02:b60::,2a02:b60:ffff:ffff:ffff:ffff:ffff:ffff,IQ @@ -12097,7 +16873,21 @@ 2a02:ff0::,2a02:ff0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a02:ff8::,2a02:ff8:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a02:1000::,2a02:103f:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:1200::,2a02:12ff:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a02:1200::,2a02:1205:503f:ffff:ffff:ffff:ffff:ffff,CH +2a02:1205:5040::,2a02:1205:5040:ffff:ffff:ffff:ffff:ffff,GB +2a02:1205:5041::,2a02:1205:504b:ffff:ffff:ffff:ffff:ffff,CH +2a02:1205:504c::,2a02:1205:504c:ffff:ffff:ffff:ffff:ffff,DE +2a02:1205:504d::,2a02:1205:c6aa:ffff:ffff:ffff:ffff:ffff,CH +2a02:1205:c6ab::,2a02:1205:c6ab:ffff:ffff:ffff:ffff:ffff,DE +2a02:1205:c6ac::,2a02:120b:7fb:ffff:ffff:ffff:ffff:ffff,CH +2a02:120b:7fc::,2a02:120b:7fc:ffff:ffff:ffff:ffff:ffff,DE +2a02:120b:7fd::,2a02:120b:2c68:ffff:ffff:ffff:ffff:ffff,CH +2a02:120b:2c69::,2a02:120b:2c69:ffff:ffff:ffff:ffff:ffff,DE +2a02:120b:2c6a::,2a02:120b:c3c7:ffff:ffff:ffff:ffff:ffff,CH +2a02:120b:c3c8::,2a02:120b:c3c8:ffff:ffff:ffff:ffff:ffff,DE +2a02:120b:c3c9::,2a02:120b:c3e3:ffff:ffff:ffff:ffff:ffff,CH +2a02:120b:c3e4::,2a02:120b:c3e4:ffff:ffff:ffff:ffff:ffff,DE +2a02:120b:c3e5::,2a02:121f:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:1300::,2a02:1300:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a02:1308::,2a02:1308:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:1310::,2a02:1310:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -12192,15 +16982,52 @@ 2a02:17e8::,2a02:17e8:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:17f0::,2a02:17f0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:17f8::,2a02:17f8:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:1800::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE -2a02:2000::,2a02:20ff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:1800::,2a02:1811:111:ffff:ffff:ffff:ffff:ffff,BE +2a02:1811:112::,2a02:1811:112:ffff:ffff:ffff:ffff:ffff,FR +2a02:1811:113::,2a02:1811:3101:ffff:ffff:ffff:ffff:ffff,BE +2a02:1811:3102::,2a02:1811:3102:ffff:ffff:ffff:ffff:ffff,FR +2a02:1811:3103::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:2000::,2a02:2000:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a02:2008::,2a02:2008:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:2010::,2a02:2010:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a02:2018::,2a02:2018:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2020::,2a02:2020:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a02:2028::,2a02:2028:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:2030::,2a02:2030:ffff:ffff:ffff:ffff:ffff:ffff,BA +2a02:2038::,2a02:2038:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:2040::,2a02:2040:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a02:2048::,2a02:2048:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a02:2050::,2a02:2050:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:2058::,2a02:2058:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a02:2060::,2a02:2060:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:2068::,2a02:2068:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a02:2070::,2a02:2070:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2078::,2a02:2078:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a02:2080::,2a02:2080:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:2088::,2a02:2088:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:2090::,2a02:2090:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2098::,2a02:209f:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:20a0::,2a02:20a0:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:20a8::,2a02:20a8:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:20b0::,2a02:20b0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:20b8::,2a02:20b8:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a02:20c0::,2a02:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:20c8::,2a02:20c8:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:20d0::,2a02:20d0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:20d8::,2a02:20d8:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a02:20e0::,2a02:20e7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:20e8::,2a02:20e8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:20f0::,2a02:20f0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:20f8::,2a02:20f8:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:2100::,2a02:2100:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:2108::,2a02:2108:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:2110::,2a02:2110:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:2118::,2a02:211f:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:2120::,2a02:2123:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:2140::,2a02:2140:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a02:2148::,2a02:214f:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a02:2148::,2a02:2149:82ff:ffff:ffff:ffff:ffff:ffff,GR +2a02:2149:8300::,2a02:2149:8300:ffff:ffff:ffff:ffff:ffff,AF +2a02:2149:8301::,2a02:214f:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a02:2150::,2a02:2150:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:2158::,2a02:2158:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a02:2160::,2a02:2160:ffff:ffff:ffff:ffff:ffff:ffff,RO @@ -12333,7 +17160,6 @@ 2a02:2580::,2a02:2587:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:2588::,2a02:2588:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:2590::,2a02:2590:ffff:ffff:ffff:ffff:ffff:ffff,SI -2a02:2598::,2a02:2598:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:25a0::,2a02:25a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:25a8::,2a02:25af:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:25b0::,2a02:25b0:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -12373,11 +17199,47 @@ 2a02:26c0::,2a02:26c0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a02:26c8::,2a02:26c8:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a02:26d0::,2a02:26d0:ffff:ffff:ffff:ffff:ffff:ffff,PS -2a02:26d8::,2a02:26d8:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:26e0::,2a02:26e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:26e8::,2a02:26e8:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:26f8::,2a02:26ff:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:2700::,2a02:27ff:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:2700::,2a02:2700:ffff:ffff:ffff:ffff:ffff:ffff,IQ +2a02:2708::,2a02:2708:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2710::,2a02:2710:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a02:2718::,2a02:271f:ffff:ffff:ffff:ffff:ffff:ffff,YE +2a02:2720::,2a02:2720:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a02:2728::,2a02:2728:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:2730::,2a02:2730:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:2738::,2a02:2738:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:2740::,2a02:2740:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a02:2748::,2a02:2748:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2750::,2a02:2750:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a02:2760::,2a02:2760:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:2768::,2a02:2768:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2770::,2a02:2770:11:ffff:ffff:ffff:ffff:ffff,NL +2a02:2770:12::,2a02:2770:12:ffff:ffff:ffff:ffff:ffff,RU +2a02:2770:13::,2a02:2770:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:2778::,2a02:2778:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:2780::,2a02:2780:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a02:2788::,2a02:2788:143:ffff:ffff:ffff:ffff:ffff,BE +2a02:2788:144::,2a02:2788:144:ffff:ffff:ffff:ffff:ffff,MA +2a02:2788:145::,2a02:2788:613:ffff:ffff:ffff:ffff:ffff,BE +2a02:2788:614::,2a02:2788:614:ffff:ffff:ffff:ffff:ffff,FR +2a02:2788:615::,2a02:2788:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:2790::,2a02:2790:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:2798::,2a02:2798:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:27a0::,2a02:27a0:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:27a8::,2a02:27a8::ffff:ffff:ffff:ffff:ffff,FR +2a02:27a8:1::,2a02:27af:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a02:27b0::,2a02:27b0:ffff:ffff:ffff:ffff:ffff:ffff,BA +2a02:27b8::,2a02:27b8:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:27c0::,2a02:27c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:27c8::,2a02:27c8:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:27d0::,2a02:27d0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:27d8::,2a02:27d8:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:27e0::,2a02:27e0:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a02:27e8::,2a02:27e8:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a02:27f0::,2a02:27f0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:27f8::,2a02:27f8:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:2800::,2a02:2800:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2808::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:2810::,2a02:2810:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -12413,8 +17275,7 @@ 2a02:2900::,2a02:2900:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:2908::,2a02:2908:ffff:ffff:ffff:ffff:ffff:ffff,OM 2a02:2910::,2a02:2910:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a02:2918::,2a02:2918:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:2920::,2a02:2920:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:2918::,2a02:2920:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2928::,2a02:2928:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:2930::,2a02:2930:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:2938::,2a02:2938:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -12482,7 +17343,7 @@ 2a02:2b30::,2a02:2b30:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a02:2b38::,2a02:2b38:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:2b40::,2a02:2b47:ffff:ffff:ffff:ffff:ffff:ffff,SI -2a02:2b48::,2a02:2b48:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:2b48::,2a02:2b4f:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:2b50::,2a02:2b50:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:2b58::,2a02:2b58:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a02:2b80::,2a02:2b80:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -12511,12 +17372,18 @@ 2a02:2dc0::,2a02:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2de0::,2a02:2de0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:2e00::,2a02:2e1f:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a02:2f00::,2a02:2fff:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a02:2f00::,2a02:2f0e:d31e:ffff:ffff:ffff:ffff:ffff,RO +2a02:2f0e:d31f::,2a02:2f0e:d31f:ffff:ffff:ffff:ffff:ffff,HK +2a02:2f0e:d320::,2a02:2f0f:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a02:2f80::,2a02:2f80:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a02:2fa0::,2a02:2fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:2fc0::,2a02:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:2fe0::,2a02:2fe0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:3000::,2a02:31ff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:4000::,2a02:4000:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:4020::,2a02:4020:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:4040::,2a02:4040:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a02:4060::,2a02:4060:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a02:4060::,2a02:4067:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:4080::,2a02:4080:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a02:40a0::,2a02:40a0:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a02:40c0::,2a02:40c0:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -12999,13 +17866,28 @@ 2a02:7fa0::,2a02:7fa0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:7fc0::,2a02:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:7fe0::,2a02:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,IS -2a02:8000::,2a02:821f:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:8010::,2a02:8017:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:8020::,2a02:8023:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:8040::,2a02:8043:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:8060::,2a02:8061:ffff:ffff:ffff:ffff:ffff:ffff,AD +2a02:8070::,2a02:8070:e280:ffff:ffff:ffff:ffff:ffff,DE +2a02:8070:e281::,2a02:8070:e281:ffff:ffff:ffff:ffff:ffff,CH +2a02:8070:e282::,2a02:8071:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:8080::,2a02:8087:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a02:80c0::,2a02:80c3:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:80e0::,2a02:80e3:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a02:8100::,2a02:810b:85ff:ffff:ffff:ffff:ffff:ffff,DE +2a02:810b:8600::,2a02:810b:8600:ffff:ffff:ffff:ffff:ffff,GB +2a02:810b:8601::,2a02:810b:863f:ffff:ffff:ffff:ffff:ffff,DE +2a02:810b:8640::,2a02:810b:8640:ffff:ffff:ffff:ffff:ffff,GB +2a02:810b:8641::,2a02:811f:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:8200::,2a02:821f:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:8300::,2a02:830f:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:8380::,2a02:838f:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:8400::,2a02:847f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:8800::,2a02:88ff:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:9000::,2a02:91ff:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a02:a000::,2a02:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:a000::,2a02:a03f:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a02:a200::,2a02:a21f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:a300::,2a02:a31f:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:a400::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -13203,7 +18085,6 @@ 2a02:e940::,2a02:e947:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a02:e980::,2a02:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a02:e9c0::,2a02:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a02:ea00::,2a02:ea07:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:ea40::,2a02:ea47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:ea80::,2a02:ea87:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:eac0::,2a02:eac7:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -13331,7 +18212,7 @@ 2a03:4c0::,2a03:4c0:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a03:4e0::,2a03:4e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:500::,2a03:500:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:520::,2a03:520:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a03:520::,2a03:527:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:540::,2a03:540:ffff:ffff:ffff:ffff:ffff:ffff,UZ 2a03:560::,2a03:560:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:580::,2a03:580:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -13354,7 +18235,7 @@ 2a03:7a0::,2a03:7a0:ffff:ffff:ffff:ffff:ffff:ffff,ME 2a03:7c0::,2a03:7c0:ffff:ffff:ffff:ffff:ffff:ffff,PS 2a03:7e0::,2a03:7e0:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a03:800::,2a03:800:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:800::,2a03:807:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:820::,2a03:820:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:840::,2a03:840:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:860::,2a03:860:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -13396,7 +18277,6 @@ 2a03:d20::,2a03:d20:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a03:d40::,2a03:d40:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:d60::,2a03:d60:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a03:d80::,2a03:d80:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:da0::,2a03:da0:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a03:dc0::,2a03:dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:de0::,2a03:de0:ffff:ffff:ffff:ffff:ffff:ffff,BE @@ -13528,191 +18408,360 @@ 2a03:1e20::,2a03:1e20:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:1e40::,2a03:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:1e60::,2a03:1e60:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a03:1e80::,2a03:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:1e80::,2a03:1e87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:1ea0::,2a03:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:1ec0::,2a03:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a03:1ee0::,2a03:1ee0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:1f00::,2a03:1f00:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:1f20::,2a03:1f20:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:1f40::,2a03:1f40:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a03:1f60::,2a03:1f60:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a03:1f80::,2a03:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:1fa0::,2a03:1fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:2000::,2a03:2000:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2020::,2a03:2020:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2040::,2a03:2040:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a03:2060::,2a03:2060:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:2080::,2a03:2080:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:20a0::,2a03:20a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:20c0::,2a03:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:20e0::,2a03:20e0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:2100::,2a03:2100:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a03:2120::,2a03:2120:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:2140::,2a03:2140:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:2160::,2a03:2160:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2180::,2a03:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:21a0::,2a03:21a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:21c0::,2a03:21c0:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:21e0::,2a03:21e0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2200::,2a03:2200:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a03:2220::,2a03:2220:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a03:2240::,2a03:2240:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a03:2260::,2a03:2263:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2280::,2a03:2280:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:22a0::,2a03:22a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:22c0::,2a03:22c0:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a03:2300::,2a03:2300:ffff:ffff:ffff:ffff:ffff:ffff,AM +2a03:22e0::,2a03:22e0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:2300::,2a03:2307:ffff:ffff:ffff:ffff:ffff:ffff,AM +2a03:2320::,2a03:2320:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:2340::,2a03:2340:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:2360::,2a03:2360:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:2380::,2a03:2380:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:23a0::,2a03:23a0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:23c0::,2a03:23c0:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a03:23e0::,2a03:23e0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:2400::,2a03:2400:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2420::,2a03:2420:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2440::,2a03:2440:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:2460::,2a03:2460:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:2480::,2a03:2480:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:24a0::,2a03:24a0:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a03:24c0::,2a03:24c0:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a03:24e0::,2a03:24e0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:2500::,2a03:2500:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2520::,2a03:2520:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:2540::,2a03:2540:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2560::,2a03:2560:ffff:ffff:ffff:ffff:ffff:ffff,MK 2a03:2580::,2a03:2580:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:25a0::,2a03:25a0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:25c0::,2a03:25c0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:25e0::,2a03:25e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:2600::,2a03:2600:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a03:2620::,2a03:2620:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:2640::,2a03:2640:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:2660::,2a03:2660:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a03:2680::,2a03:2680:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:26a0::,2a03:26a0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:26c0::,2a03:26c0:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:26e0::,2a03:26e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:2700::,2a03:2700:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:2720::,2a03:2720:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2740::,2a03:2740:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:2760::,2a03:2760:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a03:2780::,2a03:2780:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:27a0::,2a03:27a0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:27c0::,2a03:27c0:ffff:ffff:ffff:ffff:ffff:ffff,AM +2a03:27e0::,2a03:27e0:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a03:2800::,2a03:2800:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2820::,2a03:2820:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a03:2840::,2a03:2840:ffff:ffff:ffff:ffff:ffff:ffff,US +2a03:2860::,2a03:2860:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:2880::,2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a03:28a0::,2a03:28a0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:28c0::,2a03:28c0:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a03:28e0::,2a03:28e0:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:2900::,2a03:2900:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2920::,2a03:2920:ffff:ffff:ffff:ffff:ffff:ffff,ME 2a03:2940::,2a03:2940:ffff:ffff:ffff:ffff:ffff:ffff,PS +2a03:2960::,2a03:2960:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:2980::,2a03:2980:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:29a0::,2a03:29a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:29c0::,2a03:29c0:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a03:29e0::,2a03:29e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:2a00::,2a03:2a00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2a20::,2a03:2a20:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:2a40::,2a03:2a40:ffff:ffff:ffff:ffff:ffff:ffff,LB +2a03:2a60::,2a03:2a60:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:2a80::,2a03:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:2aa0::,2a03:2aa0:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a03:2ac0::,2a03:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2ae0::,2a03:2ae0:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a03:2b00::,2a03:2b00:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:2b20::,2a03:2b20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2b40::,2a03:2b40:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:2b60::,2a03:2b60:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:2b80::,2a03:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:2ba0::,2a03:2ba0:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a03:2bc0::,2a03:2bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:2be0::,2a03:2be0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:2c00::,2a03:2c00:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:2c20::,2a03:2c20:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:2c40::,2a03:2c40:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:2c60::,2a03:2c60:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2c80::,2a03:2c80:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2ca0::,2a03:2ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2cc0::,2a03:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2d00::,2a03:2d00:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2d20::,2a03:2d20:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2d60::,2a03:2d60:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:2d80::,2a03:2d80:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2da0::,2a03:2da0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2dc0::,2a03:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a03:2de0::,2a03:2de0:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a03:2e00::,2a03:2e00:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:2e20::,2a03:2e20:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a03:2e40::,2a03:2e40:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:2e60::,2a03:2e60:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:2ea0::,2a03:2ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:2ec0::,2a03:2ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:2ee0::,2a03:2ee0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:2f00::,2a03:2f00:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a03:2f20::,2a03:2f20:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a03:2f40::,2a03:2f40:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a03:2f60::,2a03:2f60:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a03:2f80::,2a03:2f80:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:2fa0::,2a03:2fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:2fc0::,2a03:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:2fe0::,2a03:2fe0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:3000::,2a03:3000:ffff:ffff:ffff:ffff:ffff:ffff,BY +2a03:3020::,2a03:3020:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:3040::,2a03:3040:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:3060::,2a03:3060:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:30a0::,2a03:30a0:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a03:30c0::,2a03:30c0:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:30e0::,2a03:30e0:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a03:3100::,2a03:3100:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3120::,2a03:3120:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3140::,2a03:3140:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a03:3160::,2a03:3160:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a03:3180::,2a03:3180:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a03:31a0::,2a03:31a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:31c0::,2a03:31c0:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a03:31e0::,2a03:31e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:3200::,2a03:3200:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3220::,2a03:3220:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a03:3240::,2a03:3240:ffff:ffff:ffff:ffff:ffff:ffff,UZ +2a03:3260::,2a03:3260:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:3280::,2a03:3280:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:32a0::,2a03:32a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:32c0::,2a03:32c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ +2a03:32e0::,2a03:32e0:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a03:3300::,2a03:3300:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:3320::,2a03:3320:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a03:3340::,2a03:3340:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a03:3360::,2a03:3360:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:3380::,2a03:3380:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a03:33a0::,2a03:33a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:33c0::,2a03:33c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:33e0::,2a03:33e0:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a03:3400::,2a03:3400:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:3420::,2a03:3420:ffff:ffff:ffff:ffff:ffff:ffff,LI 2a03:3440::,2a03:3440:ffff:ffff:ffff:ffff:ffff:ffff,LV +2a03:3460::,2a03:3460:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:3480::,2a03:3480:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:34a0::,2a03:34a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:34c0::,2a03:34c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:34e0::,2a03:34e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:3500::,2a03:3500:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:3520::,2a03:3520:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:3540::,2a03:3547:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:3580::,2a03:3580:ffff:ffff:ffff:ffff:ffff:ffff,GE +2a03:35a0::,2a03:35a0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:35c0::,2a03:35c0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:35e0::,2a03:35e0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:3600::,2a03:3600:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a03:3620::,2a03:3620:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:3640::,2a03:3640:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:3660::,2a03:3660:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3680::,2a03:3680:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:36a0::,2a03:36a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:36c0::,2a03:36c0:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a03:36e0::,2a03:36e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:3700::,2a03:3700:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3720::,2a03:3720:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a03:3760::,2a03:3760:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:37a0::,2a03:37a0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:37c0::,2a03:37c0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:37e0::,2a03:37e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:3800::,2a03:3800:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a03:3820::,2a03:3820:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:3840::,2a03:3847:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:3880::,2a03:3880:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:38a0::,2a03:38a0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:38c0::,2a03:38c0:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a03:38e0::,2a03:38e0:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a03:3900::,2a03:3900:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:3920::,2a03:3920:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:3940::,2a03:3940:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:3960::,2a03:3960:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:3980::,2a03:3980:ffff:ffff:ffff:ffff:ffff:ffff,BY 2a03:39c0::,2a03:39c0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:39e0::,2a03:39e0:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a03:3a00::,2a03:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:3a20::,2a03:3a20:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a03:3a40::,2a03:3a40:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:3a80::,2a03:3a80:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3aa0::,2a03:3aa0:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a03:3ac0::,2a03:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:3ae0::,2a03:3ae0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:3b00::,2a03:3b00:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:3b20::,2a03:3b20:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a03:3b40::,2a03:3b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a03:3b60::,2a03:3b60:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a03:3b80::,2a03:3b80:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:3ba0::,2a03:3ba0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3bc0::,2a03:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:3be0::,2a03:3be0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3c00::,2a03:3c00:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:3c20::,2a03:3c20:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:3c40::,2a03:3c40:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:3c60::,2a03:3c60:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3c80::,2a03:3c80:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:3ca0::,2a03:3ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:3cc0::,2a03:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:3d00::,2a03:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AM +2a03:3d20::,2a03:3d20:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3d40::,2a03:3d40:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3d60::,2a03:3d60:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:3d80::,2a03:3d80:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:3da0::,2a03:3da0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a03:3dc0::,2a03:3dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:3e00::,2a03:3e00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:3de0::,2a03:3de0:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:3e00::,2a03:3e07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:3e40::,2a03:3e40:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3e60::,2a03:3e60:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:3e80::,2a03:3e80:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:3ea0::,2a03:3ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:3ec0::,2a03:3ec0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:3ee0::,2a03:3ee0:ffff:ffff:ffff:ffff:ffff:ffff,JO 2a03:3f00::,2a03:3f00:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a03:3f20::,2a03:3f20:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:3f40::,2a03:3f40:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:3f60::,2a03:3f60:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a03:3f80::,2a03:3f80:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:3fa0::,2a03:3fa0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a03:3fc0::,2a03:3fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:3fe0::,2a03:3fe0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4000::,2a03:4000:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:4020::,2a03:4020:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4040::,2a03:4040:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:4060::,2a03:4060:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:4080::,2a03:4080:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:40a0::,2a03:40a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:40c0::,2a03:40c0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:40e0::,2a03:40e0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4100::,2a03:4107:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a03:4140::,2a03:4140:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:4160::,2a03:4160:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4180::,2a03:4180:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:41a0::,2a03:41a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:41c0::,2a03:41c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:41e0::,2a03:41e0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4200::,2a03:4200:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:4220::,2a03:4220:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:4240::,2a03:4240:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:4260::,2a03:4260:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:4280::,2a03:4280:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a03:42a0::,2a03:42a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:42c0::,2a03:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:42e0::,2a03:42e0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4300::,2a03:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4340::,2a03:4340:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:4360::,2a03:4360:ffff:ffff:ffff:ffff:ffff:ffff,EE 2a03:4380::,2a03:4380:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a03:43a0::,2a03:43a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:43c0::,2a03:43c0:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a03:43e0::,2a03:43e0:ffff:ffff:ffff:ffff:ffff:ffff,LI 2a03:4400::,2a03:4400:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:4440::,2a03:4440:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:4460::,2a03:4460:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:4480::,2a03:4480:ffff:ffff:ffff:ffff:ffff:ffff,AZ +2a03:44a0::,2a03:44a0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:44c0::,2a03:44c0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a03:4500::,2a03:4500:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:4520::,2a03:4520:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a03:4540::,2a03:4540:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:4560::,2a03:4560:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:4580::,2a03:4580:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:45a0::,2a03:45a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:45c0::,2a03:45c0:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:45e0::,2a03:45e0:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a03:4600::,2a03:4600:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:4620::,2a03:4620:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a03:4640::,2a03:4640:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:4660::,2a03:4660:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:4680::,2a03:4680:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a03:46a0::,2a03:46a0:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a03:46c0::,2a03:46c0:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:46e0::,2a03:46e0:ffff:ffff:ffff:ffff:ffff:ffff,UZ 2a03:4700::,2a03:4700:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:4720::,2a03:4720:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:4740::,2a03:4740:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:4760::,2a03:4760:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:4780::,2a03:4780:ffff:ffff:ffff:ffff:ffff:ffff,KW +2a03:47a0::,2a03:47a0:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a03:47c0::,2a03:47c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ 2a03:4800::,2a03:4800:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:4820::,2a03:4820:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a03:4840::,2a03:4847:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a03:4880::,2a03:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:48a0::,2a03:48a0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:48c0::,2a03:48c0:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a03:48e0::,2a03:48e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4900::,2a03:4900:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:4920::,2a03:4920:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4940::,2a03:4940:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:4960::,2a03:4960:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a03:4980::,2a03:4980:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:49a0::,2a03:49a0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:49c0::,2a03:49c0:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a03:4a00::,2a03:4a00:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:49e0::,2a03:49e0:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a03:4a20::,2a03:4a20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4a40::,2a03:4a40:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:4a60::,2a03:4a60:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a03:4a80::,2a03:4a80:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:4aa0::,2a03:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4ac0::,2a03:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,KZ +2a03:4ae0::,2a03:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:4b00::,2a03:4b00:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a03:4b20::,2a03:4b20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4b40::,2a03:4b40:ffff:ffff:ffff:ffff:ffff:ffff,IQ +2a03:4b60::,2a03:4b60:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4b80::,2a03:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a03:4ba0::,2a03:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4bc0::,2a03:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:4be0::,2a03:4be0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4c00::,2a03:4c07:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:4c40::,2a03:4c40:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a03:4c60::,2a03:4c60:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4c80::,2a03:4c80:ffff:ffff:ffff:ffff:ffff:ffff,LI +2a03:4ca0::,2a03:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a03:4cc0::,2a03:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:4ce0::,2a03:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:4d00::,2a03:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:4d20::,2a03:4d20:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a03:4d40::,2a03:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:4d60::,2a03:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4d80::,2a03:4d80:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4dc0::,2a03:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4e00::,2a03:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -13769,9 +18818,7 @@ 2a03:5b80::,2a03:5b80:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:5bc0::,2a03:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:5c00::,2a03:5c00:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a03:5c40::,2a03:5c40:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:5c80::,2a03:5c80:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:5cc0::,2a03:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a03:5d00::,2a03:5d07:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:5d40::,2a03:5d40:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:5d80::,2a03:5d80:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -14100,7 +19147,6 @@ 2a03:b240::,2a03:b240:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:b280::,2a03:b280:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:b300::,2a03:b300:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a03:b340::,2a03:b340:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a03:b380::,2a03:b380:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:b3c0::,2a03:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:b400::,2a03:b400:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -14200,7 +19246,6 @@ 2a03:cb80::,2a03:cb80:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a03:cbc0::,2a03:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:cc00::,2a03:cc00:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a03:cc40::,2a03:cc40:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a03:cc80::,2a03:cc80:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a03:ccc0::,2a03:ccc0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:cd00::,2a03:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -14214,7 +19259,7 @@ 2a03:cf40::,2a03:cf40:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:cf80::,2a03:cf80:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:cfc0::,2a03:cfc0:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a03:d000::,2a03:d000:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:d000::,2a03:d007:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:d040::,2a03:d040:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:d080::,2a03:d080:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:d0c0::,2a03:d0c0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -14231,7 +19276,9 @@ 2a03:d3c0::,2a03:d3c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:d400::,2a03:d400:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:d440::,2a03:d440:ffff:ffff:ffff:ffff:ffff:ffff,HU -2a03:d480::,2a03:d480:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:d480::,2a03:d480::ffff:ffff:ffff:ffff:ffff,GB +2a03:d480:1::,2a03:d480:1:ffff:ffff:ffff:ffff:ffff,IM +2a03:d480:2::,2a03:d480:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:d4c0::,2a03:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:d500::,2a03:d500:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:d540::,2a03:d540:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -14805,7 +19852,6 @@ 2a04:68c0::,2a04:68c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:6900::,2a04:6907:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a04:6940::,2a04:6947:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a04:6980::,2a04:6987:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a04:69c0::,2a04:69c7:ffff:ffff:ffff:ffff:ffff:ffff,MK 2a04:6a00::,2a04:6a07:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a04:6a40::,2a04:6a47:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -15069,7 +20115,6 @@ 2a04:a980::,2a04:a987:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:a9c0::,2a04:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:aa00::,2a04:aa07:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a04:aa40::,2a04:aa47:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a04:aa80::,2a04:aa87:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a04:aac0::,2a04:aac7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a04:ab00::,2a04:ab07:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -15147,7 +20192,6 @@ 2a04:be80::,2a04:be87:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:bec0::,2a04:bec7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:bf00::,2a04:bf07:ffff:ffff:ffff:ffff:ffff:ffff,AT -2a04:bf40::,2a04:bf47:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a04:bf80::,2a04:bf87:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a04:bfc0::,2a04:bfc7:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a04:c000::,2a04:c007:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -15311,7 +20355,6 @@ 2a04:e900::,2a04:e907:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a04:e940::,2a04:e947:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:e980::,2a04:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL -2a04:e9c0::,2a04:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:ea00::,2a04:ea07:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a04:ea40::,2a04:ea47:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a04:ea80::,2a04:ea87:ffff:ffff:ffff:ffff:ffff:ffff,LB @@ -15321,6 +20364,7 @@ 2a04:eb80::,2a04:eb87:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a04:ebc0::,2a04:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:ec00::,2a04:ec01:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a04:ec10::,2a04:ec11:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:ec20::,2a04:ec23:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a04:ec40::,2a04:ec47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:ec80::,2a04:ec87:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -15349,6 +20393,7 @@ 2a04:f280::,2a04:f287:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a04:f2c0::,2a04:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a04:f300::,2a04:f300:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a04:f310::,2a04:f311:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:f320::,2a04:f323:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:f340::,2a04:f347:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a04:f380::,2a04:f387:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -15383,7 +20428,6 @@ 2a04:fbc0::,2a04:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:fc00::,2a04:fc07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:fc40::,2a04:fc47:ffff:ffff:ffff:ffff:ffff:ffff,LU -2a04:fc80::,2a04:fc87:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a04:fcc0::,2a04:fcc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:fd00::,2a04:fd07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:ff40::,2a04:ff47:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -15412,6 +20456,313 @@ 2a05:500::,2a05:507:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a05:540::,2a05:547:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:580::,2a05:587:ffff:ffff:ffff:ffff:ffff:ffff,AE +2a05:5c0::,2a05:5c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:600::,2a05:607:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:640::,2a05:647:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:680::,2a05:687:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:6c0::,2a05:6c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:700::,2a05:707:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a05:740::,2a05:747:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:780::,2a05:787:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:7c0::,2a05:7c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:800::,2a05:807:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:840::,2a05:843:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:860::,2a05:863:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:880::,2a05:887:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:8c0::,2a05:8c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:900::,2a05:907:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:940::,2a05:947:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:980::,2a05:987:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a05:9c0::,2a05:9c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:a00::,2a05:a07:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:a40::,2a05:a47:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:a80::,2a05:a87:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:ac0::,2a05:ac7:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:b00::,2a05:b07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a05:b40::,2a05:b47:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:b80::,2a05:b87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:bc0::,2a05:bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:c00::,2a05:c07:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a05:c40::,2a05:c47:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a05:c80::,2a05:c87:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:cc0::,2a05:cc7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:d00::,2a05:d07:ffff:ffff:ffff:ffff:ffff:ffff,CY +2a05:d40::,2a05:d47:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:d80::,2a05:d87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:dc0::,2a05:dc7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:e00::,2a05:e07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:e40::,2a05:e47:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a05:e80::,2a05:e87:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:ec0::,2a05:ec7:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a05:f00::,2a05:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:f40::,2a05:f47:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:f80::,2a05:f87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:fc0::,2a05:fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1000::,2a05:1007:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:1040::,2a05:1047:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1080::,2a05:1087:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:10c0::,2a05:10c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:1100::,2a05:1107:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:1140::,2a05:1147:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a05:1180::,2a05:1187:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:11c0::,2a05:11c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1200::,2a05:1203:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:1220::,2a05:1223:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:1240::,2a05:1247:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:1280::,2a05:1287:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:12c0::,2a05:12c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:1300::,2a05:1307:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1340::,2a05:1347:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:1380::,2a05:1387:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:13c0::,2a05:13c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1400::,2a05:1407:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a05:1440::,2a05:1447:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1480::,2a05:1487:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:14c0::,2a05:14c7:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:1540::,2a05:1547:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:1580::,2a05:1587:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a05:15c0::,2a05:15c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:1600::,2a05:1607:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a05:1640::,2a05:1647:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:1680::,2a05:1687:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:16c0::,2a05:16c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:1700::,2a05:1707:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:1740::,2a05:1747:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1780::,2a05:1787:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:17c0::,2a05:17c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:1800::,2a05:1807:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:1840::,2a05:1847:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a05:1880::,2a05:1887:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:18c0::,2a05:18c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:1900::,2a05:1907:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:1940::,2a05:1947:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:1980::,2a05:1987:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a05:19c0::,2a05:19c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:1a00::,2a05:1a3f:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:1c00::,2a05:1c07:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a05:1c40::,2a05:1c47:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:1c80::,2a05:1c87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1cc0::,2a05:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a05:1d00::,2a05:1d07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1d40::,2a05:1d43:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:1d60::,2a05:1d63:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1d80::,2a05:1d87:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:1e00::,2a05:1e07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:1e40::,2a05:1e47:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:1e80::,2a05:1e87:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:1ec0::,2a05:1ec7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:1f00::,2a05:1f07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:1f40::,2a05:1f47:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a05:1f80::,2a05:1f87:ffff:ffff:ffff:ffff:ffff:ffff,BA +2a05:1fc0::,2a05:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a05:2000::,2a05:2007:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a05:2040::,2a05:2047:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:2080::,2a05:2087:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:20c0::,2a05:20c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:2100::,2a05:2107:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:2140::,2a05:2147:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a05:2180::,2a05:2187:ffff:ffff:ffff:ffff:ffff:ffff,TM +2a05:21c0::,2a05:21c7:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a05:2200::,2a05:2207:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2240::,2a05:2247:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a05:2280::,2a05:2287:ffff:ffff:ffff:ffff:ffff:ffff,SI +2a05:2300::,2a05:2307:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2340::,2a05:2347:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:2380::,2a05:2387:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:23c0::,2a05:23c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:2400::,2a05:2407:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:2440::,2a05:2447:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a05:2480::,2a05:2487:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:24c0::,2a05:24c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2500::,2a05:2507:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2540::,2a05:2547:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:2580::,2a05:2587:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a05:25c0::,2a05:25c7:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:2600::,2a05:2607:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:2640::,2a05:2647:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:2680::,2a05:2687:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:26c0::,2a05:26c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:2700::,2a05:2707:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:2740::,2a05:2747:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:2780::,2a05:2787:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:27c0::,2a05:27c7:ffff:ffff:ffff:ffff:ffff:ffff,KZ +2a05:2800::,2a05:2807:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:2880::,2a05:2887:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:28c0::,2a05:28c7:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a05:2900::,2a05:2907:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2940::,2a05:2947:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:2980::,2a05:2987:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:29c0::,2a05:29c7:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a05:2a00::,2a05:2a07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:2a40::,2a05:2a47:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:2a80::,2a05:2a87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:2ac0::,2a05:2ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:2b00::,2a05:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:2b40::,2a05:2b47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:2b80::,2a05:2b87:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2bc0::,2a05:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:2c00::,2a05:2c03:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:2c20::,2a05:2c23:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:2c40::,2a05:2c47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:2c80::,2a05:2c87:ffff:ffff:ffff:ffff:ffff:ffff,LB +2a05:2cc0::,2a05:2cc7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2d00::,2a05:2d07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:2d40::,2a05:2d47:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:2d80::,2a05:2d87:ffff:ffff:ffff:ffff:ffff:ffff,US +2a05:2dc0::,2a05:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:2e00::,2a05:2e07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:2e40::,2a05:2e47:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a05:2e80::,2a05:2e87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:2ec0::,2a05:2ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:2f00::,2a05:2f07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:2f40::,2a05:2f47:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:2f80::,2a05:2f87:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:2fc0::,2a05:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:3000::,2a05:3007:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:3040::,2a05:3047:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:3080::,2a05:3087:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a05:30c0::,2a05:30c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:3100::,2a05:3107:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a05:3140::,2a05:3147:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:3180::,2a05:3187:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:31c0::,2a05:31c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:3200::,2a05:3207:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:3240::,2a05:3247:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:3280::,2a05:3287:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a05:32c0::,2a05:32c7:ffff:ffff:ffff:ffff:ffff:ffff,PS +2a05:3300::,2a05:3307:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:3340::,2a05:3347:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:3380::,2a05:3387:ffff:ffff:ffff:ffff:ffff:ffff,YE +2a05:33c0::,2a05:33c7:ffff:ffff:ffff:ffff:ffff:ffff,SI +2a05:3400::,2a05:3407:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a05:3440::,2a05:3447:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:3480::,2a05:3487:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:34c0::,2a05:34c7:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a05:3500::,2a05:3507:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:3540::,2a05:3547:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:3580::,2a05:3587:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:35c0::,2a05:35c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:3600::,2a05:3607:ffff:ffff:ffff:ffff:ffff:ffff,LV +2a05:3640::,2a05:3647:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:3680::,2a05:3687:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:36c0::,2a05:36c7:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:3700::,2a05:3707:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:3740::,2a05:3747:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:3780::,2a05:3787:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:37c0::,2a05:37c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:3800::,2a05:3807:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:3840::,2a05:3847:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a05:3880::,2a05:3887:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:38c0::,2a05:38c7:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a05:3900::,2a05:3907:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:3940::,2a05:3941:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:3950::,2a05:3951:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a05:3960::,2a05:3963:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:3980::,2a05:3987:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:39c0::,2a05:39c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:3a00::,2a05:3a07:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:3a40::,2a05:3a47:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a05:3a80::,2a05:3a87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:3ac0::,2a05:3ac7:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a05:3b00::,2a05:3b07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a05:3b40::,2a05:3b47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:3b80::,2a05:3b87:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:3bc0::,2a05:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:3c00::,2a05:3c07:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a05:3c40::,2a05:3c47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:3c80::,2a05:3c87:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:3cc0::,2a05:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:3d00::,2a05:3d07:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:3d40::,2a05:3d47:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:3d80::,2a05:3d87:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:3dc0::,2a05:3dc7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:3e00::,2a05:3e07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:3e40::,2a05:3e47:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:3e80::,2a05:3e87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:3ec0::,2a05:3ec7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:3f00::,2a05:3f07:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a05:3f40::,2a05:3f47:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:3f80::,2a05:3f87:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a05:3fc0::,2a05:3fc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:4000::,2a05:4007:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4040::,2a05:4047:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4080::,2a05:4087:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a05:40c0::,2a05:40c7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:4100::,2a05:4107:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:4140::,2a05:4147:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4180::,2a05:4187:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:41c0::,2a05:41c7:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:4200::,2a05:4207:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4240::,2a05:4247:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:4280::,2a05:4287:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a05:42c0::,2a05:42c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:4300::,2a05:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4340::,2a05:4347:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4380::,2a05:4387:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:43c0::,2a05:43c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:4400::,2a05:4407:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a05:4440::,2a05:4447:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:4480::,2a05:4487:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:44c0::,2a05:44c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:4500::,2a05:4507:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:4540::,2a05:4547:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4580::,2a05:4587:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:45c0::,2a05:45c7:ffff:ffff:ffff:ffff:ffff:ffff,UZ +2a05:4600::,2a05:4607:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a05:4640::,2a05:4647:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:4680::,2a05:4687:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:46c0::,2a05:46c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:4700::,2a05:4707:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:4740::,2a05:4747:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:4780::,2a05:4787:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:47c0::,2a05:47c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:4800::,2a05:4807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:4840::,2a05:4847:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:4880::,2a05:4887:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:48c0::,2a05:48c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:4900::,2a05:4907:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:4940::,2a05:4947:ffff:ffff:ffff:ffff:ffff:ffff,SI +2a05:4980::,2a05:4987:ffff:ffff:ffff:ffff:ffff:ffff,RS +2a05:49c0::,2a05:49c7:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:4a00::,2a05:4a07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:4a40::,2a05:4a47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:4a80::,2a05:4a87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4ac0::,2a05:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:4b00::,2a05:4b07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a05:4b40::,2a05:4b47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:4b80::,2a05:4b87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4bc0::,2a05:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4c00::,2a05:4c07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a05:4c40::,2a05:4c47:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4c80::,2a05:4c87:ffff:ffff:ffff:ffff:ffff:ffff,MD +2a05:4cc0::,2a05:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:4d00::,2a05:4d07:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a05:4d40::,2a05:4d47:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:4d80::,2a05:4d87:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:4dc0::,2a05:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a05:4e00::,2a05:4e07:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a05:4e40::,2a05:4e47:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a05:4e80::,2a05:4e87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:4ec0::,2a05:4ec7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:4f00::,2a05:4f07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:4f40::,2a05:4f47:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a05:4f80::,2a05:4f87:ffff:ffff:ffff:ffff:ffff:ffff,RS +2a05:4fc0::,2a05:4fc7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:5000::,2a05:5007:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:5040::,2a05:5047:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a05:5080::,2a05:5087:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:50c0::,2a05:50c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ +2a05:5100::,2a05:5107:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:5140::,2a05:5147:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:5180::,2a05:5187:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:51c0::,2a05:51c7:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:5200::,2a05:5207:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:5240::,2a05:5247:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a05:5280::,2a05:5283:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:52c0::,2a05:52c7:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:5300::,2a05:5307:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a05:5340::,2a05:5347:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a05:5380::,2a05:5387:ffff:ffff:ffff:ffff:ffff:ffff,PL 2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG 2c0e:2000::,2c0e:200f:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f600::,2c0f:f600:ffff:ffff:ffff:ffff:ffff:ffff,GN @@ -15453,12 +20804,26 @@ 2c0f:f720::,2c0f:f720:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f728::,2c0f:f728:ffff:ffff:ffff:ffff:ffff:ffff,BW 2c0f:f730::,2c0f:f730:ffff:ffff:ffff:ffff:ffff:ffff,TZ +2c0f:f738::,2c0f:f738:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:f740::,2c0f:f740:ffff:ffff:ffff:ffff:ffff:ffff,AO +2c0f:f748::,2c0f:f748:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:f750::,2c0f:f750:ffff:ffff:ffff:ffff:ffff:ffff,UG +2c0f:f758::,2c0f:f758:ffff:ffff:ffff:ffff:ffff:ffff,ZW +2c0f:f760::,2c0f:f760:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f768::,2c0f:f768:ffff:ffff:ffff:ffff:ffff:ffff,NG +2c0f:f770::,2c0f:f770:ffff:ffff:ffff:ffff:ffff:ffff,BJ +2c0f:f778::,2c0f:f778:ffff:ffff:ffff:ffff:ffff:ffff,NA +2c0f:f780::,2c0f:f780:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f788::,2c0f:f788:ffff:ffff:ffff:ffff:ffff:ffff,BI +2c0f:f798::,2c0f:f798:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f7a0::,2c0f:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,ZW +2c0f:f7a8::,2c0f:f7af:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f800::,2c0f:f80f:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f810::,2c0f:f810:ffff:ffff:ffff:ffff:ffff:ffff,AO 2c0f:f818::,2c0f:f818:ffff:ffff:ffff:ffff:ffff:ffff,BJ 2c0f:f820::,2c0f:f820:ffff:ffff:ffff:ffff:ffff:ffff,GH 2c0f:f828::,2c0f:f828:ffff:ffff:ffff:ffff:ffff:ffff,AO -2c0f:f830::,2c0f:f830:ffff:ffff:ffff:ffff:ffff:ffff,ZW +2c0f:f830::,2c0f:f830:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f838::,2c0f:f838:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f840::,2c0f:f840:ffff:ffff:ffff:ffff:ffff:ffff,GQ 2c0f:f848::,2c0f:f848:ffff:ffff:ffff:ffff:ffff:ffff,GH @@ -15480,7 +20845,7 @@ 2c0f:f8d8::,2c0f:f8d8:ffff:ffff:ffff:ffff:ffff:ffff,BW 2c0f:f8e0::,2c0f:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f8e8::,2c0f:f8e8:ffff:ffff:ffff:ffff:ffff:ffff,GH -2c0f:f8f0::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW +2c0f:f8f0::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f8f8::,2c0f:f8f8:ffff:ffff:ffff:ffff:ffff:ffff,SO 2c0f:f900::,2c0f:f900:ffff:ffff:ffff:ffff:ffff:ffff,ML 2c0f:f908::,2c0f:f908:ffff:ffff:ffff:ffff:ffff:ffff,BI @@ -15535,7 +20900,6 @@ 2c0f:fab0::,2c0f:fabf:ffff:ffff:ffff:ffff:ffff:ffff,TN 2c0f:fac0::,2c0f:fac0:ffff:ffff:ffff:ffff:ffff:ffff,MW 2c0f:fac8::,2c0f:fac8:ffff:ffff:ffff:ffff:ffff:ffff,BW -2c0f:fad0::,2c0f:fad0:ffff:ffff:ffff:ffff:ffff:ffff,RW 2c0f:fad8::,2c0f:fad8:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:fae0::,2c0f:fae0:ffff:ffff:ffff:ffff:ffff:ffff,CM 2c0f:fae8::,2c0f:fae8:ffff:ffff:ffff:ffff:ffff:ffff,KE @@ -15606,7 +20970,6 @@ 2c0f:fd58::,2c0f:fd58:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:fd60::,2c0f:fd60:ffff:ffff:ffff:ffff:ffff:ffff,UG 2c0f:fd68::,2c0f:fd68:ffff:ffff:ffff:ffff:ffff:ffff,ZA -2c0f:fd70::,2c0f:fd70:ffff:ffff:ffff:ffff:ffff:ffff,UG 2c0f:fd78::,2c0f:fd78:ffff:ffff:ffff:ffff:ffff:ffff,BI 2c0f:fd80::,2c0f:fd80:ffff:ffff:ffff:ffff:ffff:ffff,BF 2c0f:fd88::,2c0f:fd88:ffff:ffff:ffff:ffff:ffff:ffff,GH From 8c135062e51b2ead38a756b045e7d243ffbda5a9 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 2 Nov 2014 19:14:58 +0200 Subject: [PATCH 164/184] Adding 'SIGNAL HEARTBEAT' message that causes unscheduled heartbeat. --- changes/feature9503 | 4 ++++ src/or/control.c | 1 + src/or/main.c | 3 +++ src/or/or.h | 1 + 4 files changed, 9 insertions(+) create mode 100644 changes/feature9503 diff --git a/changes/feature9503 b/changes/feature9503 new file mode 100644 index 0000000000..58ae67f184 --- /dev/null +++ b/changes/feature9503 @@ -0,0 +1,4 @@ + o Minor features (controller): + - Add a "SIGNAL HEARTBEAT" Tor controller command that provokes + writing unscheduled heartbeat message to the log. Implements + feature 9503. diff --git a/src/or/control.c b/src/or/control.c index e3f913177b..5c65189bf2 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -1263,6 +1263,7 @@ static const struct signal_t signal_table[] = { { SIGTERM, "INT" }, { SIGNEWNYM, "NEWNYM" }, { SIGCLEARDNSCACHE, "CLEARDNSCACHE"}, + { SIGHEARTBEAT, "HEARTBEAT"}, { 0, NULL }, }; diff --git a/src/or/main.c b/src/or/main.c index 5a4e0a3e2d..6a6e36abc6 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -2137,6 +2137,9 @@ process_signal(uintptr_t sig) addressmap_clear_transient(); control_event_signal(sig); break; + case SIGHEARTBEAT: + log_heartbeat(time(NULL)); + break; } } diff --git a/src/or/or.h b/src/or/or.h index 6170c2119c..a0d3043f17 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -119,6 +119,7 @@ * conflict with system-defined signals. */ #define SIGNEWNYM 129 #define SIGCLEARDNSCACHE 130 +#define SIGHEARTBEAT 131 #if (SIZEOF_CELL_T != 0) /* On Irix, stdlib.h defines a cell_t type, so we need to make sure From bf67a60b86b92f94d0c8b3c13edf4e8ff965c324 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Tue, 4 Nov 2014 19:29:29 +0200 Subject: [PATCH 165/184] Sending response to SIGNAL HEARTBEAT controller command. --- src/or/control.c | 3 +++ src/or/main.c | 1 + 2 files changed, 4 insertions(+) diff --git a/src/or/control.c b/src/or/control.c index 5c65189bf2..37f33442ea 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -4455,6 +4455,9 @@ control_event_signal(uintptr_t signal) case SIGCLEARDNSCACHE: signal_string = "CLEARDNSCACHE"; break; + case SIGHEARTBEAT: + signal_string = "HEARTBEAT"; + break; default: log_warn(LD_BUG, "Unrecognized signal %lu in control_event_signal", (unsigned long)signal); diff --git a/src/or/main.c b/src/or/main.c index 6a6e36abc6..d33eeb9e59 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -2139,6 +2139,7 @@ process_signal(uintptr_t sig) break; case SIGHEARTBEAT: log_heartbeat(time(NULL)); + control_event_signal(sig); break; } } From 0e0dc7d787ef867a24b2e630bf1db72227b24fef Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 27 Nov 2014 22:42:03 -0500 Subject: [PATCH 166/184] Fix a 64-bit clang warning --- src/or/channeltls.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 719a153dd6..90ad1e679f 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -741,7 +741,7 @@ static int channel_tls_num_cells_writeable_method(channel_t *chan) { size_t outbuf_len; - int n; + ssize_t n; channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan); size_t cell_network_size; @@ -753,8 +753,11 @@ channel_tls_num_cells_writeable_method(channel_t *chan) /* Get the number of cells */ n = CEIL_DIV(OR_CONN_HIGHWATER - outbuf_len, cell_network_size); if (n < 0) n = 0; +#if SIZEOF_SIZE_T > SIZEOF_INT + if (n > INT_MAX) n = INT_MAX; +#endif - return n; + return (int)n; } /** From b1e1b439b892624b7dbe2f631a9ddb41b16ecdd6 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 27 Nov 2014 22:51:13 -0500 Subject: [PATCH 167/184] Fix some issues with the scheduler configuration options 1) Set them to the values that (according to Rob) avoided performance regressions. This means that the scheduler won't get much exercise until we implement KIST or something like it. 2) Rename the options to end with a __, since I think they might be going away, and nobody should mess with them. 3) Use the correct types for the option variables. MEMUNIT needs to be a uint64_t; UINT needs to be (I know, I know!) an int. 4) Validate the values in options_validate(); do the switch in options_act(). This way, setting the option to an invalid value on a running Tor will get backed out. --- src/or/config.c | 38 ++++++++++++++++++-------------------- src/or/or.h | 6 +++--- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index ced4288f00..28f1df0663 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -369,9 +369,9 @@ static config_var_t option_vars_[] = { V(ServerDNSSearchDomains, BOOL, "0"), V(ServerDNSTestAddresses, CSV, "www.google.com,www.mit.edu,www.yahoo.com,www.slashdot.org"), - V(SchedulerLowWaterMark, MEMUNIT, "16 kB"), - V(SchedulerHighWaterMark, MEMUNIT, "32 kB"), - V(SchedulerMaxFlushCells, UINT, "16"), + V(SchedulerLowWaterMark__, MEMUNIT, "100 MB"), + V(SchedulerHighWaterMark__, MEMUNIT, "101 MB"), + V(SchedulerMaxFlushCells__, UINT, "1000"), V(ShutdownWaitLength, INTERVAL, "30 seconds"), V(SocksListenAddress, LINELIST, NULL), V(SocksPolicy, LINELIST, NULL), @@ -1539,23 +1539,10 @@ options_act(const or_options_t *old_options) } /* Set up scheduler thresholds */ - if (options->SchedulerLowWaterMark > 0 && - options->SchedulerHighWaterMark > options->SchedulerLowWaterMark) { - scheduler_set_watermarks(options->SchedulerLowWaterMark, - options->SchedulerHighWaterMark, - (options->SchedulerMaxFlushCells > 0) ? - options->SchedulerMaxFlushCells : 16); - } else { - if (options->SchedulerLowWaterMark == 0) { - log_warn(LD_GENERAL, "Bad SchedulerLowWaterMark option"); - } - - if (options->SchedulerHighWaterMark <= options->SchedulerLowWaterMark) { - log_warn(LD_GENERAL, "Bad SchedulerHighWaterMark option"); - } - - return -1; - } + scheduler_set_watermarks((uint32_t)options->SchedulerLowWaterMark__, + (uint32_t)options->SchedulerHighWaterMark__, + (options->SchedulerMaxFlushCells__ > 0) ? + options->SchedulerMaxFlushCells__ : 1000); /* Set up accounting */ if (accounting_parse_options(options, 0)<0) { @@ -2654,6 +2641,17 @@ options_validate(or_options_t *old_options, or_options_t *options, routerset_union(options->ExcludeExitNodesUnion_,options->ExcludeNodes); } + if (options->SchedulerLowWaterMark__ == 0 || + options->SchedulerLowWaterMark__ > UINT32_MAX) { + log_warn(LD_GENERAL, "Bad SchedulerLowWaterMark__ option"); + return -1; + } else if (options->SchedulerHighWaterMark__ <= + options->SchedulerLowWaterMark__ || + options->SchedulerHighWaterMark__ > UINT32_MAX) { + log_warn(LD_GENERAL, "Bad SchedulerHighWaterMark option"); + return -1; + } + if (options->NodeFamilies) { options->NodeFamilySets = smartlist_new(); for (cl = options->NodeFamilies; cl; cl = cl->next) { diff --git a/src/or/or.h b/src/or/or.h index ccb29ee7df..0de37452bd 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -4251,15 +4251,15 @@ typedef struct { /** Low-water mark for global scheduler - start sending when estimated * queued size falls below this threshold. */ - uint32_t SchedulerLowWaterMark; + uint64_t SchedulerLowWaterMark__; /** High-water mark for global scheduler - stop sending when estimated * queued size exceeds this threshold. */ - uint32_t SchedulerHighWaterMark; + uint64_t SchedulerHighWaterMark__; /** Flush size for global scheduler - flush this many cells at a time * when sending. */ - unsigned int SchedulerMaxFlushCells; + int SchedulerMaxFlushCells__; } or_options_t; /** Persistent state for an onion router, as saved to disk. */ From e2641484a72c342ad6313eea135709f21c3a225a Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 27 Nov 2014 22:57:04 -0500 Subject: [PATCH 168/184] One more, appease "make check-spaces" --- src/or/main.c | 1 - src/or/scheduler.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/or/main.c b/src/or/main.c index 64ccbd496c..e78e9bf6a6 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -224,7 +224,6 @@ set_buffer_lengths_to_zero(tor_socket_t s) } #endif - /** Return 1 if we have successfully built a circuit, and nothing has changed * to make us think that maybe we can't. */ diff --git a/src/or/scheduler.c b/src/or/scheduler.c index c2ede846bf..61f69b3c36 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -706,3 +706,4 @@ scheduler_set_watermarks(uint32_t lo, uint32_t hi, uint32_t max_flush) sched_q_high_water = hi; sched_max_flush_cells = max_flush; } + From 95ead313490accfb9ec43630a702b6d735dd34fb Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 27 Nov 2014 23:05:21 -0500 Subject: [PATCH 169/184] Tweak global_scheduler changes file --- changes/global_scheduler | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/changes/global_scheduler b/changes/global_scheduler index d0b8305ceb..df3b464f91 100644 --- a/changes/global_scheduler +++ b/changes/global_scheduler @@ -1,4 +1,12 @@ - o Major changes: + o Major features (relay, infrastructure): - Implement a new inter-cmux comparison API, a global high/low watermark mechanism and a global scheduler loop for transmission prioritization - across all channels as well as among circuits on one channel. + across all channels as well as among circuits on one channel. This + schedule is currently tuned to (tolerantly) avoid making changes + in the current network performance, but it should form the basis + major circuit performance increases. Code by Andrea; implements + ticket 9262. + + o Testing: + - New tests for many parts of channel, relay, and circuit mux + functionality. Code by Andrea; part of 9262. From 49976fabc4457713347fe6d0c8e16939de852393 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 27 Nov 2014 23:21:46 -0500 Subject: [PATCH 170/184] Fix a likely bug found by coverity in test_scheduler.c. Andrea, do you agree with this? This is CID 1256186 --- src/test/test_scheduler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index da5c4e8fa0..d031214f41 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -258,7 +258,7 @@ circuitmux_compare_muxes_mock(circuitmux_t *cmux_1, else if (cmux_1 == mock_ccm_tgt_2 && cmux_2 == mock_ccm_tgt_1) { result = 1; } else { - if (cmux_1 == mock_ccm_tgt_1 || cmux_1 == mock_ccm_tgt_1) result = -1; + if (cmux_1 == mock_ccm_tgt_1 || cmux_1 == mock_ccm_tgt_2) result = -1; else if (cmux_2 == mock_ccm_tgt_1 || cmux_2 == mock_ccm_tgt_2) { result = 1; } else { From 0bfadbf4b91347eb29c4e7d1a5ccfe2f9c7fd021 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 27 Nov 2014 23:24:03 -0500 Subject: [PATCH 171/184] Fix a memory leak in rend_services_introduce This is CID 1256187 ; bug not in any released tor. --- src/or/rendservice.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/or/rendservice.c b/src/or/rendservice.c index ead9f3fe66..26e5659123 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -3073,11 +3073,12 @@ rend_services_introduce(void) const or_options_t *options = get_options(); /* List of nodes we need to _exclude_ when choosing a new node to establish * an intro point to. */ - smartlist_t *exclude_nodes = smartlist_new(); + smartlist_t *exclude_nodes; if (!have_completed_a_circuit()) return; + exclude_nodes = smartlist_new(); now = time(NULL); for (i=0; i < smartlist_len(rend_service_list); ++i) { From 430f5852ac1c19cea295fd1cb4c362777f1de21a Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 28 Nov 2014 09:18:17 -0500 Subject: [PATCH 172/184] Fix a signed/unsigned comparison warning in scheduler_run --- src/or/scheduler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/or/scheduler.c b/src/or/scheduler.c index 61f69b3c36..d1a15aacb2 100644 --- a/src/or/scheduler.c +++ b/src/or/scheduler.c @@ -418,7 +418,7 @@ scheduler_run, (void)) flushed_this_time = channel_flush_some_cells(chan, MIN(sched_max_flush_cells, - n_cells - flushed)); + (size_t) n_cells - flushed)); if (flushed_this_time <= 0) break; flushed += flushed_this_time; } From 11b652acb382b181927d2c31a50e4c8621615083 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 28 Nov 2014 10:06:10 -0500 Subject: [PATCH 173/184] Fix some 32-bit build issues in the tests When comparing 64-bit types, you need to use tt_[ui]64_op(). Found by Jenkins --- src/test/test_channel.c | 44 +++++++++++++++++++-------------------- src/test/test_scheduler.c | 8 +++---- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 49590f52c0..8213db614f 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -1134,11 +1134,11 @@ test_channel_multi(void *arg) /* Initial queue size update */ channel_update_xmit_queue_size(ch1); - tt_int_op(ch1->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch1->bytes_queued_for_xmit, ==, 0); channel_update_xmit_queue_size(ch2); - tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 0); + tt_u64_op(global_queue_estimate, ==, 0); /* Queue some cells, check queue estimates */ cell = tor_malloc_zero(sizeof(cell_t)); @@ -1151,10 +1151,10 @@ test_channel_multi(void *arg) channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - tt_int_op(ch1->bytes_queued_for_xmit, ==, 0); - tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch1->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 0); + tt_u64_op(global_queue_estimate, ==, 0); /* Stop accepting cells at lower layer */ test_chan_accept_cells = 0; @@ -1165,18 +1165,18 @@ test_channel_multi(void *arg) channel_write_cell(ch1, cell); channel_update_xmit_queue_size(ch1); - tt_int_op(ch1->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch1->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 512); + tt_u64_op(global_queue_estimate, ==, 512); cell = tor_malloc_zero(sizeof(cell_t)); make_fake_cell(cell); channel_write_cell(ch2, cell); channel_update_xmit_queue_size(ch2); - tt_int_op(ch2->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch2->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 1024); + tt_u64_op(global_queue_estimate, ==, 1024); /* Allow cells through again */ test_chan_accept_cells = 1; @@ -1187,10 +1187,10 @@ test_channel_multi(void *arg) /* Update and check queue sizes */ channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - tt_int_op(ch1->bytes_queued_for_xmit, ==, 512); - tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch1->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 512); + tt_u64_op(global_queue_estimate, ==, 512); /* Flush chan 1 */ channel_flush_cells(ch1); @@ -1198,10 +1198,10 @@ test_channel_multi(void *arg) /* Update and check queue sizes */ channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - tt_int_op(ch1->bytes_queued_for_xmit, ==, 0); - tt_int_op(ch2->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch1->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch2->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 0); + tt_u64_op(global_queue_estimate, ==, 0); /* Now block again */ test_chan_accept_cells = 0; @@ -1218,10 +1218,10 @@ test_channel_multi(void *arg) /* Check the estimates */ channel_update_xmit_queue_size(ch1); channel_update_xmit_queue_size(ch2); - tt_int_op(ch1->bytes_queued_for_xmit, ==, 512); - tt_int_op(ch2->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch1->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch2->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 1024); + tt_u64_op(global_queue_estimate, ==, 1024); /* Now close channel 2; it should be subtracted from the global queue */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); @@ -1229,7 +1229,7 @@ test_channel_multi(void *arg) UNMOCK(scheduler_release_channel); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 512); + tt_u64_op(global_queue_estimate, ==, 512); /* * Since the fake channels aren't registered, channel_free_all() can't @@ -1240,7 +1240,7 @@ test_channel_multi(void *arg) UNMOCK(scheduler_release_channel); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 0); + tt_u64_op(global_queue_estimate, ==, 0); /* Now free everything */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); @@ -1435,7 +1435,7 @@ test_channel_queue_size(void *arg) channel_update_xmit_queue_size(ch); tt_int_op(ch->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 0); + tt_u64_op(global_queue_estimate, ==, 0); /* Test the call-through to our fake lower layer */ n = channel_num_cells_writeable(ch); diff --git a/src/test/test_scheduler.c b/src/test/test_scheduler.c index d031214f41..a7a1acc83e 100644 --- a/src/test/test_scheduler.c +++ b/src/test/test_scheduler.c @@ -729,22 +729,22 @@ test_scheduler_queue_heuristic(void *arg) /* Not yet inited case */ scheduler_update_queue_heuristic(now - 180); - tt_int_op(queue_heuristic, ==, 0); + tt_u64_op(queue_heuristic, ==, 0); tt_int_op(queue_heuristic_timestamp, ==, now - 180); queue_heuristic = 1000000000L; queue_heuristic_timestamp = now - 120; scheduler_update_queue_heuristic(now - 119); - tt_int_op(queue_heuristic, ==, 500000000L); + tt_u64_op(queue_heuristic, ==, 500000000L); tt_int_op(queue_heuristic_timestamp, ==, now - 119); scheduler_update_queue_heuristic(now - 116); - tt_int_op(queue_heuristic, ==, 62500000L); + tt_u64_op(queue_heuristic, ==, 62500000L); tt_int_op(queue_heuristic_timestamp, ==, now - 116); qh = scheduler_get_queue_heuristic(); - tt_int_op(qh, ==, 0); + tt_u64_op(qh, ==, 0); done: return; From 11c044e46a027c759b1ac054bd320eb902bca602 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 4 Dec 2014 09:11:13 -0500 Subject: [PATCH 174/184] Initialize libevent in circuitmux/destroy_cell_queue test --- src/test/test_circuitmux.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c index e88d18f061..20c106ab9d 100644 --- a/src/test/test_circuitmux.c +++ b/src/test/test_circuitmux.c @@ -36,7 +36,11 @@ test_cmux_destroy_cell_queue(void *arg) circuit_t *circ = NULL; cell_queue_t *cq = NULL; packed_cell_t *pc = NULL; + tor_libevent_cfg cfg; + memset(&cfg, 0, sizeof(cfg)); + + tor_libevent_initialize(&cfg); scheduler_init(); #ifdef ENABLE_MEMPOOLS From 58df153163ec0e4430dbf136f4194fd43150752c Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 4 Dec 2014 09:16:49 -0500 Subject: [PATCH 175/184] Fix more 64/32 warnings in test_channel.c --- src/test/test_channel.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/test/test_channel.c b/src/test/test_channel.c index 8213db614f..f882b99906 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -1433,7 +1433,7 @@ test_channel_queue_size(void *arg) /* Initial queue size update */ channel_update_xmit_queue_size(ch); - tt_int_op(ch->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); tt_u64_op(global_queue_estimate, ==, 0); @@ -1468,23 +1468,23 @@ test_channel_queue_size(void *arg) /* Update queue size estimates */ channel_update_xmit_queue_size(ch); /* One cell, times an overhead factor of 1.0 */ - tt_int_op(ch->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 512); /* Try a different overhead factor */ test_overhead_estimate = 0.5f; /* This one should be ignored since it's below 1.0 */ channel_update_xmit_queue_size(ch); - tt_int_op(ch->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 512); /* Now try a larger one */ test_overhead_estimate = 2.0f; channel_update_xmit_queue_size(ch); - tt_int_op(ch->bytes_queued_for_xmit, ==, 1024); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 1024); /* Go back to 1.0 */ test_overhead_estimate = 1.0f; channel_update_xmit_queue_size(ch); - tt_int_op(ch->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 512); /* Check the global estimate too */ global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 512); + tt_u64_op(global_queue_estimate, ==, 512); /* Go to open */ old_count = test_cells_written; @@ -1498,9 +1498,9 @@ test_channel_queue_size(void *arg) /* Check the queue size again */ channel_update_xmit_queue_size(ch); - tt_int_op(ch->bytes_queued_for_xmit, ==, 512); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 512); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 512); + tt_u64_op(global_queue_estimate, ==, 512); /* * Now the cell is in the queue, and we're open, so we should get 31 @@ -1522,9 +1522,9 @@ test_channel_queue_size(void *arg) /* Should have queue size estimate of zero */ channel_update_xmit_queue_size(ch); - tt_int_op(ch->bytes_queued_for_xmit, ==, 0); + tt_u64_op(ch->bytes_queued_for_xmit, ==, 0); global_queue_estimate = channel_get_global_queue_estimate(); - tt_int_op(global_queue_estimate, ==, 0); + tt_u64_op(global_queue_estimate, ==, 0); /* Okay, now we're done with this one */ MOCK(scheduler_release_channel, scheduler_release_channel_mock); From 3c0e09ef813a12d64fb4329978853e2b27a5856e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 4 Dec 2014 09:19:44 -0500 Subject: [PATCH 176/184] Add fakechans.h to noinst_headers --- src/test/include.am | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/include.am b/src/test/include.am index 51c9f73739..d7a647940b 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -79,6 +79,7 @@ src_test_bench_LDADD = src/or/libtor.a src/common/libor.a \ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ noinst_HEADERS+= \ + src/test/fakechans.h \ src/test/test.h \ src/test/test_descriptors.inc \ src/test/example_extrainfo.inc \ From 9c239eccc973042cbaec16fd48a457f44aeafc24 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sun, 7 Dec 2014 15:47:09 +0200 Subject: [PATCH 177/184] Use END_CIRC_REASON_TORPROTOCOL instead of magic number. --- changes/bug13840 | 3 +++ src/or/connection_edge.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 changes/bug13840 diff --git a/changes/bug13840 b/changes/bug13840 new file mode 100644 index 0000000000..a7204e4a9c --- /dev/null +++ b/changes/bug13840 @@ -0,0 +1,3 @@ + o Code simplifications and refactoring: + - In connection_exit_begin_conn(), use END_CIRC_REASON_TORPROTOCOL + constant instead of hardcoded value. Fixes issue 13840. diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 14b391180e..9ace375d74 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -2461,7 +2461,7 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ) relay_header_unpack(&rh, cell->payload); if (rh.length > RELAY_PAYLOAD_SIZE) - return -1; + return -END_CIRC_REASON_TORPROTOCOL; /* Note: we have to use relay_send_command_from_edge here, not * connection_edge_end or connection_edge_send_command, since those require @@ -2479,7 +2479,7 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ) r = begin_cell_parse(cell, &bcell, &end_reason); if (r < -1) { - return -1; + return -END_CIRC_REASON_TORPROTOCOL; } else if (r == -1) { tor_free(bcell.address); relay_send_end_cell_from_edge(rh.stream_id, circ, end_reason, NULL); From b73a7600afd4b1f13ac985df27cb703bd3ad427d Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 10 Dec 2014 01:10:44 -0500 Subject: [PATCH 178/184] when somebody uploads too much, say who tried it --- src/or/directory.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/or/directory.c b/src/or/directory.c index e1f5964e1e..cca4b54e24 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -2210,8 +2210,10 @@ connection_dir_process_inbuf(dir_connection_t *conn) } if (connection_get_inbuf_len(TO_CONN(conn)) > MAX_DIRECTORY_OBJECT_SIZE) { - log_warn(LD_HTTP, "Too much data received from directory connection: " - "denial of service attempt, or you need to upgrade?"); + log_warn(LD_HTTP, + "Too much data received from directory connection (%s): " + "denial of service attempt, or you need to upgrade?", + conn->base_.address); connection_mark_for_close(TO_CONN(conn)); return -1; } From 76753efd7b9fd08fa6b88d096e85f0ff798f2939 Mon Sep 17 00:00:00 2001 From: meejah Date: Wed, 10 Dec 2014 22:30:14 -0700 Subject: [PATCH 179/184] Fix 13941: make calling log_new_relay_greeting() optional. Specifically, only if we're creating secret_id_key do we log the greeting (and then only if the key is actually created). --- changes/bug13941 | 4 ++++ src/or/rendservice.c | 2 +- src/or/router.c | 18 +++++++++++------- src/or/router.h | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 changes/bug13941 diff --git a/changes/bug13941 b/changes/bug13941 new file mode 100644 index 0000000000..eae748cdab --- /dev/null +++ b/changes/bug13941 @@ -0,0 +1,4 @@ + o Minor bugfixes (hidden services): + - When adding a new hidden-service (for example, via SETCONF) Tor + no longer logs a congratulations for running a relay. + diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 26e5659123..5766cfc78d 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -738,7 +738,7 @@ rend_service_load_keys(rend_service_t *s) s->directory); return -1; } - s->private_key = init_key_from_file(fname, 1, LOG_ERR); + s->private_key = init_key_from_file(fname, 1, LOG_ERR, 0); if (!s->private_key) return -1; diff --git a/src/or/router.c b/src/or/router.c index 01838b4b3e..56bb909952 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -392,10 +392,12 @@ log_new_relay_greeting(void) /** Try to read an RSA key from fname. If fname doesn't exist * and generate is true, create a new RSA key and save it in * fname. Return the read/created key, or NULL on error. Log all - * errors at level severity. + * errors at level severity. If log_greeting is non-zero and a + * new key was created, log_new_relay_greeting() is called. */ crypto_pk_t * -init_key_from_file(const char *fname, int generate, int severity) +init_key_from_file(const char *fname, int generate, int severity, + int log_greeting) { crypto_pk_t *prkey = NULL; @@ -433,7 +435,9 @@ init_key_from_file(const char *fname, int generate, int severity) goto error; } log_info(LD_GENERAL, "Generated key seems valid"); - log_new_relay_greeting(); + if (log_greeting) { + log_new_relay_greeting(); + } if (crypto_pk_write_private_key_to_filename(prkey, fname)) { tor_log(severity, LD_FS, "Couldn't write generated key to \"%s\".", fname); @@ -545,7 +549,7 @@ load_authority_keyset(int legacy, crypto_pk_t **key_out, fname = get_datadir_fname2("keys", legacy ? "legacy_signing_key" : "authority_signing_key"); - signing_key = init_key_from_file(fname, 0, LOG_INFO); + signing_key = init_key_from_file(fname, 0, LOG_INFO, 0); if (!signing_key) { log_warn(LD_DIR, "No version 3 directory key found in %s", fname); goto done; @@ -828,7 +832,7 @@ init_keys(void) /* 1b. Read identity key. Make it if none is found. */ keydir = get_datadir_fname2("keys", "secret_id_key"); log_info(LD_GENERAL,"Reading/making identity key \"%s\"...",keydir); - prkey = init_key_from_file(keydir, 1, LOG_ERR); + prkey = init_key_from_file(keydir, 1, LOG_ERR, 1); tor_free(keydir); if (!prkey) return -1; set_server_identity_key(prkey); @@ -851,7 +855,7 @@ init_keys(void) /* 2. Read onion key. Make it if none is found. */ keydir = get_datadir_fname2("keys", "secret_onion_key"); log_info(LD_GENERAL,"Reading/making onion key \"%s\"...",keydir); - prkey = init_key_from_file(keydir, 1, LOG_ERR); + prkey = init_key_from_file(keydir, 1, LOG_ERR, 1); tor_free(keydir); if (!prkey) return -1; set_onion_key(prkey); @@ -876,7 +880,7 @@ init_keys(void) keydir = get_datadir_fname2("keys", "secret_onion_key.old"); if (!lastonionkey && file_status(keydir) == FN_FILE) { - prkey = init_key_from_file(keydir, 1, LOG_ERR); /* XXXX Why 1? */ + prkey = init_key_from_file(keydir, 1, LOG_ERR, 0); /* XXXX Why 1? */ if (prkey) lastonionkey = prkey; } diff --git a/src/or/router.h b/src/or/router.h index 16d3845be1..b5d7f11053 100644 --- a/src/or/router.h +++ b/src/or/router.h @@ -29,7 +29,7 @@ crypto_pk_t *get_my_v3_legacy_signing_key(void); void dup_onion_keys(crypto_pk_t **key, crypto_pk_t **last); void rotate_onion_key(void); crypto_pk_t *init_key_from_file(const char *fname, int generate, - int severity); + int severity, int log_greeting); void v3_authority_check_key_expiry(void); di_digest256_map_t *construct_ntor_key_map(void); From 85bfad1875994dee84eab8fff49189ba2be0b532 Mon Sep 17 00:00:00 2001 From: meejah Date: Wed, 10 Dec 2014 22:15:04 -0700 Subject: [PATCH 180/184] Pre-check hidden-service-dir permissions/ownership See ticket #13942 where Tor dies if you feed it a hidden service directory with the wrong owner via SETCONF. --- changes/bug13942 | 5 +++++ src/or/rendservice.c | 10 ++++++++++ 2 files changed, 15 insertions(+) create mode 100644 changes/bug13942 diff --git a/changes/bug13942 b/changes/bug13942 new file mode 100644 index 0000000000..c1247b6ac5 --- /dev/null +++ b/changes/bug13942 @@ -0,0 +1,5 @@ + o Minor bugfixes (hidden services): + - Pre-check directory permissions for new hidden-services to avoid + at least one case of "Bug: Acting on config options left us in a + broken state. Dying." + diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 26e5659123..a354d9062c 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -531,6 +531,16 @@ rend_config_services(const or_options_t *options, int validate_only) } } if (service) { + cpd_check_t check_opts = CPD_CHECK_MODE_ONLY; + if (service->dir_group_readable) { + check_opts |= CPD_GROUP_READ; + } + + if (check_private_dir(service->directory, check_opts, options->User) < 0) { + rend_service_free(service); + return -1; + } + if (validate_only) { rend_service_free(service); } else { From 7c5d88897729ba8c128d0c0e01dfd671cf65eb98 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 12 Dec 2014 08:49:52 -0500 Subject: [PATCH 181/184] Tweak 13942 fix --- changes/bug13942 | 2 +- src/or/rendservice.c | 206 +++++++++++++++++++++---------------------- 2 files changed, 104 insertions(+), 104 deletions(-) diff --git a/changes/bug13942 b/changes/bug13942 index c1247b6ac5..f9e4504a48 100644 --- a/changes/bug13942 +++ b/changes/bug13942 @@ -1,5 +1,5 @@ o Minor bugfixes (hidden services): - Pre-check directory permissions for new hidden-services to avoid at least one case of "Bug: Acting on config options left us in a - broken state. Dying." + broken state. Dying." Fixes bug 13942. diff --git a/src/or/rendservice.c b/src/or/rendservice.c index a354d9062c..df988fdb3f 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -373,101 +373,101 @@ rend_config_services(const or_options_t *options, int validate_only) if (!strcasecmp(line->key, "HiddenServiceDir")) { if (service) { /* register the one we just finished parsing */ if (validate_only) - rend_service_free(service); - else - rend_add_service(service); - } - service = tor_malloc_zero(sizeof(rend_service_t)); - service->directory = tor_strdup(line->value); - service->ports = smartlist_new(); - service->intro_period_started = time(NULL); - service->n_intro_points_wanted = NUM_INTRO_POINTS_DEFAULT; - continue; - } - if (!service) { - log_warn(LD_CONFIG, "%s with no preceding HiddenServiceDir directive", - line->key); - rend_service_free(service); - return -1; - } - if (!strcasecmp(line->key, "HiddenServicePort")) { - portcfg = parse_port_config(line->value); - if (!portcfg) { - rend_service_free(service); - return -1; - } - smartlist_add(service->ports, portcfg); - } else if (!strcasecmp(line->key, - "HiddenServiceDirGroupReadable")) { - service->dir_group_readable = (int)tor_parse_long(line->value, - 10, 0, 1, &ok, NULL); - if (!ok) { - log_warn(LD_CONFIG, - "HiddenServiceDirGroupReadable should be 0 or 1, not %s", - line->value); - rend_service_free(service); - return -1; - } - log_info(LD_CONFIG, - "HiddenServiceDirGroupReadable=%d for %s", - service->dir_group_readable, service->directory); - } else if (!strcasecmp(line->key, "HiddenServiceAuthorizeClient")) { - /* Parse auth type and comma-separated list of client names and add a - * rend_authorized_client_t for each client to the service's list - * of authorized clients. */ - smartlist_t *type_names_split, *clients; - const char *authname; - int num_clients; - if (service->auth_type != REND_NO_AUTH) { - log_warn(LD_CONFIG, "Got multiple HiddenServiceAuthorizeClient " - "lines for a single service."); - rend_service_free(service); - return -1; - } - type_names_split = smartlist_new(); - smartlist_split_string(type_names_split, line->value, " ", 0, 2); - if (smartlist_len(type_names_split) < 1) { - log_warn(LD_BUG, "HiddenServiceAuthorizeClient has no value. This " - "should have been prevented when parsing the " - "configuration."); - smartlist_free(type_names_split); - rend_service_free(service); - return -1; - } - authname = smartlist_get(type_names_split, 0); - if (!strcasecmp(authname, "basic")) { - service->auth_type = REND_BASIC_AUTH; - } else if (!strcasecmp(authname, "stealth")) { - service->auth_type = REND_STEALTH_AUTH; - } else { - log_warn(LD_CONFIG, "HiddenServiceAuthorizeClient contains " - "unrecognized auth-type '%s'. Only 'basic' or 'stealth' " - "are recognized.", - (char *) smartlist_get(type_names_split, 0)); - SMARTLIST_FOREACH(type_names_split, char *, cp, tor_free(cp)); - smartlist_free(type_names_split); - rend_service_free(service); - return -1; - } - service->clients = smartlist_new(); - if (smartlist_len(type_names_split) < 2) { - log_warn(LD_CONFIG, "HiddenServiceAuthorizeClient contains " - "auth-type '%s', but no client names.", - service->auth_type == REND_BASIC_AUTH ? "basic" : "stealth"); - SMARTLIST_FOREACH(type_names_split, char *, cp, tor_free(cp)); - smartlist_free(type_names_split); - continue; - } - clients = smartlist_new(); - smartlist_split_string(clients, smartlist_get(type_names_split, 1), - ",", SPLIT_SKIP_SPACE, 0); - SMARTLIST_FOREACH(type_names_split, char *, cp, tor_free(cp)); - smartlist_free(type_names_split); - /* Remove duplicate client names. */ - num_clients = smartlist_len(clients); - smartlist_sort_strings(clients); - smartlist_uniq_strings(clients); - if (smartlist_len(clients) < num_clients) { + rend_service_free(service); + else + rend_add_service(service); + } + service = tor_malloc_zero(sizeof(rend_service_t)); + service->directory = tor_strdup(line->value); + service->ports = smartlist_new(); + service->intro_period_started = time(NULL); + service->n_intro_points_wanted = NUM_INTRO_POINTS_DEFAULT; + continue; + } + if (!service) { + log_warn(LD_CONFIG, "%s with no preceding HiddenServiceDir directive", + line->key); + rend_service_free(service); + return -1; + } + if (!strcasecmp(line->key, "HiddenServicePort")) { + portcfg = parse_port_config(line->value); + if (!portcfg) { + rend_service_free(service); + return -1; + } + smartlist_add(service->ports, portcfg); + } else if (!strcasecmp(line->key, + "HiddenServiceDirGroupReadable")) { + service->dir_group_readable = (int)tor_parse_long(line->value, + 10, 0, 1, &ok, NULL); + if (!ok) { + log_warn(LD_CONFIG, + "HiddenServiceDirGroupReadable should be 0 or 1, not %s", + line->value); + rend_service_free(service); + return -1; + } + log_info(LD_CONFIG, + "HiddenServiceDirGroupReadable=%d for %s", + service->dir_group_readable, service->directory); + } else if (!strcasecmp(line->key, "HiddenServiceAuthorizeClient")) { + /* Parse auth type and comma-separated list of client names and add a + * rend_authorized_client_t for each client to the service's list + * of authorized clients. */ + smartlist_t *type_names_split, *clients; + const char *authname; + int num_clients; + if (service->auth_type != REND_NO_AUTH) { + log_warn(LD_CONFIG, "Got multiple HiddenServiceAuthorizeClient " + "lines for a single service."); + rend_service_free(service); + return -1; + } + type_names_split = smartlist_new(); + smartlist_split_string(type_names_split, line->value, " ", 0, 2); + if (smartlist_len(type_names_split) < 1) { + log_warn(LD_BUG, "HiddenServiceAuthorizeClient has no value. This " + "should have been prevented when parsing the " + "configuration."); + smartlist_free(type_names_split); + rend_service_free(service); + return -1; + } + authname = smartlist_get(type_names_split, 0); + if (!strcasecmp(authname, "basic")) { + service->auth_type = REND_BASIC_AUTH; + } else if (!strcasecmp(authname, "stealth")) { + service->auth_type = REND_STEALTH_AUTH; + } else { + log_warn(LD_CONFIG, "HiddenServiceAuthorizeClient contains " + "unrecognized auth-type '%s'. Only 'basic' or 'stealth' " + "are recognized.", + (char *) smartlist_get(type_names_split, 0)); + SMARTLIST_FOREACH(type_names_split, char *, cp, tor_free(cp)); + smartlist_free(type_names_split); + rend_service_free(service); + return -1; + } + service->clients = smartlist_new(); + if (smartlist_len(type_names_split) < 2) { + log_warn(LD_CONFIG, "HiddenServiceAuthorizeClient contains " + "auth-type '%s', but no client names.", + service->auth_type == REND_BASIC_AUTH ? "basic" : "stealth"); + SMARTLIST_FOREACH(type_names_split, char *, cp, tor_free(cp)); + smartlist_free(type_names_split); + continue; + } + clients = smartlist_new(); + smartlist_split_string(clients, smartlist_get(type_names_split, 1), + ",", SPLIT_SKIP_SPACE, 0); + SMARTLIST_FOREACH(type_names_split, char *, cp, tor_free(cp)); + smartlist_free(type_names_split); + /* Remove duplicate client names. */ + num_clients = smartlist_len(clients); + smartlist_sort_strings(clients); + smartlist_uniq_strings(clients); + if (smartlist_len(clients) < num_clients) { log_info(LD_CONFIG, "HiddenServiceAuthorizeClient contains %d " "duplicate client name(s); removing.", num_clients - smartlist_len(clients)); @@ -531,15 +531,15 @@ rend_config_services(const or_options_t *options, int validate_only) } } if (service) { - cpd_check_t check_opts = CPD_CHECK_MODE_ONLY; - if (service->dir_group_readable) { - check_opts |= CPD_GROUP_READ; - } + cpd_check_t check_opts = CPD_CHECK_MODE_ONLY; + if (service->dir_group_readable) { + check_opts |= CPD_GROUP_READ; + } - if (check_private_dir(service->directory, check_opts, options->User) < 0) { - rend_service_free(service); - return -1; - } + if (check_private_dir(service->directory, check_opts, options->User) < 0) { + rend_service_free(service); + return -1; + } if (validate_only) { rend_service_free(service); From 7d5916c0a7622782c6bdb4f5862bf7c6e5bad5f8 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 12 Dec 2014 08:53:42 -0500 Subject: [PATCH 182/184] Reference bug number in changes file --- changes/bug13941 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/changes/bug13941 b/changes/bug13941 index eae748cdab..6309378510 100644 --- a/changes/bug13941 +++ b/changes/bug13941 @@ -1,4 +1,6 @@ o Minor bugfixes (hidden services): - When adding a new hidden-service (for example, via SETCONF) Tor - no longer logs a congratulations for running a relay. + no longer logs a congratulations for running a relay. Fixes bug + 13941; bugfix on 0.2.6.1-alpha. + From f7e8bc2b4bc0d6072a337d9420cd5cd395c9f9d2 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 12 Dec 2014 08:54:07 -0500 Subject: [PATCH 183/184] fix a long line --- src/or/rendservice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/or/rendservice.c b/src/or/rendservice.c index cffaf4a0e3..196145e210 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -400,7 +400,7 @@ rend_config_services(const or_options_t *options, int validate_only) } else if (!strcasecmp(line->key, "HiddenServiceDirGroupReadable")) { service->dir_group_readable = (int)tor_parse_long(line->value, - 10, 0, 1, &ok, NULL); + 10, 0, 1, &ok, NULL); if (!ok) { log_warn(LD_CONFIG, "HiddenServiceDirGroupReadable should be 0 or 1, not %s", From 6a9cae2e1dafb756b30fda541e8b5d68cfd45f89 Mon Sep 17 00:00:00 2001 From: teor Date: Sat, 20 Dec 2014 22:20:54 +1100 Subject: [PATCH 184/184] Fix clang warning, IPv6 address comment, buffer size typo The address of an array in the middle of a structure will always be non-NULL. clang recognises this and complains. Disable the tautologous and redundant check to silence this warning. A comment about an IPv6 address string incorrectly refers to an IPv4 address format. A log buffer is sized 10024 rather than 10240. Fixes bug 14001. --- changes/bug14001-clang-warning | 6 ++++++ src/common/address.c | 3 ++- src/common/log.c | 2 +- src/or/connection_edge.c | 11 ++++++++++- 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 changes/bug14001-clang-warning diff --git a/changes/bug14001-clang-warning b/changes/bug14001-clang-warning new file mode 100644 index 0000000000..b932af6ab7 --- /dev/null +++ b/changes/bug14001-clang-warning @@ -0,0 +1,6 @@ + o Minor bugfixes: + - The address of an array in the middle of a structure will + always be non-NULL. clang recognises this and complains. + Disable the tautologous and redundant check to silence + this warning. + Fixes bug 14001. diff --git a/src/common/address.c b/src/common/address.c index a3b5df66bc..0b475fc9fd 100644 --- a/src/common/address.c +++ b/src/common/address.c @@ -1119,7 +1119,8 @@ fmt_addr32(uint32_t addr) int tor_addr_parse(tor_addr_t *addr, const char *src) { - char *tmp = NULL; /* Holds substring if we got a dotted quad. */ + /* Holds substring of IPv6 address after removing square brackets */ + char *tmp = NULL; int result; struct in_addr in_tmp; struct in6_addr in6_tmp; diff --git a/src/common/log.c b/src/common/log.c index ad0da7da6b..0a21ffbd44 100644 --- a/src/common/log.c +++ b/src/common/log.c @@ -451,7 +451,7 @@ MOCK_IMPL(STATIC void, logv,(int severity, log_domain_mask_t domain, const char *funcname, const char *suffix, const char *format, va_list ap)) { - char buf[10024]; + char buf[10240]; size_t msg_len = 0; int formatted = 0; logfile_t *lf; diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 9ace375d74..9859cc26ea 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -744,8 +744,17 @@ connection_ap_fail_onehop(const char *failed_digest, /* we don't know the digest; have to compare addr:port */ tor_addr_t addr; if (!build_state || !build_state->chosen_exit || - !entry_conn->socks_request || !entry_conn->socks_request->address) + !entry_conn->socks_request) { + /* clang thinks that an array midway through a structure + * will never have a NULL address, under either: + * -Wpointer-bool-conversion if using !, or + * -Wtautological-pointer-compare if using == or != + * It's probably right (unless pointers overflow and wrap), + * so we just skip this check + || !entry_conn->socks_request->address + */ continue; + } if (tor_addr_parse(&addr, entry_conn->socks_request->address)<0 || !tor_addr_eq(&build_state->chosen_exit->addr, &addr) || build_state->chosen_exit->port != entry_conn->socks_request->port)