diff options
Diffstat (limited to 'src')
46 files changed, 5244 insertions, 1295 deletions
diff --git a/src/common/address.c b/src/common/address.c index 86c32efdd9..b41d75e509 100644 --- a/src/common/address.c +++ b/src/common/address.c @@ -148,7 +148,9 @@ tor_addr_make_af_unix(tor_addr_t *a) } /** Set the tor_addr_t in <b>a</b> to contain the socket address contained in - * <b>sa</b>. Return 0 on success and -1 on failure. */ + * <b>sa</b>. IF <b>port_out</b> is non-NULL and <b>sa</b> contains a port, + * set *<b>port_out</b> to that port. Return 0 on success and -1 on + * failure. */ int tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa, uint16_t *port_out) @@ -908,6 +910,59 @@ tor_addr_is_loopback(const tor_addr_t *addr) } } +/* Is addr valid? + * Checks that addr is non-NULL and not tor_addr_is_null(). + * If for_listening is true, IPv4 addr 0.0.0.0 is allowed. + * It means "bind to all addresses on the local machine". */ +int +tor_addr_is_valid(const tor_addr_t *addr, int for_listening) +{ + /* NULL addresses are invalid regardless of for_listening */ + if (addr == NULL) { + return 0; + } + + /* Only allow IPv4 0.0.0.0 for_listening. */ + if (for_listening && addr->family == AF_INET + && tor_addr_to_ipv4h(addr) == 0) { + return 1; + } + + /* Otherwise, the address is valid if it's not tor_addr_is_null() */ + return !tor_addr_is_null(addr); +} + +/* Is the network-order IPv4 address v4n_addr valid? + * Checks that addr is not zero. + * Except if for_listening is true, where IPv4 addr 0.0.0.0 is allowed. */ +int +tor_addr_is_valid_ipv4n(uint32_t v4n_addr, int for_listening) +{ + /* Any IPv4 address is valid with for_listening. */ + if (for_listening) { + return 1; + } + + /* Otherwise, zero addresses are invalid. */ + return v4n_addr != 0; +} + +/* Is port valid? + * Checks that port is not 0. + * Except if for_listening is true, where port 0 is allowed. + * It means "OS chooses a port". */ +int +tor_port_is_valid(uint16_t port, int for_listening) +{ + /* Any port value is valid with for_listening. */ + if (for_listening) { + return 1; + } + + /* Otherwise, zero ports are invalid. */ + return port != 0; +} + /** Set <b>dest</b> to equal the IPv4 address in <b>v4addr</b> (given in * network order). */ void diff --git a/src/common/address.h b/src/common/address.h index 76090136d8..558eb52b35 100644 --- a/src/common/address.h +++ b/src/common/address.h @@ -267,6 +267,27 @@ void tor_addr_from_in6(tor_addr_t *dest, const struct in6_addr *in6); int tor_addr_is_null(const tor_addr_t *addr); int tor_addr_is_loopback(const tor_addr_t *addr); +int tor_addr_is_valid(const tor_addr_t *addr, int for_listening); +int tor_addr_is_valid_ipv4n(uint32_t v4n_addr, int for_listening); +#define tor_addr_is_valid_ipv4h(v4h_addr, for_listening) \ + tor_addr_is_valid_ipv4n(htonl(v4h_addr), (for_listening)) +int tor_port_is_valid(uint16_t port, int for_listening); +/* Are addr and port both valid? */ +#define tor_addr_port_is_valid(addr, port, for_listening) \ + (tor_addr_is_valid((addr), (for_listening)) && \ + tor_port_is_valid((port), (for_listening))) +/* Are ap->addr and ap->port both valid? */ +#define tor_addr_port_is_valid_ap(ap, for_listening) \ + tor_addr_port_is_valid(&(ap)->addr, (ap)->port, (for_listening)) +/* Are the network-order v4addr and port both valid? */ +#define tor_addr_port_is_valid_ipv4n(v4n_addr, port, for_listening) \ + (tor_addr_is_valid_ipv4n((v4n_addr), (for_listening)) && \ + tor_port_is_valid((port), (for_listening))) +/* Are the host-order v4addr and port both valid? */ +#define tor_addr_port_is_valid_ipv4h(v4h_addr, port, for_listening) \ + (tor_addr_is_valid_ipv4h((v4h_addr), (for_listening)) && \ + tor_port_is_valid((port), (for_listening))) + int tor_addr_port_split(int severity, const char *addrport, char **address_out, uint16_t *port_out); diff --git a/src/common/aes.c b/src/common/aes.c index 89c99c150a..fd2043372e 100644 --- a/src/common/aes.c +++ b/src/common/aes.c @@ -101,18 +101,6 @@ aes_cipher_free(aes_cnt_cipher_t *cipher_) EVP_CIPHER_CTX_free(cipher); } void -aes_crypt(aes_cnt_cipher_t *cipher_, const char *input, size_t len, - char *output) -{ - int outl; - EVP_CIPHER_CTX *cipher = (EVP_CIPHER_CTX *) cipher_; - - tor_assert(len < INT_MAX); - - EVP_EncryptUpdate(cipher, (unsigned char*)output, - &outl, (const unsigned char *)input, (int)len); -} -void aes_crypt_inplace(aes_cnt_cipher_t *cipher_, char *data, size_t len) { int outl; @@ -181,10 +169,6 @@ struct aes_cnt_cipher { * we're testing it or because we have hardware acceleration configured */ static int should_use_EVP = 0; -/** True iff we have tested the counter-mode implementation and found that it - * doesn't have the counter-mode bug from OpenSSL 1.0.0. */ -static int should_use_openssl_CTR = 0; - /** Check whether we should use the EVP interface for AES. If <b>force_val</b> * is nonnegative, we use use EVP iff it is true. Otherwise, we use EVP * if there is an engine enabled for aes-ecb. */ @@ -249,13 +233,9 @@ evaluate_ctr_for_aes(void) if (fast_memneq(output, encrypt_zero, 16)) { /* Counter mode is buggy */ - log_notice(LD_CRYPTO, "This OpenSSL has a buggy version of counter mode; " - "not using it."); - } else { - /* Counter mode is okay */ - log_info(LD_CRYPTO, "This OpenSSL has a good implementation of counter " - "mode; using it."); - should_use_openssl_CTR = 1; + log_err(LD_CRYPTO, "This OpenSSL has a buggy version of counter mode; " + "quitting tor."); + exit(1); } return 0; } @@ -266,29 +246,6 @@ evaluate_ctr_for_aes(void) #define COUNTER(c, n) ((c)->counter ## n) #endif -/** - * Helper function: set <b>cipher</b>'s internal buffer to the encrypted - * value of the current counter. - */ -static inline void -aes_fill_buf_(aes_cnt_cipher_t *cipher) -{ - /* We don't currently use OpenSSL's counter mode implementation because: - * 1) some versions have known bugs - * 2) its attitude towards IVs is not our own - * 3) changing the counter position was not trivial, last time I looked. - * None of these issues are insurmountable in principle. - */ - - if (cipher->using_evp) { - int outl=16, inl=16; - EVP_EncryptUpdate(&cipher->key.evp, cipher->buf, &outl, - cipher->ctr_buf.buf, inl); - } else { - AES_encrypt(cipher->ctr_buf.buf, cipher->buf, &cipher->key.aes); - } -} - static void aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits); static void aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv); @@ -341,10 +298,7 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits) cipher->pos = 0; - if (should_use_openssl_CTR) - memset(cipher->buf, 0, sizeof(cipher->buf)); - else - aes_fill_buf_(cipher); + memset(cipher->buf, 0, sizeof(cipher->buf)); } /** Release storage held by <b>cipher</b> @@ -380,63 +334,6 @@ evp_block128_fn(const uint8_t in[16], EVP_EncryptUpdate(ctx, out, &outl, in, inl); } -/** Encrypt <b>len</b> bytes from <b>input</b>, storing the result in - * <b>output</b>. Uses the key in <b>cipher</b>, and advances the counter - * by <b>len</b> bytes as it encrypts. - */ -void -aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len, - char *output) -{ - if (should_use_openssl_CTR) { - if (cipher->using_evp) { - /* In openssl 1.0.0, there's an if'd out EVP_aes_128_ctr in evp.h. If - * it weren't disabled, it might be better just to use that. - */ - CRYPTO_ctr128_encrypt((const unsigned char *)input, - (unsigned char *)output, - len, - &cipher->key.evp, - cipher->ctr_buf.buf, - cipher->buf, - &cipher->pos, - evp_block128_fn); - } else { - AES_ctr128_encrypt((const unsigned char *)input, - (unsigned char *)output, - len, - &cipher->key.aes, - cipher->ctr_buf.buf, - cipher->buf, - &cipher->pos); - } - return; - } else { - int c = cipher->pos; - if (PREDICT_UNLIKELY(!len)) return; - - while (1) { - do { - if (len-- == 0) { cipher->pos = c; return; } - *(output++) = *(input++) ^ cipher->buf[c]; - } while (++c != 16); - cipher->pos = c = 0; - if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 0))) { - if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 1))) { - if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 2))) { - ++COUNTER(cipher, 3); - UPDATE_CTR_BUF(cipher, 3); - } - UPDATE_CTR_BUF(cipher, 2); - } - UPDATE_CTR_BUF(cipher, 1); - } - UPDATE_CTR_BUF(cipher, 0); - aes_fill_buf_(cipher); - } - } -} - /** Encrypt <b>len</b> bytes from <b>input</b>, storing the results in place. * Uses the key in <b>cipher</b>, and advances the counter by <b>len</b> bytes * as it encrypts. @@ -444,32 +341,26 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len, void aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len) { - if (should_use_openssl_CTR) { - aes_crypt(cipher, data, len, data); - return; + if (cipher->using_evp) { + /* In openssl 1.0.0, there's an if'd out EVP_aes_128_ctr in evp.h. If + * it weren't disabled, it might be better just to use that. + */ + CRYPTO_ctr128_encrypt((const unsigned char *)data, + (unsigned char *)data, + len, + &cipher->key.evp, + cipher->ctr_buf.buf, + cipher->buf, + &cipher->pos, + evp_block128_fn); } else { - int c = cipher->pos; - if (PREDICT_UNLIKELY(!len)) return; - - while (1) { - do { - if (len-- == 0) { cipher->pos = c; return; } - *(data++) ^= cipher->buf[c]; - } while (++c != 16); - cipher->pos = c = 0; - if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 0))) { - if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 1))) { - if (PREDICT_UNLIKELY(! ++COUNTER(cipher, 2))) { - ++COUNTER(cipher, 3); - UPDATE_CTR_BUF(cipher, 3); - } - UPDATE_CTR_BUF(cipher, 2); - } - UPDATE_CTR_BUF(cipher, 1); - } - UPDATE_CTR_BUF(cipher, 0); - aes_fill_buf_(cipher); - } + AES_ctr128_encrypt((const unsigned char *)data, + (unsigned char *)data, + len, + &cipher->key.aes, + cipher->ctr_buf.buf, + cipher->buf, + &cipher->pos); } } @@ -486,9 +377,6 @@ aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv) #endif cipher->pos = 0; memcpy(cipher->ctr_buf.buf, iv, 16); - - if (!should_use_openssl_CTR) - aes_fill_buf_(cipher); } #endif diff --git a/src/common/aes.h b/src/common/aes.h index 5500db7d0c..bd0456511b 100644 --- a/src/common/aes.h +++ b/src/common/aes.h @@ -17,8 +17,6 @@ typedef struct aes_cnt_cipher aes_cnt_cipher_t; aes_cnt_cipher_t* aes_new_cipher(const char *key, const char *iv); void aes_cipher_free(aes_cnt_cipher_t *cipher); -void aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len, - char *output); void aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len); int evaluate_evp_for_aes(int force_value); diff --git a/src/common/container.c b/src/common/container.c index 9f40dfa2e0..2e42c9ee07 100644 --- a/src/common/container.c +++ b/src/common/container.c @@ -59,25 +59,26 @@ smartlist_clear(smartlist_t *sl) sl->num_used = 0; } +#if SIZE_MAX < INT_MAX +#error "We don't support systems where size_t is smaller than int." +#endif + /** Make sure that <b>sl</b> can hold at least <b>size</b> entries. */ static inline void -smartlist_ensure_capacity(smartlist_t *sl, int size) +smartlist_ensure_capacity(smartlist_t *sl, size_t size) { -#if SIZEOF_SIZE_T > SIZEOF_INT + /* Set MAX_CAPACITY to MIN(INT_MAX, SIZE_MAX / sizeof(void*)) */ +#if (SIZE_MAX/SIZEOF_VOID_P) > INT_MAX #define MAX_CAPACITY (INT_MAX) #else #define MAX_CAPACITY (int)((SIZE_MAX / (sizeof(void*)))) -#define ASSERT_CAPACITY #endif - if (size > sl->capacity) { - int higher = sl->capacity; + + tor_assert(size <= MAX_CAPACITY); + + if (size > (size_t) sl->capacity) { + size_t higher = (size_t) sl->capacity; if (PREDICT_UNLIKELY(size > MAX_CAPACITY/2)) { -#ifdef ASSERT_CAPACITY - /* We don't include this assertion when MAX_CAPACITY == INT_MAX, - * since int size; (size <= INT_MAX) makes analysis tools think we're - * doing something stupid. */ - tor_assert(size <= MAX_CAPACITY); -#endif higher = MAX_CAPACITY; } else { while (size > higher) @@ -87,7 +88,7 @@ smartlist_ensure_capacity(smartlist_t *sl, int size) ((size_t)higher)); memset(sl->list + sl->capacity, 0, sizeof(void *) * (higher - sl->capacity)); - sl->capacity = higher; + sl->capacity = (int) higher; } #undef ASSERT_CAPACITY #undef MAX_CAPACITY @@ -97,7 +98,7 @@ smartlist_ensure_capacity(smartlist_t *sl, int size) void smartlist_add(smartlist_t *sl, void *element) { - smartlist_ensure_capacity(sl, sl->num_used+1); + smartlist_ensure_capacity(sl, ((size_t) sl->num_used)+1); sl->list[sl->num_used++] = element; } @@ -105,11 +106,12 @@ smartlist_add(smartlist_t *sl, void *element) void smartlist_add_all(smartlist_t *s1, const smartlist_t *s2) { - int new_size = s1->num_used + s2->num_used; - tor_assert(new_size >= s1->num_used); /* check for overflow. */ + size_t new_size = (size_t)s1->num_used + (size_t)s2->num_used; + tor_assert(new_size >= (size_t) s1->num_used); /* check for overflow. */ smartlist_ensure_capacity(s1, new_size); memcpy(s1->list + s1->num_used, s2->list, s2->num_used*sizeof(void*)); - s1->num_used = new_size; + tor_assert(new_size <= INT_MAX); /* redundant. */ + s1->num_used = (int) new_size; } /** Remove all elements E from sl such that E==element. Preserve @@ -385,7 +387,7 @@ smartlist_insert(smartlist_t *sl, int idx, void *val) if (idx == sl->num_used) { smartlist_add(sl, val); } else { - smartlist_ensure_capacity(sl, sl->num_used+1); + smartlist_ensure_capacity(sl, ((size_t) sl->num_used)+1); /* Move other elements away */ if (idx < sl->num_used) memmove(sl->list + idx + 1, sl->list + idx, diff --git a/src/common/crypto.c b/src/common/crypto.c index bc659b1935..06446ba050 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -1509,7 +1509,8 @@ crypto_cipher_encrypt(crypto_cipher_t *env, char *to, tor_assert(to); tor_assert(fromlen < SIZE_T_CEILING); - aes_crypt(env->cipher, from, fromlen, to); + memcpy(to, from, fromlen); + aes_crypt_inplace(env->cipher, to, fromlen); return 0; } @@ -1526,19 +1527,19 @@ crypto_cipher_decrypt(crypto_cipher_t *env, char *to, tor_assert(to); tor_assert(fromlen < SIZE_T_CEILING); - aes_crypt(env->cipher, from, fromlen, to); + memcpy(to, from, fromlen); + aes_crypt_inplace(env->cipher, to, fromlen); return 0; } /** Encrypt <b>len</b> bytes on <b>from</b> using the cipher in <b>env</b>; - * on success, return 0. Does not check for failure. + * on success. Does not check for failure. */ -int +void crypto_cipher_crypt_inplace(crypto_cipher_t *env, char *buf, size_t len) { tor_assert(len < SIZE_T_CEILING); aes_crypt_inplace(env->cipher, buf, len); - return 0; } /** Encrypt <b>fromlen</b> bytes (at least 1) from <b>from</b> with the key in @@ -2088,6 +2089,71 @@ static BIGNUM *dh_param_p_tls = NULL; /** Shared G parameter for our DH key exchanges. */ static BIGNUM *dh_param_g = NULL; +/** Validate a given set of Diffie-Hellman parameters. This is moderately + * computationally expensive (milliseconds), so should only be called when + * the DH parameters change. Returns 0 on success, * -1 on failure. + */ +static int +crypto_validate_dh_params(const BIGNUM *p, const BIGNUM *g) +{ + DH *dh = NULL; + int ret = -1; + + /* Copy into a temporary DH object. */ + if (!(dh = DH_new())) + goto out; + if (!(dh->p = BN_dup(p))) + goto out; + if (!(dh->g = BN_dup(g))) + goto out; + + /* Perform the validation. */ + int codes = 0; + if (!DH_check(dh, &codes)) + goto out; + if (BN_is_word(dh->g, DH_GENERATOR_2)) { + /* Per https://wiki.openssl.org/index.php/Diffie-Hellman_parameters + * + * OpenSSL checks the prime is congruent to 11 when g = 2; while the + * IETF's primes are congruent to 23 when g = 2. + */ + BN_ULONG residue = BN_mod_word(dh->p, 24); + if (residue == 11 || residue == 23) + codes &= ~DH_NOT_SUITABLE_GENERATOR; + } + if (codes != 0) /* Specifics on why the params suck is irrelevant. */ + goto out; + + /* Things are probably not evil. */ + ret = 0; + + out: + if (dh) + DH_free(dh); + return ret; +} + +/** Set the global Diffie-Hellman generator, used for both TLS and internal + * DH stuff. + */ +static void +crypto_set_dh_generator(void) +{ + BIGNUM *generator; + int r; + + if (dh_param_g) + return; + + generator = BN_new(); + tor_assert(generator); + + r = BN_set_word(generator, DH_GENERATOR); + tor_assert(r); + + dh_param_g = generator; +} + /** Set the global TLS Diffie-Hellman modulus. Use the Apache mod_ssl DH * modulus. */ void @@ -2120,6 +2186,8 @@ crypto_set_tls_dh_prime(void) tor_assert(tls_prime); dh_param_p_tls = tls_prime; + crypto_set_dh_generator(); + tor_assert(0 == crypto_validate_dh_params(dh_param_p_tls, dh_param_g)); } /** Initialize dh_param_p and dh_param_g if they are not already @@ -2127,18 +2195,13 @@ crypto_set_tls_dh_prime(void) static void init_dh_param(void) { - BIGNUM *circuit_dh_prime, *generator; + BIGNUM *circuit_dh_prime; int r; if (dh_param_p && dh_param_g) return; circuit_dh_prime = BN_new(); - generator = BN_new(); - tor_assert(circuit_dh_prime && generator); - - /* Set our generator for all DH parameters */ - r = BN_set_word(generator, DH_GENERATOR); - tor_assert(r); + tor_assert(circuit_dh_prime); /* This is from rfc2409, section 6.2. It's a safe prime, and supposedly it equals: @@ -2154,7 +2217,8 @@ init_dh_param(void) /* Set the new values as the global DH parameters. */ dh_param_p = circuit_dh_prime; - dh_param_g = generator; + crypto_set_dh_generator(); + tor_assert(0 == crypto_validate_dh_params(dh_param_p, dh_param_g)); if (!dh_param_p_tls) { crypto_set_tls_dh_prime(); diff --git a/src/common/crypto.h b/src/common/crypto.h index fa2ed610c7..74b88bcd4a 100644 --- a/src/common/crypto.h +++ b/src/common/crypto.h @@ -205,7 +205,7 @@ int crypto_cipher_encrypt(crypto_cipher_t *env, char *to, const char *from, size_t fromlen); int crypto_cipher_decrypt(crypto_cipher_t *env, char *to, const char *from, size_t fromlen); -int crypto_cipher_crypt_inplace(crypto_cipher_t *env, char *d, size_t len); +void crypto_cipher_crypt_inplace(crypto_cipher_t *env, char *d, size_t len); int crypto_cipher_encrypt_with_iv(const char *key, char *to, size_t tolen, diff --git a/src/common/torint.h b/src/common/torint.h index 418fe0fabf..480ba1a596 100644 --- a/src/common/torint.h +++ b/src/common/torint.h @@ -312,8 +312,6 @@ typedef uint32_t uintptr_t; #ifndef TIME_MAX -#ifdef TIME_T_IS_SIGNED - #if (SIZEOF_TIME_T == SIZEOF_INT) #define TIME_MAX ((time_t)INT_MAX) #elif (SIZEOF_TIME_T == SIZEOF_LONG) @@ -321,25 +319,13 @@ typedef uint32_t uintptr_t; #elif (SIZEOF_TIME_T == 8) #define TIME_MAX ((time_t)INT64_MAX) #else -#error "Can't define (signed) TIME_MAX" +#error "Can't define TIME_MAX" #endif -#else -/* Unsigned case */ -#if (SIZEOF_TIME_T == 4) -#define TIME_MAX ((time_t)UINT32_MAX) -#elif (SIZEOF_TIME_T == 8) -#define TIME_MAX ((time_t)UINT64_MAX) -#else -#error "Can't define (unsigned) TIME_MAX" -#endif -#endif /* time_t_is_signed */ #endif /* ifndef(TIME_MAX) */ #ifndef TIME_MIN -#ifdef TIME_T_IS_SIGNED - #if (SIZEOF_TIME_T == SIZEOF_INT) #define TIME_MIN ((time_t)INT_MIN) #elif (SIZEOF_TIME_T == SIZEOF_LONG) @@ -347,19 +333,9 @@ typedef uint32_t uintptr_t; #elif (SIZEOF_TIME_T == 8) #define TIME_MIN ((time_t)INT64_MIN) #else -#error "Can't define (signed) TIME_MIN" +#error "Can't define TIME_MIN" #endif -#else -/* Unsigned case */ -#if (SIZEOF_TIME_T == 4) -#define TIME_MIN ((time_t)UINT32_MIN) -#elif (SIZEOF_TIME_T == 8) -#define TIME_MIN ((time_t)UINT64_MIN) -#else -#error "Can't define (unsigned) TIME_MIN" -#endif -#endif /* time_t_is_signed */ #endif /* ifndef(TIME_MIN) */ #ifndef SIZE_MAX diff --git a/src/common/util.h b/src/common/util.h index 165bc0dcb3..d05ffa7d10 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -45,9 +45,10 @@ #error "Sorry; we don't support building with NDEBUG." #endif -/* Don't use assertions during coverage. It leads to tons of unreached - * branches which in reality are only assertions we didn't hit. */ -#ifdef TOR_COVERAGE +/* Sometimes we don't want to use assertions during branch coverage tests; it + * leads to tons of unreached branches which in reality are only assertions we + * didn't hit. */ +#if defined(TOR_UNIT_TESTS) && defined(DISABLE_ASSERTS_IN_UNIT_TESTS) #define tor_assert(a) STMT_BEGIN \ (void)(a); \ STMT_END diff --git a/src/config/geoip b/src/config/geoip index 16f1ada2c9..41070eddc5 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -1,4 +1,4 @@ -# Last updated based on January 5 2016 Maxmind GeoLite2 Country +# Last updated based on February 2 2016 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 @@ -221,7 +221,9 @@ 84471808,84473855,IQ 84475904,84498681,DE 84498682,84498682,NL -84498683,84545535,DE +84498683,84517997,DE +84517998,84517998,NL +84517999,84545535,DE 84545536,84549631,GB 84549632,84551679,GE 84551680,84557823,DE @@ -265,6 +267,7 @@ 85387264,85389311,SE 85389312,85391359,DE 85391360,85393407,NL +85394432,85394439,IT 85395456,85395711,TR 85395968,85396223,BE 85396480,85397503,ES @@ -723,15 +726,18 @@ 87969792,87972863,IM 87972864,87973375,GI 87973376,87973887,IM -87973888,87982079,DE +87973888,87981567,DE +87981568,87982079,TR 87982080,87988479,RU 87988480,87988735,US 87988736,87988863,LV -87988864,87989247,RU +87988864,87988991,LT +87988992,87989247,RU 87989248,87989503,US 87989504,87989759,FR 87989760,87990015,US -87990016,88014847,RU +87990016,87990271,DE +87990272,88014847,RU 88014848,88016895,LY 88016896,88018943,IR 88018944,88020991,GB @@ -845,6 +851,7 @@ 90718208,90718719,DE 90718720,90719231,FR 90719232,90719487,AT +90719488,90719999,SE 90720000,90720255,GB 90720256,90722303,IQ 90722304,90724351,FI @@ -864,7 +871,9 @@ 90757120,90759167,AT 90759168,90761215,NL 90761216,90763263,KZ -90763264,90764287,IL +90763264,90763519,IL +90763520,90763775,US +90763776,90764287,IL 90764288,90764799,US 90764800,90765311,IL 90765312,90767359,PL @@ -1835,7 +1844,9 @@ 100532224,100548863,RO 100548864,100548875,TR 100548876,100548876,RO -100548877,100549119,TR +100548877,100549038,TR +100549039,100549039,RO +100549040,100549119,TR 100549120,100559255,RO 100559256,100559263,EG 100559264,100559551,RO @@ -2026,6 +2037,12 @@ 234952704,234953727,CN 234953728,234954751,SG 234954752,234971135,NZ +234971136,234972159,CN +234972160,234973183,BD +234973184,234974207,PK +234974208,234975231,CN +234975232,234976255,SG +234976256,234979327,IN 234979328,235012095,MY 235012096,235077631,AU 235077632,235143167,JP @@ -2045,6 +2062,14 @@ 241602560,241604607,MY 241604608,241605631,ID 241605632,241606655,CN +241606656,241607679,IN +241607680,241608703,JP +241608704,241609727,PH +241609728,241610751,PK +241610752,241611775,JP +241611776,241612799,CN +241612800,241613823,HK +241613824,241614847,IN 241614848,241623039,JP 241623040,241627135,IN 241627136,241631231,HK @@ -2067,13 +2092,19 @@ 243990528,244318207,IN 244318208,245366783,CN 245366784,247463935,VN +247463936,247464959,IN +247464960,247465983,CN +247465984,247467007,HK +247467008,247469055,IN +247469056,247470079,HK +247470080,247472127,IN 247472128,247476223,JP 247479296,247480319,CN 247480320,247482367,MY 247482368,247483391,PG 247483392,247484415,CN 247484416,247488511,KR -247488512,247496703,JP +247488512,247496703,HK 247496704,247504895,PK 247504896,247508991,AU 247508992,247513087,US @@ -2149,7 +2180,8 @@ 288227328,289652735,US 289652736,289653759,NL 289653760,289654271,DE -289654272,289655807,US +289654272,289654783,US +289654784,289655807,CZ 289655808,289656831,DE 289656832,289657855,BE 289657856,289658879,AE @@ -2165,7 +2197,8 @@ 289794048,289795071,US 289795072,289796095,GB 289796096,289798143,TR -289798144,289948927,US +289798144,289800191,SA +289800192,289948927,US 289948928,289949055,AT 289949056,289949183,US 289949184,289949695,RU @@ -2231,7 +2264,16 @@ 290377728,290379775,GB 290379776,290423807,US 290423808,290424831,SE -290424832,344195839,US +290424832,300646399,US +300646400,300650495,JP +300650496,300654591,SG +300654592,300658687,US +300658688,300662783,AU +300662784,300666879,GB +300666880,300670975,NL +300670976,300675071,IE +300675072,300679167,IL +300679168,344195839,US 344195840,344196095,CA 344196096,344260607,US 344260608,344260863,GB @@ -2870,7 +2912,9 @@ 400912128,400912383,SG 400912384,401114367,US 401114368,401114623,DE -401114624,401125119,US +401114624,401115903,US +401115904,401116159,GB +401116160,401125119,US 401125120,401125375,DE 401125376,401129727,US 401129728,401129983,FR @@ -2889,7 +2933,7 @@ 401144576,401144831,MA 401144832,401145087,OM 401145088,401145343,CO -401145344,401145599,SC +401145344,401145599,GB 401145600,401145855,YE 401145856,401211391,CA 401211392,401232375,US @@ -2916,7 +2960,9 @@ 402098176,402098431,BN 402098432,402098687,BH 402098688,402098943,AW -402098944,402105087,US +402098944,402099711,US +402099712,402099967,GB +402099968,402105087,US 402105088,402105343,GB 402105344,402107391,US 402107392,402107647,IT @@ -3148,6 +3194,9 @@ 452997120,453001215,IN 453001216,453009407,AU 453009408,453017599,BD +453017600,453019647,CN +453019648,453023743,IN +453023744,453024767,TW 453050368,453115903,KR 453115904,453246975,VN 453246976,453509119,IN @@ -3157,7 +3206,11 @@ 455215360,455215615,RU 455215616,455245823,NP 455245824,455258111,JP -455258112,455262207,SG +455258112,455258623,SG +455258624,455258688,KH +455258689,455260672,SG +455260673,455260736,KH +455260737,455262207,SG 455262208,455270399,JP 455270400,455272447,AU 455272448,455274495,CN @@ -3321,8 +3374,8 @@ 460983296,460984319,HK 460984320,460988415,PG 460988416,460994559,JP -460994560,460995327,MY -460995328,460995583,SG +460994560,460995071,MY +460995072,460995583,SG 460995584,460996607,IN 460996608,461008895,JP 461008896,461012991,AU @@ -3337,7 +3390,9 @@ 461058048,461062143,HK 461062144,461078527,IN 461078528,461094911,FJ -461094912,461096959,HK +461094912,461095423,HK +461095424,461095935,SG +461095936,461096959,HK 461096960,461099007,TW 461099008,461100031,JP 461100032,461101055,MN @@ -3430,7 +3485,25 @@ 520339456,520343551,UA 520343552,520355839,GB 520355840,520421375,ES -520421376,520486911,BE +520421376,520422222,BE +520422223,520422223,RO +520422224,520423935,BE +520423936,520424191,RO +520424192,520425983,BE +520425984,520426239,RO +520426240,520427007,BE +520427008,520427263,RO +520427264,520428799,BE +520428800,520429055,RO +520429056,520429567,BE +520429568,520429823,RO +520429824,520431103,BE +520431104,520431359,RO +520431360,520432895,BE +520432896,520433151,RO +520433152,520433663,BE +520433664,520433919,RO +520433920,520486911,BE 520486912,520488959,NL 520488960,520489983,IT 520489984,520490495,RU @@ -3536,7 +3609,7 @@ 520978432,520980479,RU 520980480,520982527,IT 520982528,520984575,RU -520984576,520986623,NG +520984576,520986623,GB 520986624,520988671,PS 520988672,520990719,DE 520990720,520992767,RU @@ -3612,8 +3685,7 @@ 521563136,521564159,NL 521564160,521565183,GR 521565184,521565439,GB -521565440,521565695,US -521565696,521566207,GR +521565440,521566207,GR 521566208,521568255,LU 521568256,521601023,PT 521601024,521666559,RU @@ -3649,7 +3721,9 @@ 521717760,521718783,IQ 521718784,521719807,IR 521719808,521721855,UA -521721856,521725951,GB +521721856,521724159,GB +521724160,521724415,AU +521724416,521725951,GB 521725952,521727999,IR 521728000,521732095,FR 521732096,521736191,GB @@ -3746,7 +3820,9 @@ 522840064,522842111,PL 522842112,522846207,RU 522846208,522854399,PL -522854400,522858495,RU +522854400,522858438,RU +522858439,522858439,MD +522858440,522858495,RU 522858496,522866687,UA 522866688,522870783,LV 522870784,522874879,RU @@ -4272,7 +4348,9 @@ 533858752,533858815,AT 533858816,533858895,TR 533858896,533858903,AT -533858904,533859647,TR +533858904,533859071,TR +533859072,533859087,AT +533859088,533859647,TR 533859648,533859663,AT 533859664,533860351,TR 533862400,533864447,GB @@ -4574,7 +4652,9 @@ 621330432,621346815,PL 621346816,621355007,RU 621355008,621357055,UA -621357056,621361151,RU +621357056,621358079,RU +621358080,621358591,US +621358592,621361151,RU 621361152,621363199,GB 621363200,621381631,RU 621381632,621383679,FR @@ -4688,7 +4768,9 @@ 622518272,622518527,GB 622518528,622519281,NL 622519282,622519282,GB -622519283,622520319,NL +622519283,622519351,NL +622519352,622519359,FR +622519360,622520319,NL 622520320,622522367,RU 622522368,622524415,FR 622524416,622526463,ES @@ -5412,7 +5494,7 @@ 630999680,631001087,RO 631001088,631005183,MD 631005184,631006207,IT -631006208,631007231,MD +631006208,631007231,IR 631007232,631007487,KR 631007488,631007743,RO 631007744,631007871,GB @@ -5436,7 +5518,8 @@ 631036160,631036415,RO 631036416,631036543,GB 631036544,631039999,RO -631040000,631043071,MD +631040000,631042047,IR +631042048,631043071,MD 631043072,631043839,RO 631043840,631045119,MD 631045120,631046143,RO @@ -5659,7 +5742,9 @@ 635856896,635858943,TR 635858944,635860991,RU 635860992,635863039,BE -635863040,635893503,RU +635863040,635864831,RU +635864832,635865087,NL +635865088,635893503,RU 635893504,635893759,AZ 635893760,635894527,RU 635894528,635894783,KZ @@ -5996,7 +6081,9 @@ 645225472,645225727,CA 645225728,645229311,US 645229312,645229823,CA -645229824,645483263,US +645229824,645481405,US +645481406,645481406,CA +645481407,645483263,US 645483264,645483519,CA 645483520,645484543,US 645484544,645485055,CA @@ -7148,10 +7235,13 @@ 736432128,736433151,CN 736433152,736434175,ID 736434176,736435199,IN +736435200,736436223,HK 736436224,736437247,JP +736437248,736438271,HK 736438272,736439295,CN 736439296,736440319,TH 736440320,736441343,CN +736441344,736442367,HK 736442368,736443391,CN 736443392,736445439,AU 736446464,736447487,IN @@ -7187,7 +7277,11 @@ 736494592,736495103,ID 736495104,736495359,NR 736495360,736495615,ID -736495616,736498687,HK +736495616,736495871,HK +736495872,736496127,KR +736496128,736496383,JP +736496384,736496639,PH +736496640,736498687,HK 736498688,736499711,CN 736499712,736500479,SG 736500480,736500735,TH @@ -7300,7 +7394,8 @@ 737142784,737143039,HK 737143040,737143807,MY 737143808,737146879,IN -737146880,737147903,NZ +737146880,737147519,US +737147520,737147903,NZ 737147904,737148927,MY 737148928,737149951,CN 737149952,737151999,IN @@ -7362,7 +7457,7 @@ 737257472,737262591,CN 737262592,737263615,AU 737263616,737264639,IN -737264640,737265663,CN +737264640,737265663,HK 737265664,737266687,AU 737266688,737267711,HK 737267712,737276927,CN @@ -7406,7 +7501,9 @@ 737351680,737352703,CN 737352704,737354751,HK 737354752,737355775,IN -737355776,737359871,HK +737355776,737356287,HK +737356288,737356799,GB +737356800,737359871,HK 737359872,737361919,NZ 737361920,737364991,HK 737364992,737368063,IN @@ -7726,7 +7823,6 @@ 737918976,737919999,CN 737920000,737921023,HK 737921024,737922047,AU -737922048,737923071,KR 737923072,737924095,MY 737924096,737927167,IN 737927168,737929215,HK @@ -7888,11 +7984,15 @@ 755105792,755179519,CA 755179520,755236863,US 756023296,757071871,US -757071872,757088255,NL +757071872,757073919,NL +757073920,757073920,JP +757073921,757088255,NL 757088256,757090303,US 757090304,757104639,NL 757104640,757106687,US -757106688,757121535,NL +757106688,757118796,NL +757118797,757118797,GB +757118798,757121535,NL 757121536,757121791,US 757121792,757122047,NL 757122048,757122303,US @@ -8318,7 +8418,8 @@ 762397696,762398719,HK 762398720,762399743,CN 762399744,762400767,IN -762400768,762401791,HK +762400768,762401023,HK +762401024,762401791,US 762401792,762402815,TH 762402816,762403839,IN 762403840,762404863,AU @@ -8326,12 +8427,11 @@ 762407936,762408959,CN 762408960,762409983,HK 762409984,762411007,JP -762411008,762411263,IN -762411264,762411519,HK -762411520,762412031,IN +762411008,762411519,HK +762411520,762411775,IN +762411776,762412031,HK 762412032,762413055,PK 762413056,762414079,HK -762414080,762415103,JP 762415104,762416127,IN 762416128,762417151,HK 762417152,762419199,CN @@ -8373,10 +8473,11 @@ 762470400,762471423,CN 762471424,762472447,MY 762472448,762473471,CN -762473472,762475519,JP +762474496,762475519,JP 762475520,762475775,AU 762475776,762476031,SG -762476032,762476543,ID +762476032,762476287,ID +762476288,762476543,SG 762476544,762478591,PK 762478592,762479615,KR 762479616,762480639,PK @@ -8647,7 +8748,7 @@ 762900480,762901503,CN 762901504,762902527,ID 762902528,762909695,IN -762909696,762910719,CN +762909696,762910719,HK 762910720,762911743,VN 762911744,762912767,IN 762912768,762913791,HK @@ -8913,7 +9014,11 @@ 772286720,772286975,LB 772286976,772296703,RU 772296704,772300799,UA -772300800,772341759,RU +772300800,772339967,RU +772339968,772340223,NL +772340224,772341247,RU +772341248,772341503,US +772341504,772341759,RU 772341760,772407295,NO 772407296,772472831,BG 772472832,772538367,MT @@ -9110,7 +9215,7 @@ 773211136,773211391,FR 773211392,773211647,US 773211648,773211903,NL -773211904,773212159,US +773211904,773212159,SG 773212160,773212671,NL 773212672,773213183,GB 773213184,773214207,US @@ -9288,7 +9393,9 @@ 773935353,773935353,US 773935354,773935728,FR 773935729,773935729,GB -773935730,773937663,FR +773935730,773936145,FR +773936146,773936146,US +773936147,773937663,FR 773937664,773937664,DE 773937665,773937673,FR 773937674,773937674,IE @@ -9559,8 +9666,8 @@ 778304306,778304306,SI 778304307,778305535,AL 778305536,778371071,IR -778371072,778399743,GB -778399744,778436607,DE +778371072,778395647,GB +778395648,778436607,DE 778436608,778461183,RO 778461184,778461439,TR 778461440,778462207,EE @@ -9595,7 +9702,9 @@ 778567680,778633215,TR 778633216,778640127,FR 778640128,778640383,GB -778640384,778666259,FR +778640384,778657399,FR +778657400,778657403,PT +778657404,778666259,FR 778666260,778666263,ES 778666264,778666479,FR 778666480,778666495,DE @@ -10284,6 +10393,7 @@ 787192064,787192319,FR 787192384,787192447,DE 787192576,787192831,SE +787192832,787193087,AE 787193088,787193343,FI 787193344,787193599,DE 787193856,787195903,RU @@ -10539,7 +10649,9 @@ 794558464,796917759,CN 796917760,797873663,CA 797873664,797873919,US -797873920,805306367,CA +797873920,802160639,CA +802160640,803209215,US +803209216,805306367,CA 805306368,822083583,US 822083584,822084607,ID 822084608,822085631,BD @@ -10610,7 +10722,8 @@ 831519744,831520767,IN 831520768,832045055,PH 832045056,832307199,CN -832307200,832311295,JP +832307200,832308223,PK +832308224,832311295,JP 832311296,832312319,AU 832312320,832313343,ID 832313344,832315391,AU @@ -10673,7 +10786,9 @@ 839112192,839112447,CA 839112448,839340031,US 839340032,839341055,ES -839341056,839342079,US +839341056,839341311,US +839341312,839341567,DE +839341568,839342079,US 839342080,839343103,DE 839343104,839344127,NL 839344128,839348223,US @@ -10756,7 +10871,9 @@ 872288872,872288875,DE 872288876,872290111,FR 872290112,872290143,ES -872290144,872300031,FR +872290144,872291151,FR +872291152,872291167,FI +872291168,872300031,FR 872300032,872300063,ES 872300064,872300649,FR 872300650,872300650,PT @@ -10791,7 +10908,9 @@ 872364864,872364927,NL 872364928,872374608,FR 872374609,872374618,ES -872374619,872377297,FR +872374619,872375295,FR +872375296,872375423,NL +872375424,872377297,FR 872377298,872377299,ES 872377300,872380607,FR 872380608,872380671,ES @@ -10799,7 +10918,9 @@ 872384096,872384127,ES 872384128,872388415,FR 872388416,872388447,ES -872388448,872415231,FR +872388448,872403606,FR +872403607,872403607,PT +872403608,872415231,FR 872415232,873463807,US 873463808,873646466,IE 873646467,873646467,US @@ -10835,13 +10956,16 @@ 878460928,878461951,BR 878461952,878462975,DE 878462976,878463999,BR -878464000,878576895,US +878464000,878512127,US +878512128,878513151,SG +878513152,878576895,US 878576896,878577151,IE -878577152,878577663,KR -878577664,878577919,BR -878577920,878578175,JP -878578176,878578687,US -878578688,878578943,SG +878577152,878577407,KR +878577408,878577663,BR +878577664,878577919,JP +878577920,878578431,US +878578432,878578687,SG +878578688,878578943,US 878578944,878579199,AU 878579200,878648831,US 878648832,878649343,JP @@ -11372,6 +11496,12 @@ 999817216,999821311,BD 999821312,999827455,CN 999827456,999828479,IN +999828480,999828735,HK +999828736,999828991,PH +999828992,999829503,MY +999829504,999830527,HK +999830528,999832575,IN +999832576,999833599,BD 999833600,999837695,CN 999837696,999838719,IN 999839744,999845887,BD @@ -12195,6 +12325,10 @@ 1047658496,1047724031,EG 1047728128,1047732223,SE 1047740544,1047740671,DE +1047758911,1047758911,CZ +1047759119,1047759119,AT +1047759125,1047759125,AT +1047759834,1047759834,CZ 1047781856,1047781871,DE 1047782690,1047782690,GB 1047787520,1047787775,ES @@ -12299,7 +12433,11 @@ 1049378816,1049395199,EG 1049395200,1049411583,NL 1049411584,1049419775,GB -1049419776,1049427967,RU +1049419776,1049423615,RU +1049423616,1049423856,UA +1049423857,1049423857,RU +1049423858,1049423871,UA +1049423872,1049427967,RU 1049427968,1049436159,CZ 1049436160,1049444351,DE 1049444352,1049460735,RU @@ -13771,7 +13909,9 @@ 1086042112,1086046207,CA 1086046208,1086050815,US 1086050816,1086051327,CA -1086051328,1086421503,US +1086051328,1086267391,US +1086267392,1086271487,CA +1086271488,1086421503,US 1086421504,1086422015,MP 1086422016,1086922751,US 1086922752,1086930943,CA @@ -13835,7 +13975,9 @@ 1087726016,1087726047,FR 1087726048,1087735743,US 1087735744,1087735807,CA -1087735808,1087758335,US +1087735808,1087743569,US +1087743570,1087743570,GB +1087743571,1087758335,US 1087758336,1087766527,PR 1087766528,1087783423,US 1087783424,1087783679,ZA @@ -14888,7 +15030,9 @@ 1123589888,1123590143,US 1123590144,1123598335,VI 1123598336,1123598591,CA -1123598592,1123635639,US +1123598592,1123635626,US +1123635627,1123635627,PL +1123635628,1123635639,US 1123635640,1123635640,RU 1123635641,1123635660,US 1123635661,1123635661,RU @@ -15368,9 +15512,7 @@ 1160425472,1160429567,CA 1160429568,1160486911,US 1160486912,1160487423,AU -1160487424,1160505343,US -1160505344,1160505855,AU -1160505856,1160547839,US +1160487424,1160547839,US 1160547840,1160548351,MX 1160548352,1160563199,US 1160563200,1160563711,MP @@ -15553,17 +15695,13 @@ 1162883840,1162884863,BB 1162884864,1162885887,VC 1162885888,1162887167,BB -1162887168,1163398655,US -1163398656,1163398911,BD -1163398912,1163400959,US +1162887168,1163399167,US +1163399168,1163399423,WS +1163399424,1163400959,US 1163400960,1163401215,BD 1163401216,1163401471,US 1163401472,1163401727,ID -1163401728,1163401983,US -1163401984,1163402239,BD -1163402240,1163402495,US -1163402496,1163402751,BD -1163402752,1163407359,US +1163401728,1163407359,US 1163407360,1163411455,CA 1163411456,1163468799,US 1163468800,1163469055,PR @@ -16215,7 +16353,11 @@ 1246937088,1246945279,CA 1246945280,1247073023,US 1247073024,1247073279,CA -1247073280,1247490047,US +1247073280,1247101439,US +1247101440,1247101695,CA +1247101696,1247129599,US +1247129600,1247133695,NL +1247133696,1247490047,US 1247494144,1248864255,US 1248864256,1248866303,CA 1248866304,1248879615,US @@ -16235,9 +16377,7 @@ 1248936960,1248939007,CA 1248939008,1248946175,US 1248946176,1248947199,VG -1248947200,1248956415,US -1248956416,1248957439,CA -1248957440,1248958463,US +1248947200,1248958463,US 1248958464,1248959487,CA 1248959488,1248964607,US 1248964608,1248966655,CA @@ -16718,7 +16858,11 @@ 1296249024,1296249087,GB 1296249088,1296249279,FR 1296249280,1296249343,DE -1296249344,1296249567,FR +1296249344,1296249407,FR +1296249408,1296249423,GB +1296249424,1296249463,FR +1296249464,1296249471,GB +1296249472,1296249567,FR 1296249568,1296249599,NO 1296249600,1296249615,GB 1296249616,1296250367,FR @@ -17124,7 +17268,9 @@ 1299019776,1299020031,NL 1299020032,1299021055,BE 1299021056,1299021823,NL -1299021824,1299026111,CH +1299021824,1299025148,CH +1299025149,1299025149,DE +1299025150,1299026111,CH 1299026112,1299026127,ES 1299026128,1299038207,CH 1299038208,1299054591,FI @@ -17318,12 +17464,28 @@ 1307807744,1307811839,SE 1307811840,1307815935,NL 1307816192,1307816447,GB -1307817216,1307817471,DE +1307816960,1307817215,NL +1307817216,1307817219,DE +1307817220,1307817223,CZ +1307817224,1307817231,DE +1307817232,1307817251,CZ +1307817252,1307817255,HU +1307817256,1307817259,CZ +1307817260,1307817471,DE +1307817728,1307817983,DE 1307817984,1307818048,GB 1307818049,1307818049,BE 1307818050,1307818239,GB 1307819008,1307819263,GB -1307819264,1307819519,NL +1307819264,1307819287,NL +1307819288,1307819331,DE +1307819332,1307819343,NL +1307819344,1307819355,DE +1307819356,1307819395,NL +1307819396,1307819399,DE +1307819400,1307819407,NL +1307819408,1307819431,DE +1307819432,1307819519,NL 1307819520,1307819775,GB 1307820032,1307824127,PT 1307824128,1307828223,HU @@ -17891,11 +18053,7 @@ 1331931136,1331933183,SE 1331933184,1331935231,TR 1331935232,1331937279,NL -1331937280,1331938063,NG -1331938064,1331938079,GB -1331938080,1331938431,NG -1331938432,1331938559,GB -1331938560,1331939327,NG +1331937280,1331939327,GB 1331939328,1331941375,BE 1331941376,1331943423,ES 1331943424,1331945471,RU @@ -17959,7 +18117,9 @@ 1334108160,1334116351,BE 1334116352,1334124543,AX 1334124544,1334125823,DE -1334125824,1334126591,ES +1334125824,1334125915,ES +1334125916,1334125916,DE +1334125917,1334126591,ES 1334126592,1334127359,DE 1334127360,1334127615,AT 1334127616,1334130687,DE @@ -18054,10 +18214,9 @@ 1334710272,1334714367,RU 1334714368,1334718463,DE 1334718464,1334722559,KZ -1334722560,1334723583,NL -1334723584,1334723839,BE +1334722560,1334723839,NL 1334723840,1334724095,DK -1334724096,1334724351,NO +1334724096,1334724351,NL 1334724352,1334724607,SE 1334724608,1334724863,US 1334724864,1334725631,NL @@ -18446,7 +18605,9 @@ 1347149568,1347149823,IN 1347149824,1347151423,HU 1347151424,1347158015,AT -1347158016,1347162111,CH +1347158016,1347159935,CH +1347159936,1347160063,AT +1347160064,1347162111,CH 1347162112,1347166207,IT 1347166208,1347174399,GR 1347174400,1347182591,IT @@ -18924,6 +19085,7 @@ 1348190208,1348194303,RU 1348194304,1348198399,GR 1348198400,1348202495,NO +1348205258,1348205258,DE 1348206592,1348218879,RU 1348218880,1348222975,DE 1348222976,1348231167,LU @@ -19125,6 +19287,7 @@ 1357324296,1357324319,PL 1357324320,1357325311,GB 1357326336,1357326337,ES +1357326338,1357326339,SL 1357326848,1357327103,GB 1357327360,1357327615,FR 1357328384,1357328671,GB @@ -19170,7 +19333,8 @@ 1357373536,1357373539,ES 1357373540,1357373543,PT 1357373544,1357373555,GB -1357373560,1357375199,GB +1357373560,1357375207,GB +1357375232,1357375295,GB 1357377536,1357377679,FR 1357377696,1357378623,FR 1357381632,1357414399,NO @@ -19286,8 +19450,8 @@ 1358036992,1358041087,IR 1358041088,1358045183,FI 1358045184,1358049279,SK -1358049280,1358062591,RU -1358062592,1358065663,UA +1358049280,1358064639,RU +1358064640,1358065663,UA 1358065664,1358069759,BA 1358069760,1358086143,DE 1358086144,1358090239,CH @@ -19649,7 +19813,9 @@ 1360282496,1360282623,DE 1360282624,1360284671,NL 1360284672,1360284927,DK -1360284928,1360285695,NL +1360284928,1360285183,NL +1360285184,1360285247,ES +1360285248,1360285695,NL 1360285696,1360289791,DE 1360289792,1360293887,RU 1360293888,1360302079,DE @@ -20536,7 +20702,9 @@ 1385267200,1385275391,SE 1385275392,1385283583,IT 1385283584,1385286143,DE -1385286144,1385290631,GB +1385286144,1385290288,GB +1385290289,1385290289,RE +1385290290,1385290631,GB 1385290632,1385290632,IS 1385290633,1385291343,GB 1385291344,1385291344,IS @@ -20600,7 +20768,21 @@ 1386438400,1386438655,FR 1386438656,1386448895,GB 1386448896,1386449151,IL -1386449152,1386449407,NL +1386449152,1386449343,NL +1386449344,1386449347,GB +1386449348,1386449359,NL +1386449360,1386449363,GB +1386449364,1386449367,BE +1386449368,1386449371,AU +1386449372,1386449375,AT +1386449376,1386449379,NL +1386449380,1386449383,CH +1386449384,1386449387,FR +1386449388,1386449391,NL +1386449392,1386449395,ES +1386449396,1386449399,PT +1386449400,1386449403,RU +1386449404,1386449407,DE 1386449408,1386450943,IL 1386450944,1386479615,GB 1386479616,1386545151,NO @@ -20685,7 +20867,9 @@ 1388681216,1388683263,DE 1388683264,1388683903,CH 1388683904,1388683919,DE -1388683920,1388685599,CH +1388683920,1388684080,CH +1388684081,1388684081,AT +1388684082,1388685599,CH 1388685600,1388685631,GB 1388685632,1388688127,CH 1388688128,1388688159,NL @@ -20765,9 +20949,13 @@ 1389199872,1389200159,US 1389200160,1389218815,AE 1389218816,1389219839,AF -1389219840,1389228415,AE +1389219840,1389223935,AE +1389223936,1389224191,DE +1389224192,1389228415,AE 1389228416,1389228479,LB -1389228480,1389232127,AE +1389228480,1389231359,AE +1389231360,1389231615,DE +1389231616,1389232127,AE 1389232128,1389264895,DE 1389264896,1389265151,TZ 1389265152,1389266943,GB @@ -20791,7 +20979,8 @@ 1389445120,1389461503,RU 1389461504,1389477887,SE 1389477888,1389494271,BY -1389494272,1389510655,DE +1389494272,1389494527,RO +1389494528,1389510655,DE 1389510656,1389527039,NL 1389527040,1389543423,RO 1389543424,1389576191,DE @@ -20822,7 +21011,9 @@ 1389789184,1389805567,PL 1389805568,1389806591,DE 1389806592,1389806847,SA -1389806848,1389817855,DE +1389806848,1389817603,DE +1389817604,1389817604,NO +1389817605,1389817855,DE 1389817856,1389819903,GB 1389819904,1389821951,DE 1389821952,1389838335,NL @@ -21050,6 +21241,13 @@ 1401939968,1401942015,UA 1401942016,1401942047,CZ 1401942528,1401943039,GB +1401943048,1401943055,IT +1401943056,1401943063,ES +1401943064,1401943067,NL +1401943072,1401943079,HU +1401943080,1401943087,FR +1401943096,1401943103,DE +1401943104,1401943111,HU 1401943552,1401943807,US 1401944064,1401946111,BG 1401946112,1401962495,FR @@ -21164,9 +21362,9 @@ 1404043264,1404051455,EE 1404051456,1404059647,HR 1404059648,1404076031,NO -1404076032,1404077055,SE -1404077056,1404081151,LV -1404081152,1404082175,SE +1404076032,1404076543,SE +1404076544,1404081663,LV +1404081664,1404082175,SE 1404082176,1404083199,DE 1404083200,1404084223,SE 1404084224,1404092415,NO @@ -21202,11 +21400,14 @@ 1404215296,1404219391,LV 1404219392,1404220415,SE 1404220416,1404221439,EE -1404221440,1404227583,SE -1404227584,1404231679,LV +1404221440,1404222463,SE +1404222464,1404222975,LV +1404222976,1404227071,SE +1404227072,1404231679,LV 1404231680,1404232191,SE 1404232192,1404232703,NO -1404232704,1404234751,SE +1404232704,1404233215,LV +1404233216,1404234751,SE 1404234752,1404239871,HR 1404239872,1404305407,SE 1404305408,1404313599,EE @@ -21246,8 +21447,8 @@ 1404780544,1404788735,SE 1404788736,1404796927,NL 1404796928,1404801023,EE -1404801024,1404803583,SE -1404803584,1404804095,LV +1404801024,1404803071,SE +1404803072,1404804095,LV 1404804096,1404805119,SE 1404805120,1404813311,AT 1404813312,1404815871,EE @@ -21477,7 +21678,9 @@ 1407549440,1407582207,RU 1407582208,1407614975,PL 1407614976,1407680511,ES -1407680512,1407686119,GB +1407680512,1407681023,GB +1407681024,1407681087,ES +1407681088,1407686119,GB 1407686120,1407686123,CH 1407686124,1407686127,DE 1407686128,1407686131,FR @@ -21680,7 +21883,9 @@ 1411842048,1411850239,NL 1411850240,1411858431,FR 1411858432,1411870719,DE -1411871744,1411871999,GB +1411871744,1411871771,GB +1411871772,1411871775,FR +1411871776,1411871999,GB 1411872057,1411872057,GB 1411872160,1411872161,GB 1411872196,1411872199,GB @@ -21799,9 +22004,7 @@ 1416953856,1417019391,RO 1417019392,1417150463,DE 1417150464,1417674751,ES -1417674752,1420133375,DE -1420133376,1420133631,LU -1420133632,1421869055,DE +1417674752,1421869055,DE 1421869056,1422393343,BE 1422393344,1422413567,DE 1422413568,1422413695,AT @@ -22494,8 +22697,25 @@ 1439372032,1439372287,TR 1439372288,1439372543,IT 1439372544,1439372799,JP -1439372800,1439373055,MT -1439373056,1439373311,NL +1439372800,1439372815,MT +1439372816,1439372831,AD +1439372832,1439372847,CY +1439372848,1439372863,AM +1439372864,1439372879,BY +1439372880,1439372895,PK +1439372896,1439372911,CZ +1439372912,1439372927,GR +1439372928,1439372943,IS +1439372944,1439372959,IM +1439372960,1439372975,JE +1439372976,1439372991,XK +1439372992,1439373007,MK +1439373008,1439373008,MC +1439373009,1439373023,MT +1439373024,1439373039,ME +1439373040,1439373040,SC +1439373041,1439373055,MT +1439373056,1439373311,IT 1439373312,1439373567,AE 1439373568,1439374335,NL 1439374336,1439375359,IT @@ -22512,7 +22732,9 @@ 1439437824,1439438335,FR 1439438336,1439438847,RO 1439438848,1439439359,FR -1439439360,1439440383,RO +1439439360,1439439615,RO +1439439616,1439439871,PL +1439439872,1439440383,RO 1439440384,1439440895,IR 1439440896,1439441919,RO 1439441920,1439442943,ES @@ -22832,7 +23054,8 @@ 1449793280,1449793535,NL 1449793536,1449794047,IR 1449794048,1449794303,PH -1449794304,1449810943,RO +1449794304,1449810687,RO +1449810688,1449810943,PL 1449810944,1449811199,MD 1449811200,1449811455,BG 1449811456,1449811967,GB @@ -23248,7 +23471,9 @@ 1475724928,1475725183,RU 1475725184,1475725311,GB 1475725312,1475725439,RU -1475725440,1475728639,GB +1475725440,1475726591,GB +1475726592,1475726847,RU +1475726848,1475728639,GB 1475728640,1475728767,PL 1475728768,1475729407,GB 1475729408,1475729535,UA @@ -23820,7 +24045,7 @@ 1495333632,1495333887,RO 1495333888,1495335935,MD 1495335936,1495336447,RO -1495336448,1495336959,NL +1495336448,1495336959,GB 1495336960,1495339007,RO 1495339008,1495339263,DE 1495339264,1495339519,MD @@ -24051,13 +24276,17 @@ 1495688704,1495689215,IR 1495689216,1495700308,RO 1495700309,1495700309,GB -1495700310,1495723519,RO +1495700310,1495701247,RO +1495701248,1495701503,FR +1495701504,1495723519,RO 1495723520,1495724031,FR 1495724032,1495724543,RO 1495724544,1495725055,IR 1495725056,1495732223,RO 1495732224,1495734271,ES -1495734272,1495745791,RO +1495734272,1495736319,RO +1495736320,1495744511,ES +1495744512,1495745791,RO 1495745792,1495746047,GB 1495746048,1495747583,RO 1495747584,1495748607,MD @@ -24237,7 +24466,9 @@ 1496057856,1496058111,DE 1496058112,1496066815,RO 1496066816,1496067071,QA -1496067072,1496073983,RO +1496067072,1496072383,RO +1496072384,1496072447,ES +1496072448,1496073983,RO 1496073984,1496074239,ES 1496074240,1496078335,RO 1496078336,1496079359,MD @@ -24294,7 +24525,6 @@ 1496197120,1496197631,MD 1496197632,1496198143,RO 1496198144,1496198655,IR -1496198656,1496198911,RO 1496198912,1496199167,GB 1496199168,1496202239,RO 1496202240,1496202751,IR @@ -25005,7 +25235,11 @@ 1508753408,1508769791,KG 1508769792,1508786175,PL 1508786176,1508802559,DE -1508802560,1508818943,GB +1508802560,1508807231,GB +1508807232,1508807247,CZ +1508807248,1508811191,GB +1508811192,1508811195,NL +1508811196,1508818943,GB 1508818944,1508830719,RO 1508830720,1508831487,SK 1508831488,1508835327,RO @@ -25364,11 +25598,15 @@ 1514799104,1514930175,ES 1514930176,1515002367,FR 1515002368,1515002623,ES -1515002624,1515030783,FR +1515002624,1515009300,FR +1515009301,1515009301,ES +1515009302,1515030783,FR 1515030784,1515031039,ES 1515031040,1515035168,FR 1515035169,1515035169,ES -1515035170,1515051263,FR +1515035170,1515038971,FR +1515038972,1515038972,ES +1515038973,1515051263,FR 1515051264,1515051519,ES 1515051520,1515052989,FR 1515052990,1515052990,ES @@ -25436,7 +25674,8 @@ 1518635008,1518637055,NL 1518637056,1518641151,SE 1518641152,1518649343,NL -1518649344,1518723071,SE +1518649344,1518665727,SE +1518665728,1518723071,LV 1518723072,1518727167,EE 1518727168,1518731263,SE 1518731264,1518747647,DE @@ -25448,7 +25687,7 @@ 1518944256,1518960639,NL 1518960640,1518961663,LT 1518961664,1518962175,EE -1518962176,1518962687,SE +1518962176,1518962687,LV 1518962688,1518964735,NO 1518964736,1518966783,HR 1518966784,1518967807,SE @@ -25456,7 +25695,11 @@ 1518977024,1518985215,NL 1518985216,1518989311,SE 1518989312,1518993152,NL -1518993153,1519190015,SE +1518993153,1519058943,SE +1519058944,1519083519,LV +1519083520,1519091711,SE +1519091712,1519124479,LV +1519124480,1519190015,SE 1519190016,1519198207,NL 1519198208,1519200255,SE 1519200256,1519206399,EE @@ -26114,7 +26357,8 @@ 1539449856,1539450367,DK 1539450368,1539450879,SE 1539450880,1539451391,UA -1539451392,1539452415,RO +1539451392,1539451903,GB +1539451904,1539452415,RO 1539452416,1539452927,GB 1539452928,1539453439,CH 1539453440,1539453951,UA @@ -26591,7 +26835,6 @@ 1539756800,1539757055,BE 1539757056,1539757567,RU 1539757568,1539757823,SI -1539757824,1539758079,UA 1539758080,1539758335,HR 1539758336,1539758591,PL 1539758848,1539759103,BA @@ -27049,7 +27292,7 @@ 1540097024,1540099071,DE 1540099072,1540099583,UA 1540099584,1540099711,US -1540099712,1540099839,UA +1540099712,1540099839,DE 1540099840,1540103167,RU 1540103168,1540105215,DE 1540105216,1540106239,UA @@ -27976,7 +28219,6 @@ 1540650240,1540650495,CH 1540650496,1540650751,RU 1540650752,1540651007,FR -1540651008,1540651263,RO 1540651264,1540651519,CH 1540651520,1540651775,MK 1540652032,1540652543,UA @@ -31939,7 +32181,19 @@ 1551577088,1551580159,NL 1551604480,1551604735,SE 1551630336,1551892479,RU -1551892480,1555696895,FR +1551892480,1554514250,FR +1554514251,1554514251,RE +1554514252,1554971045,FR +1554971046,1554971046,ES +1554971047,1555073117,FR +1555073118,1555073118,ES +1555073119,1555073583,FR +1555073584,1555073584,ES +1555073585,1555108390,FR +1555108391,1555108391,ES +1555108392,1555111820,FR +1555111821,1555111821,ES +1555111822,1555696895,FR 1555696896,1555697151,ES 1555697152,1555739841,FR 1555739842,1555739842,ES @@ -31971,7 +32225,9 @@ 1558081176,1558081183,BE 1558081184,1558083775,FR 1558083776,1558083791,DE -1558083792,1558084655,FR +1558083792,1558083959,FR +1558083960,1558083963,CZ +1558083964,1558084655,FR 1558084656,1558084659,BE 1558084660,1558085055,FR 1558085056,1558085071,GB @@ -31989,7 +32245,9 @@ 1558102508,1558102508,DE 1558102509,1558103159,FR 1558103160,1558103167,GB -1558103168,1558112095,FR +1558103168,1558107391,FR +1558107392,1558107455,NL +1558107456,1558112095,FR 1558112096,1558112127,ES 1558112128,1558112191,FR 1558112192,1558112192,ES @@ -31997,13 +32255,17 @@ 1558112208,1558112208,ES 1558112209,1558112209,FR 1558112210,1558112211,ES -1558112212,1558118399,FR +1558112212,1558115327,FR +1558115328,1558115455,NL +1558115456,1558118399,FR 1558118400,1558119423,DE 1558119424,1558122495,RU 1558122496,1558123007,SG 1558123008,1558123519,RU 1558123520,1558125567,LU -1558125568,1558141439,AT +1558125568,1558126591,AT +1558126592,1558128639,RU +1558128640,1558141439,AT 1558141440,1558141695,CY 1558141696,1558147071,AT 1558147072,1558147327,LU @@ -32698,7 +32960,8 @@ 1571545856,1571546111,RU 1571546112,1571546879,CZ 1571546880,1571547135,RU -1571547136,1571549183,CZ +1571547136,1571548159,CZ +1571548160,1571549183,RU 1571549184,1571550207,UA 1571550208,1571550463,RU 1571550464,1571553279,UA @@ -32778,10 +33041,8 @@ 1572020224,1572028415,SE 1572028416,1572028927,GB 1572028928,1572029183,UA -1572029184,1572030156,GB -1572030157,1572030157,RU -1572030158,1572030463,GB -1572030464,1572034815,RU +1572029184,1572029951,GB +1572029952,1572034815,RU 1572034816,1572034943,BY 1572034944,1572035071,US 1572035072,1572035199,CZ @@ -32833,10 +33094,8 @@ 1572384768,1572388863,DE 1572388864,1572392959,DK 1572392960,1572393471,NL -1572393472,1572393727,US -1572393728,1572393983,GB -1572393984,1572394239,DE -1572394240,1572394495,US +1572393472,1572393983,GB +1572393984,1572394495,DE 1572394496,1572394751,FR 1572394752,1572395263,US 1572395264,1572395519,NL @@ -33187,7 +33446,8 @@ 1580015616,1580048383,UA 1580048384,1580064767,RU 1580064768,1580072959,GB -1580072960,1580083199,PT +1580072960,1580081151,PT +1580081152,1580083199,TR 1580083200,1580087565,US 1580087566,1580087566,SE 1580087567,1580089102,US @@ -33628,7 +33888,7 @@ 1588652160,1588654079,RO 1588654080,1588658175,DE 1588658176,1588659199,RO -1588659200,1588659711,NL +1588659200,1588659711,GB 1588659712,1588661247,RO 1588661248,1588661503,NL 1588661504,1588663807,RO @@ -33969,7 +34229,7 @@ 1596851200,1596851455,RU 1596851456,1596851711,CZ 1596851712,1596851967,UA -1596851968,1596852223,CZ +1596851968,1596852223,LV 1596852224,1596854271,UA 1596854272,1596858367,BY 1596858368,1596858879,CZ @@ -35235,7 +35495,6 @@ 1728427008,1728428031,MY 1728428032,1728430079,IN 1728430080,1728431103,CN -1728431104,1728431615,AF 1728431616,1728431871,HK 1728431872,1728432127,SG 1728432128,1728433151,IN @@ -35251,7 +35510,10 @@ 1728441344,1728442367,MY 1728442368,1728443391,SG 1728443392,1728444415,IN -1728444416,1728445439,JP +1728444416,1728444671,HK +1728444672,1728444927,JP +1728444928,1728445183,HK +1728445184,1728445439,JP 1728445440,1728446463,CN 1728446464,1728446975,ID 1728446976,1728447231,IN @@ -35271,7 +35533,8 @@ 1728458752,1728459775,HK 1728459776,1728460799,ID 1728460800,1728462847,JP -1728462848,1728463871,US +1728462848,1728463359,NZ +1728463360,1728463871,US 1728463872,1728464895,JP 1728464896,1728465919,KR 1728465920,1728466943,CN @@ -35291,7 +35554,8 @@ 1728476160,1728476415,AU 1728476416,1728476927,ID 1728476928,1728477183,IN -1728478208,1728480255,HK +1728478208,1728479231,JP +1728479232,1728480255,HK 1728480256,1728481279,IN 1728481280,1728483327,HK 1728483328,1728484351,NZ @@ -35445,7 +35709,9 @@ 1728618496,1728619519,MY 1728619520,1728620543,IN 1728620544,1728622591,AU -1728622592,1728624639,SG +1728622592,1728624439,SG +1728624440,1728624447,JP +1728624448,1728624639,SG 1728624640,1728625663,JP 1728625664,1728626175,IN 1728626176,1728626431,JP @@ -35562,7 +35828,6 @@ 1728736256,1728736511,HK 1728736512,1728736767,IN 1728736768,1728737023,ID -1728737024,1728737279,CN 1728737280,1728738303,JP 1728738304,1728739327,IN 1728739328,1728740351,ID @@ -35662,7 +35927,6 @@ 1728821760,1728822271,ID 1728822272,1728823295,SG 1728823296,1728824319,MN -1728824320,1728825343,JP 1728825344,1728826367,SG 1728826368,1728827391,AU 1728827392,1728828415,JP @@ -36155,7 +36419,9 @@ 1729274880,1729276927,IN 1729276928,1729277951,BN 1729277952,1729278975,VN -1729280000,1729281023,HK +1729278976,1729279231,BD +1729279232,1729279487,ID +1729279488,1729281023,HK 1729281024,1729281535,AU 1729281536,1729282047,ID 1729282048,1729283071,CN @@ -36352,13 +36618,11 @@ 1729476608,1729477631,IN 1729477632,1729478655,AU 1729478912,1729479423,NZ -1729479424,1729479679,IN 1729479680,1729480703,TW 1729480704,1729481727,KR 1729481728,1729482751,ID 1729482752,1729483775,CN 1729483776,1729485823,ID -1729485824,1729486847,HK 1729486848,1729488383,ID 1729488384,1729488895,SB 1729488896,1729490943,IN @@ -36456,6 +36720,7 @@ 1729601536,1729603583,CN 1729603584,1729604607,HK 1729604608,1729604863,AU +1729604864,1729605119,IN 1729605120,1729605375,AU 1729605376,1729605631,ID 1729605632,1729606655,CN @@ -36578,7 +36843,7 @@ 1729717248,1729718271,JP 1729718272,1729719295,HK 1729719296,1729720319,ID -1729720320,1729721087,AU +1729720320,1729721343,AU 1729721344,1729722367,NZ 1729722368,1729723391,BD 1729723392,1729726463,IN @@ -36633,7 +36898,9 @@ 1729776640,1729777663,CN 1729777664,1729779711,PK 1729779712,1729780735,AU -1729780736,1729781503,HK +1729780736,1729780991,HK +1729780992,1729781247,ID +1729781248,1729781503,HK 1729781504,1729781759,TL 1729781760,1729782783,IN 1729782784,1729783551,ID @@ -36821,7 +37088,6 @@ 1729952512,1729952767,NZ 1729952768,1729953791,IN 1729954816,1729955839,ID -1729955840,1729956863,BD 1729956864,1729957887,HK 1729957888,1729958911,CN 1729958912,1729959935,PH @@ -36887,7 +37153,6 @@ 1730017792,1730019327,PH 1730019328,1730020351,ID 1730020352,1730021375,HK -1730021376,1730022399,JP 1730022400,1730023423,IN 1730023424,1730024447,HK 1730024448,1730025471,CN @@ -36899,7 +37164,6 @@ 1730031616,1730032639,HK 1730032640,1730033663,JP 1730033664,1730034687,ID -1730034688,1730035711,JP 1730035712,1730036735,IN 1730036736,1730037759,HK 1730037760,1730038783,JP @@ -36907,7 +37171,7 @@ 1730039808,1730040831,IN 1730040832,1730043903,ID 1730043904,1730044927,CN -1730044928,1730046975,HK +1730044928,1730045951,HK 1730046976,1730047999,KR 1730048000,1730049023,TL 1730049024,1730050047,IN @@ -36931,10 +37195,11 @@ 1730066432,1730067455,AU 1730067456,1730068479,BD 1730068480,1730069503,IN +1730069504,1730070527,PK 1730070528,1730071551,CN 1730071552,1730072575,KR -1730072576,1730073599,SG -1730073600,1730073855,HK +1730072576,1730073343,SG +1730073344,1730073855,HK 1730074112,1730074367,AU 1730074368,1730074623,SG 1730075648,1730076671,ID @@ -36971,7 +37236,6 @@ 1730112512,1730112767,BD 1730112768,1730113535,ID 1730113536,1730114559,AU -1730114560,1730115583,JP 1730115584,1730117631,VN 1730117632,1730118655,KH 1730118656,1730119679,ID @@ -36987,8 +37251,12 @@ 1730128896,1730129919,SG 1730129920,1730130943,BD 1730130944,1730131967,KR -1730131968,1730132799,HK -1730132800,1730132831,RO +1730131968,1730132015,HK +1730132016,1730132223,US +1730132224,1730132351,HK +1730132352,1730132399,GB +1730132400,1730132735,HK +1730132736,1730132831,RO 1730132832,1730132991,HK 1730132992,1730134015,IN 1730134016,1730135039,JP @@ -37133,7 +37401,8 @@ 1730503680,1730505727,CN 1730505728,1730508799,JP 1730508800,1730509823,AU -1730509824,1730510847,CN +1730509824,1730510591,CN +1730510592,1730510847,HK 1730510848,1730511871,AU 1730511872,1730512895,JP 1730512896,1730521087,CN @@ -37313,15 +37582,16 @@ 1730756352,1730756607,CN 1730756608,1730757631,HK 1730757632,1730758655,SG -1730758656,1730759679,JP 1730760704,1730761727,HK 1730761728,1730762751,TH 1730762752,1730766847,IN +1730766848,1730767871,CN 1730767872,1730768127,AU 1730768128,1730768639,ID 1730768640,1730768895,BD 1730769920,1730770943,CN 1730770944,1730771967,ID +1730771968,1730772991,CN 1730772992,1730774015,SG 1730774016,1730775039,HK 1730775040,1730776063,JP @@ -37337,7 +37607,8 @@ 1730784256,1730785279,HK 1730785280,1730785535,NL 1730785536,1730786303,AU -1730786304,1730787327,HK +1730786304,1730787583,HK +1730787584,1730788351,CN 1730788352,1730790399,ID 1730790400,1730791423,IN 1730791424,1730794495,ID @@ -37352,7 +37623,6 @@ 1730803712,1730804735,HK 1730804736,1730805759,JP 1730805760,1730806783,AF -1730806784,1730807807,JP 1730807808,1730808831,CN 1730808832,1730809855,HK 1730809856,1730810623,IN @@ -37377,7 +37647,6 @@ 1730834944,1730835455,IN 1730835456,1730837503,ID 1730837504,1730838527,IN -1730838528,1730839551,TH 1730839552,1730840575,AU 1730840576,1730841599,SG 1730841600,1730842623,AU @@ -37400,12 +37669,10 @@ 1730859008,1730860031,BN 1730860032,1730861055,HK 1730861056,1730862079,MM -1730862080,1730863103,JP 1730863104,1730864127,AU 1730864128,1730865151,TW 1730865152,1730866175,CN 1730866176,1730867199,AU -1730868224,1730869247,KR 1730869248,1730870271,IN 1730870272,1730871807,ID 1730871808,1730873343,IN @@ -37435,7 +37702,8 @@ 1730895872,1730898943,CN 1730898944,1730899967,MO 1730899968,1730900991,IN -1730900992,1730901503,AU +1730900992,1730901247,HK +1730901248,1730901503,SG 1730901504,1730901759,DE 1730901760,1730902015,AU 1730902016,1730903039,KR @@ -37494,7 +37762,9 @@ 1730951168,1730952191,CN 1730952192,1730954239,HK 1730954240,1730955263,SG -1730955264,1730957311,BD +1730955264,1730956031,BD +1730956032,1730956287,US +1730956288,1730957311,BD 1730957312,1730958335,CN 1730958336,1730959359,JP 1730959360,1730960383,CN @@ -37898,7 +38168,8 @@ 1731509248,1731510271,HK 1731510272,1731510527,MY 1731510528,1731510783,AU -1731510784,1731511295,IN +1731510784,1731511039,IN +1731511040,1731511295,US 1731511296,1731512319,CN 1731512320,1731513343,KR 1731513344,1731514367,NZ @@ -38404,8 +38675,8 @@ 1732127744,1732128767,HK 1732128768,1732129023,SG 1732129024,1732129279,NZ -1732129280,1732129535,AU -1732129536,1732129791,HK +1732129280,1732129790,AU +1732129791,1732129791,HK 1732129792,1732130815,CN 1732130816,1732134911,IN 1732134912,1732140031,CN @@ -38641,7 +38912,8 @@ 1740873728,1740874751,CN 1740874752,1740876287,ID 1740876288,1740876799,AU -1740876800,1740880895,IN +1740876800,1740880639,IN +1740880640,1740880895,HK 1740880896,1740881919,SG 1740881920,1740882943,CN 1740882944,1740884991,IN @@ -38691,7 +38963,6 @@ 1740938496,1740938751,IN 1740938752,1740939263,TH 1740939264,1740940287,PK -1740940288,1740941311,JP 1740941312,1740942335,CN 1740942336,1740943359,TW 1740944384,1740945407,US @@ -38842,7 +39113,6 @@ 1741125632,1741128703,IN 1741128704,1741129727,JP 1741129728,1741130751,IN -1741130752,1741131775,JP 1741131776,1741132799,IN 1741132800,1741133823,HK 1741133824,1741134847,BD @@ -38863,7 +39133,8 @@ 1741157376,1741158399,HK 1741158400,1741160447,CN 1741160448,1741161471,TW -1741161472,1741162495,SG +1741161472,1741162239,SG +1741162240,1741162495,ID 1741162496,1741164543,AU 1741164544,1741165567,ID 1741165568,1741167615,VN @@ -38886,7 +39157,6 @@ 1741195264,1741210623,CN 1741210624,1741211647,PK 1741211648,1741212671,SG -1741212672,1741213695,IR 1741213696,1741214719,SG 1741214720,1741215743,IN 1741215744,1741216767,SG @@ -39037,6 +39307,126 @@ 1741521920,1741522943,BD 1741522944,1741523967,CN 1741523968,1741528063,IN +1741528064,1741529087,PH +1741529088,1741529599,TH +1741529600,1741529855,CN +1741529856,1741530111,IN +1741530112,1741531135,HK +1741531136,1741532159,JP +1741532160,1741533183,IN +1741533184,1741534207,PK +1741534208,1741535231,BD +1741535232,1741535487,JP +1741535488,1741535743,IN +1741535744,1741536255,SG +1741536256,1741540351,CN +1741540352,1741541375,AU +1741541376,1741542399,MY +1741542400,1741546495,IN +1741546496,1741547519,AU +1741547520,1741548543,BD +1741548544,1741549567,CN +1741549568,1741550591,HK +1741550592,1741551103,IN +1741551104,1741551615,AU +1741551616,1741554687,CN +1741554688,1741557759,IN +1741557760,1741558783,AU +1741558784,1741559807,HK +1741559808,1741560831,SG +1741560832,1741561087,AU +1741561088,1741561855,SG +1741561856,1741562879,NZ +1741562880,1741563903,HK +1741563904,1741564927,SG +1741564928,1741565951,CN +1741565952,1741572607,IN +1741572608,1741573119,KR +1741573120,1741574143,JP +1741574144,1741575167,PH +1741575168,1741576191,PK +1741576192,1741577215,JP +1741577216,1741578239,HK +1741578240,1741578751,IN +1741578752,1741579007,SG +1741579008,1741581311,IN +1741581312,1741582335,CN +1741582336,1741584383,IN +1741584384,1741586431,HK +1741586432,1741591551,IN +1741591552,1741592575,CN +1741592576,1741593087,MN +1741593088,1741593599,AU +1741593600,1741594111,HK +1741594112,1741594367,MY +1741594368,1741596671,IN +1741596672,1741597695,ID +1741597696,1741597951,IN +1741597952,1741598207,MM +1741598208,1741600767,IN +1741600768,1741601279,BD +1741601280,1741601535,ID +1741601536,1741601791,AU +1741601792,1741602815,HK +1741602816,1741603839,MN +1741603840,1741604863,JP +1741604864,1741605887,PH +1741605888,1741606911,TH +1741606912,1741607935,IN +1741607936,1741609983,VN +1741609984,1741612031,IN +1741612032,1741613055,BD +1741613056,1741614079,HK +1741614080,1741615103,AU +1741615104,1741617151,ID +1741617152,1741618175,IN +1741618176,1741619199,ID +1741619200,1741623295,IN +1741623296,1741623551,NZ +1741623552,1741623807,IN +1741623808,1741624063,AU +1741624064,1741624319,MY +1741624320,1741625343,JP +1741625344,1741626367,HK +1741626368,1741627391,AU +1741627392,1741629439,VN +1741629440,1741631487,IN +1741631488,1741632511,CN +1741632512,1741636607,IN +1741636608,1741637631,HK +1741637632,1741638655,PH +1741638656,1741639679,NZ +1741639680,1741640703,NP +1741640704,1741641727,PK +1741641728,1741642751,BD +1741642752,1741643007,AU +1741643008,1741643263,KR +1741643264,1741643775,AU +1741643776,1741644799,ID +1741644800,1741645311,KR +1741645312,1741645567,AU +1741645568,1741645823,IN +1741645824,1741646847,CN +1741646848,1741647871,SG +1741647872,1741648895,KH +1741648896,1741649919,HK +1741649920,1741658111,IN +1741658112,1741658623,BD +1741658624,1741659135,AU +1741659136,1741659647,SG +1741659648,1741659903,PH +1741659904,1741660159,HK +1741660160,1741661183,IN +1741661184,1741662207,CN +1741662208,1741666303,IN +1741666304,1741674495,CN +1741674496,1741675519,JP +1741675520,1741676543,CN +1741676544,1741677567,IN +1741677568,1741679615,CN +1741679616,1741680639,ID +1741680640,1741683711,IN +1741683712,1741684735,TW 1742734336,1742735359,IN 1742735360,1742736383,JP 1742736384,1742737407,PK @@ -39053,7 +39443,6 @@ 1742746112,1742746623,IN 1742746624,1742747135,AU 1742747136,1742747391,IN -1742747392,1742747647,AU 1742747648,1742748671,HK 1742748672,1742749695,CN 1742749696,1742750719,ID @@ -39136,7 +39525,9 @@ 1742835712,1742836735,JP 1742836736,1742837759,ID 1742837760,1742838783,JP -1742838784,1742841855,AU +1742838784,1742840831,AU +1742840832,1742841087,US +1742841088,1742841855,AU 1742841856,1742842367,TH 1742842368,1742843391,ID 1742843392,1742843647,IN @@ -39159,7 +39550,6 @@ 1742859264,1742860287,VN 1742860288,1742860799,AU 1742860800,1742861055,ID -1742861056,1742861311,AU 1742861312,1742862335,NP 1742862336,1742862847,IN 1742862848,1742863359,HK @@ -40035,7 +40425,9 @@ 1743897600,1743899647,AU 1743899648,1743900671,ID 1743900672,1743901695,JP -1743901696,1743903743,AU +1743901696,1743902463,AU +1743902464,1743902719,US +1743902720,1743903743,AU 1743903744,1743904767,CN 1743904768,1743905791,IN 1743905792,1743906815,HK @@ -40153,6 +40545,7 @@ 1744024320,1744024575,AF 1744024576,1744025599,HK 1744025600,1744026623,IN +1744026624,1744027647,SG 1744027648,1744028671,MY 1744028672,1744029695,JP 1744029696,1744030719,KR @@ -40176,6 +40569,7 @@ 1744049152,1744050175,BD 1744050176,1744051199,HK 1744051200,1744052223,PH +1744052224,1744053247,IN 1744053248,1744054271,ID 1744054272,1744055295,KR 1744055296,1744056319,HK @@ -40269,7 +40663,6 @@ 1744150528,1744151551,TO 1744151552,1744152319,LA 1744152320,1744152575,TH -1744152576,1744153599,JP 1744153600,1744154623,NZ 1744154880,1744155135,ID 1744155136,1744155647,BD @@ -40328,7 +40721,9 @@ 1744208384,1744208895,AU 1744208896,1744209919,CN 1744209920,1744210943,AU -1744210944,1744211967,SG +1744210944,1744211199,JP +1744211200,1744211455,HK +1744211456,1744211967,SG 1744211968,1744212991,KH 1744212992,1744213503,SG 1744213504,1744214015,JP @@ -40370,7 +40765,8 @@ 1744239616,1744240639,JP 1744240640,1744241663,AU 1744241664,1744242687,IN -1744242688,1744247807,ID +1744242688,1744245503,ID +1744245760,1744247807,ID 1744247808,1744248831,IN 1744248832,1744249855,ID 1744249856,1744250367,HK @@ -40516,7 +40912,8 @@ 1744386560,1744387071,ID 1744387072,1744388095,NZ 1744388096,1744388607,ID -1744388608,1744390143,AU +1744388608,1744389631,AU +1744389632,1744390143,RO 1744390144,1744391167,HK 1744391168,1744393215,IN 1744393216,1744394239,MY @@ -40672,7 +41069,7 @@ 1744567296,1744568319,JP 1744568320,1744569343,VN 1744569344,1744570367,IN -1744570880,1744571391,AU +1744570368,1744571391,AU 1744571392,1744571903,ID 1744571904,1744572415,AU 1744572416,1744573439,HK @@ -40681,9 +41078,9 @@ 1744575488,1744576511,CN 1744577536,1744578559,CN 1744578560,1744580607,IN -1744580608,1744580863,PH 1744580864,1744581119,SG 1744581120,1744581631,ID +1744581632,1744582655,IN 1744582656,1744583679,AU 1744583680,1744584703,IN 1744584704,1744585727,CN @@ -40707,7 +41104,9 @@ 1744597152,1744597183,IN 1744597184,1744597215,JP 1744597216,1744598015,SG +1744598016,1744599039,IN 1744599040,1744601087,JP +1744601088,1744602111,TW 1744602112,1744603135,HK 1744603136,1744604159,JP 1744604160,1744607231,IN @@ -40722,6 +41121,7 @@ 1744616448,1744616959,ID 1744616960,1744617471,AU 1744617472,1744618495,IN +1744618496,1744619519,TW 1744619520,1744620543,SG 1744620544,1744622591,CN 1744622592,1744624639,IN @@ -40774,6 +41174,7 @@ 1744665856,1744666111,IN 1744666112,1744666367,AU 1744666368,1744666623,PH +1744666624,1744667647,IN 1744667648,1744668671,TH 1744668672,1744669695,NZ 1744669696,1744670719,HK @@ -40846,6 +41247,7 @@ 1744744448,1744745471,CN 1744745472,1744747519,NP 1744747520,1744748543,CN +1744748544,1744749055,IN 1744749056,1744749567,NZ 1744749568,1744749823,CN 1744750592,1744752639,IN @@ -40886,7 +41288,6 @@ 1744786432,1744787455,VN 1744787456,1744789503,CN 1744789504,1744792575,IN -1744792576,1744793599,PK 1744793600,1744794623,IN 1744794624,1744795647,KH 1744795648,1744797183,ID @@ -41140,7 +41541,9 @@ 1753517568,1753517823,NO 1753517824,1753522431,US 1753522432,1753522687,FR -1753522688,1753529087,US +1753522688,1753527039,US +1753527040,1753527295,LT +1753527296,1753529087,US 1753529088,1753529343,NZ 1753529344,1753547007,US 1753547008,1753547263,DE @@ -41858,9 +42261,7 @@ 1761519616,1761521663,PR 1761521664,1761522687,US 1761522688,1761523711,CA -1761523712,1761524735,US -1761524736,1761525759,CA -1761525760,1761526783,US +1761523712,1761526783,US 1761526784,1761527807,CA 1761527808,1761544191,US 1761544192,1761546239,CA @@ -42002,6 +42403,12 @@ 1778384896,1778385151,CN 1778385152,1778385407,AU 1778385408,1778393087,CN +1778393088,1778396159,IN +1778396160,1778397183,CN +1778397184,1778398207,ID +1778398208,1778399231,BD +1778399232,1778400255,IN +1778400256,1778401279,BD 1778401280,1778417663,CN 1778417664,1778450431,TH 1778450432,1778515967,TW @@ -42902,7 +43309,9 @@ 1836646400,1836679167,RS 1836679168,1836680703,BG 1836680704,1836681215,MK -1836681216,1836711935,BG +1836681216,1836687359,BG +1836687360,1836689151,MK +1836689152,1836711935,BG 1836711936,1836728319,UA 1836728320,1836744703,RS 1836744704,1836746495,FR @@ -43304,7 +43713,9 @@ 1843789824,1843806207,SK 1843806208,1843822591,IR 1843822592,1843838975,RU -1843838976,1843846911,DE +1843838976,1843840767,DE +1843840768,1843841023,SE +1843841024,1843846911,DE 1843846912,1843847167,IR 1843847168,1843853055,DE 1843853056,1843853311,IR @@ -43567,13 +43978,7 @@ 1848393728,1848401919,JP 1848401920,1848406015,PH 1848406016,1848410111,NP -1848410112,1848411135,JP -1848411136,1848411391,PH -1848411392,1848412415,JP -1848412416,1848412671,PH -1848412672,1848413439,JP -1848413440,1848413951,PH -1848413952,1848414207,JP +1848410112,1848414207,PH 1848414208,1848418303,CN 1848418304,1848420351,AU 1848420352,1848422399,ID @@ -43688,12 +44093,11 @@ 1860733952,1860734975,AU 1860734976,1860735999,NZ 1860736000,1860737023,AU -1860737024,1860743167,JP -1860743168,1860743333,AU -1860743334,1860743334,HK -1860743335,1860743462,AU -1860743463,1860743464,JP -1860743465,1860744191,AU +1860737024,1860739071,JP +1860739072,1860743167,PH +1860743168,1860743423,HK +1860743424,1860743679,JP +1860743680,1860744191,AU 1860744192,1860745215,IN 1860745216,1860746239,AU 1860746240,1860747263,PK @@ -43820,6 +44224,9 @@ 1876785408,1876785439,HK 1876785440,1876787199,SG 1876787200,1876885503,CN +1876885504,1876886527,IN +1876886528,1876890623,CN +1876890624,1876893695,IN 1876893696,1876901887,TH 1876901888,1876918271,SG 1876918272,1876934655,LK @@ -43867,8 +44274,7 @@ 1884291072,1885863935,CN 1885863936,1885995007,TW 1885995008,1886191615,KR -1886191616,1886195455,JP -1886195456,1886195711,PH +1886191616,1886195711,PH 1886195712,1886197759,ID 1886197760,1886199807,JP 1886199808,1886207999,KR @@ -43966,7 +44372,9 @@ 1897170944,1897172991,ID 1897172992,1897175039,PH 1897175040,1897176063,JP -1897177088,1897201663,JP +1897176064,1897177087,SG +1897177088,1897185279,PH +1897185280,1897201663,JP 1897201664,1897209855,KR 1897209856,1897213951,AU 1897213952,1897218047,JP @@ -44068,7 +44476,10 @@ 1908756480,1908760575,KR 1908760576,1908761599,NZ 1908761600,1908762623,CN -1908762624,1908763647,IN +1908762624,1908762879,IN +1908762880,1908763135,US +1908763136,1908763391,AU +1908763392,1908763647,US 1908763648,1908764671,ID 1908764672,1908768767,AU 1908768768,1908801535,JP @@ -44110,6 +44521,10 @@ 1914437632,1914503167,CN 1914503168,1914552319,KR 1914552320,1914560511,SG +1914560512,1914564607,IN +1914564608,1914566655,TW +1914566656,1914567679,IN +1914567680,1914568703,MY 1914568704,1914576895,KR 1914576896,1914580991,TW 1914580992,1914585087,KR @@ -44171,8 +44586,8 @@ 1920002048,1920003071,CN 1920003072,1920008191,HK 1920008192,1920057343,CN -1920057344,1920058111,HK -1920058112,1920069631,CN +1920057344,1920058367,HK +1920058368,1920069631,CN 1920069632,1920071167,HK 1920071168,1920072703,CN 1920072704,1920073727,HK @@ -44219,7 +44634,9 @@ 1921867776,1921871871,AU 1921871872,1921872895,US 1921872896,1921873663,NZ -1921873664,1921875967,US +1921873664,1921874175,US +1921874176,1921874687,NZ +1921874688,1921875967,US 1921875968,1921892351,CN 1921892352,1921896447,AU 1921896448,1921898495,SG @@ -44267,6 +44684,10 @@ 1931739136,1932001279,JP 1932001280,1932132351,KR 1932132352,1932140543,AU +1932140544,1932145663,IN +1932145664,1932146687,BD +1932146688,1932147711,CN +1932147712,1932148735,HK 1932148736,1932152831,PK 1932152832,1932156927,TW 1932156928,1932161023,JP @@ -44373,7 +44794,10 @@ 1940357120,1940389887,JP 1940389888,1940914175,CN 1940914176,1941045247,JP -1941045248,1941049343,HK +1941045248,1941045759,HK +1941045760,1941046783,JP +1941046784,1941048319,HK +1941048320,1941049343,SG 1941049344,1941051391,AU 1941051392,1941052415,KH 1941052416,1941053439,AU @@ -44407,13 +44831,16 @@ 1946161152,1946163199,AU 1946163200,1946165247,CN 1946165248,1946173439,PK -1946173440,1946173695,PG +1946173440,1946173567,PG +1946173568,1946173599,HK +1946173600,1946173695,PG 1946173696,1946173951,TW 1946173952,1946174463,SG 1946174464,1946174719,TW 1946174720,1946175487,SG 1946175488,1946175615,HK -1946175616,1946175999,SG +1946175616,1946175743,CN +1946175744,1946175999,SG 1946176000,1946176255,JP 1946176256,1946176511,SG 1946176512,1946176767,AU @@ -44464,8 +44891,10 @@ 1950089216,1950351359,CN 1950351360,1950482431,JP 1950482432,1950515199,CN -1950515200,1950517247,IN -1950517248,1950518271,US +1950515200,1950515711,IN +1950515712,1950516223,US +1950516224,1950516735,IN +1950516736,1950518271,US 1950518272,1950519295,IN 1950519296,1950520319,US 1950520320,1950521343,PH @@ -44556,7 +44985,7 @@ 1958845952,1958846463,HK 1958846464,1958847487,IN 1958847488,1958848511,CN -1958848512,1958850559,BD +1958848512,1958848767,BD 1958850560,1958852607,CN 1958852608,1958853631,AU 1958853632,1958854655,ID @@ -44570,7 +44999,11 @@ 1959104512,1959106559,AU 1959108608,1959110655,CN 1959110656,1959112703,JP -1959112704,1959114751,HK +1959112704,1959113215,HK +1959113216,1959113471,IN +1959113472,1959113727,HK +1959113728,1959113983,CN +1959113984,1959114751,HK 1959114752,1959115007,IN 1959115008,1959116287,HK 1959116288,1959116543,AU @@ -44617,7 +45050,8 @@ 1960210432,1960210943,TH 1960210944,1960211455,SG 1960211456,1960211903,AU -1960211904,1960212479,SG +1960211904,1960211967,SG +1960211968,1960212479,AU 1960212480,1960212582,IN 1960212583,1960212583,SG 1960212584,1960212735,IN @@ -44666,9 +45100,8 @@ 1964138496,1964146687,HK 1964146688,1964171263,JP 1964171264,1964173311,BD -1964173312,1964173776,AU -1964173777,1964173777,JP -1964173778,1964173823,AU +1964173312,1964173567,AU +1964173568,1964173823,JP 1964173824,1964174079,HK 1964174080,1964174335,AU 1964174336,1964174591,SG @@ -44745,7 +45178,9 @@ 1969707008,1969709055,MH 1969709056,1969713151,TW 1969713152,1969715199,AU -1969715200,1969717247,IN +1969715200,1969716223,SG +1969716224,1969716735,HK +1969716736,1969717247,IN 1969717248,1969721343,CN 1969721344,1969725439,HK 1969725440,1969727487,JP @@ -44757,7 +45192,8 @@ 1969793024,1969795071,CN 1969795072,1969797119,NZ 1969797120,1969798143,SG -1969798144,1969799167,HK +1969798144,1969798399,CN +1969798400,1969799167,HK 1969799168,1969807359,ID 1969807360,1969809407,AF 1969809408,1969811455,IN @@ -44771,8 +45207,8 @@ 1970800640,1970802943,AU 1970802944,1970803199,SG 1970803200,1970803711,AU -1970803712,1970803967,HK -1970803968,1970804479,AU +1970803712,1970804223,HK +1970804224,1970804479,AU 1970804480,1970804735,SG 1970804736,1970806783,KH 1970806784,1970808831,NZ @@ -44849,6 +45285,11 @@ 1986461696,1986496511,JP 1986496512,1986498559,BT 1986498560,1986502655,HK +1986502656,1986503679,IN +1986503680,1986507775,CN +1986507776,1986508799,SG +1986508800,1986509823,AU +1986509824,1986510847,JP 1986510848,1986519039,KR 1986519040,1986523135,PK 1986523136,1986523904,HK @@ -44862,7 +45303,6 @@ 1986762752,1986764799,JP 1986764800,1986768895,KR 1986768896,1986769919,SG -1986769920,1986770943,IR 1986770944,1986772991,AU 1986772992,1986789375,MY 1986789376,1987051519,JP @@ -44985,7 +45425,9 @@ 1998272432,1998272447,JP 1998272448,1998272547,SG 1998272548,1998272551,JP -1998272552,1998274559,SG +1998272552,1998274047,SG +1998274048,1998274303,US +1998274304,1998274559,SG 1998274560,1998454783,CN 1998454784,1998456831,AU 1998456832,1998458879,JP @@ -45343,7 +45785,15 @@ 2030436352,2030567423,SG 2030567424,2032926719,CN 2032926720,2033057791,AU -2033057792,2033319935,CN +2033057792,2033074175,CN +2033074176,2033075199,PK +2033075200,2033077247,BD +2033077248,2033078271,CN +2033078272,2033079295,HK +2033079296,2033088511,IN +2033088512,2033089535,AU +2033089536,2033090559,IN +2033090560,2033319935,CN 2033319936,2033321983,IN 2033321984,2033324031,CN 2033324032,2033328127,KR @@ -45483,7 +45933,17 @@ 2050091008,2050097151,JP 2050097152,2050101247,SG 2050101248,2050113535,JP -2050113536,2050129663,SG +2050113536,2050122239,SG +2050122240,2050122495,JP +2050122496,2050122751,SG +2050122752,2050122879,JP +2050122880,2050126079,SG +2050126080,2050126207,JP +2050126208,2050126591,SG +2050126592,2050126719,JP +2050126720,2050126783,SG +2050126784,2050126975,JP +2050126976,2050129663,SG 2050129664,2050129727,JP 2050129728,2050129919,SG 2050129920,2050162687,IN @@ -45611,7 +46071,7 @@ 2060062720,2060066815,JP 2060066816,2060075007,KR 2060075008,2060083199,AU -2060083200,2060091391,JP +2060083200,2060091391,PH 2060091392,2060189695,KR 2060189696,2060451839,CN 2060451840,2061500415,JP @@ -45658,7 +46118,11 @@ 2063392768,2063400959,IN 2063400960,2063466495,JP 2063466496,2063482879,TW -2063482880,2063499263,MN +2063482880,2063483135,MN +2063483136,2063483391,JP +2063483392,2063486975,MN +2063486976,2063487231,JP +2063487232,2063499263,MN 2063499264,2063532031,KR 2063532032,2063548415,LK 2063548416,2063550463,CN @@ -45906,14 +46370,19 @@ 2087464960,2087467007,KH 2087467008,2087471103,JP 2087471104,2087472127,SG -2087472128,2087476223,HK +2087472128,2087472639,HK +2087472640,2087473151,SG +2087473152,2087474687,HK +2087474688,2087475199,JP +2087475200,2087476223,HK 2087476224,2087477247,TW 2087477248,2087478271,AU 2087478272,2087485439,HK 2087485440,2087501823,TW 2087501824,2087518207,JP 2087518208,2087519231,TH -2087519232,2087520255,SG +2087519232,2087519999,SG +2087520000,2087520255,PH 2087520256,2087522303,FM 2087524352,2087526399,TH 2087526400,2087534591,PK @@ -46215,9 +46684,12 @@ 2153385920,2153385983,US 2153385984,2153387007,GB 2153387008,2153387263,CH -2153387264,2153387775,US +2153387264,2153387519,IS +2153387520,2153387775,IE 2153387776,2153388031,CH -2153388032,2153396991,US +2153388032,2153388287,ES +2153388288,2153388543,PL +2153388544,2153396991,US 2153396992,2153397247,IL 2153397248,2153397503,IN 2153397504,2153397759,SA @@ -47626,13 +48098,18 @@ 2302349312,2302351359,HK 2302351360,2302357503,VN 2302357504,2302358527,BD -2302358528,2302363647,IN -2302363648,2302364671,JP -2302364672,2302365695,IN +2302358528,2302365695,IN 2302365696,2302366719,HK 2302366720,2302367743,IN 2302367744,2302368767,CN -2302368768,2302369791,IN +2302368768,2302370815,IN +2302370816,2302371839,HK +2302371840,2302372863,VN +2302372864,2302373887,MY +2302373888,2302374911,TH +2302374912,2302375935,VN +2302375936,2302376959,AF +2302376960,2302377983,ID 2302410752,2302541823,SE 2302541824,2302607359,CH 2302607360,2302625761,SC @@ -47774,8 +48251,9 @@ 2316042240,2316173311,US 2316173312,2316238847,SE 2316238848,2316500991,US -2316500992,2316533759,AU -2316533760,2316566527,HK +2316500992,2316505855,HK +2316505856,2316506111,AU +2316506112,2316566527,HK 2316566528,2316613887,US 2316613888,2316614143,GB 2316614144,2316632063,US @@ -47898,7 +48376,9 @@ 2321447936,2321452031,BR 2321452032,2321453055,MX 2321453056,2321454079,HN -2321454080,2321471487,BR +2321454080,2321467136,BR +2321467137,2321467137,US +2321467138,2321471487,BR 2321471488,2321472511,HN 2321472512,2321477631,BR 2321477632,2321478655,TT @@ -48320,7 +48800,7 @@ 2335637504,2335768575,US 2335768576,2335834111,CA 2335834112,2335899647,SE -2335899648,2335965183,AU +2335899648,2335965183,SG 2335965184,2336161791,US 2336161792,2336227327,NL 2336292864,2336358399,US @@ -48406,9 +48886,13 @@ 2342700248,2342700248,GB 2342700249,2342701408,US 2342701409,2342701409,GB -2342701410,2342705120,US +2342701410,2342704912,US +2342704913,2342704913,GB +2342704914,2342705120,US 2342705121,2342705121,GB -2342705122,2342715391,US +2342705122,2342706194,US +2342706195,2342706195,GB +2342706196,2342715391,US 2342715392,2342780927,AU 2342780928,2342846463,NO 2342846464,2342911999,BE @@ -48842,7 +49326,11 @@ 2382677992,2382678015,CA 2382678016,2382678527,US 2382678528,2382679039,CA -2382679040,2382680063,US +2382679040,2382679150,US +2382679151,2382679151,IO +2382679152,2382679342,US +2382679343,2382679343,IO +2382679344,2382680063,US 2382680064,2382684159,CA 2382684160,2382692351,US 2382692352,2383085567,CA @@ -49570,7 +50058,6 @@ 2455175168,2455240703,GB 2455240704,2455244799,US 2455244800,2455245567,AU -2455245568,2455245823,SG 2455245824,2455246847,AU 2455246848,2455247871,IN 2455247872,2455248127,AU @@ -49582,7 +50069,9 @@ 2455263232,2455265279,PH 2455265280,2455273471,US 2455273472,2455275519,AU -2455275520,2455279615,US +2455275520,2455278079,US +2455278080,2455278591,NZ +2455278592,2455279615,US 2455279616,2455280127,MO 2455280128,2455280383,MY 2455280384,2455281663,MO @@ -50102,7 +50591,9 @@ 2500202880,2500203007,ES 2500203008,2500209919,US 2500209920,2500210175,GB -2500210176,2500212415,US +2500210176,2500211728,US +2500211729,2500211730,SI +2500211731,2500212415,US 2500212416,2500212423,CH 2500212424,2500212991,US 2500212992,2500213247,ES @@ -50216,17 +50707,23 @@ 2500644864,2500645119,FR 2500645120,2500646911,US 2500646912,2500647935,ES -2500647936,2500666463,US +2500647936,2500663295,US +2500663296,2500664319,ES +2500664320,2500666463,US 2500666464,2500666471,LU 2500666472,2500681759,US 2500681760,2500681767,PL -2500681768,2500685823,US +2500681768,2500682495,US +2500682496,2500682751,PL +2500682752,2500685823,US 2500685824,2500686079,FR 2500686080,2500687871,US 2500687872,2500689919,FR 2500689920,2500694527,US 2500694528,2500694783,IT -2500694784,2500719103,US +2500694784,2500695039,US +2500695040,2500696063,IT +2500696064,2500719103,US 2500719104,2500721151,IE 2500721152,2500723711,US 2500723712,2500723799,GB @@ -50301,7 +50798,9 @@ 2504943616,2504944639,IL 2504944640,2504945151,US 2504945152,2504945407,IL -2504945408,2504945663,US +2504945408,2504945432,US +2504945433,2504945433,IL +2504945434,2504945663,US 2504945664,2504946175,IL 2504946176,2504946431,US 2504946432,2504946687,IL @@ -51294,9 +51793,15 @@ 2584764416,2584764671,ZA 2584764672,2584775423,US 2584775424,2584775679,KE -2584775680,2585001983,US +2584775680,2584780287,US +2584780288,2584780543,ES +2584780544,2585001983,US 2585001984,2585067519,CA -2585067520,2585788415,US +2585067520,2585330440,US +2585330441,2585330442,SI +2585330443,2585330468,US +2585330469,2585330470,SI +2585330471,2585788415,US 2585788416,2585853951,GB 2585853952,2585985023,JP 2585985024,2586378751,US @@ -51487,6 +51992,7 @@ 2588082176,2588147711,RE 2588147712,2588164095,CI 2588164096,2588180479,RW +2588188672,2588196863,ZA 2588196864,2588213247,NG 2588213248,2588278783,ZA 2588278784,2588295167,KE @@ -51596,6 +52102,7 @@ 2591479552,2591479807,AO 2591479808,2591481855,PT 2591481856,2591483903,TZ +2591483904,2591485951,KE 2591485952,2591486975,SO 2591486976,2591487999,ZA 2591488000,2591489023,GA @@ -51683,6 +52190,7 @@ 2605318144,2606301183,US 2606301184,2606366719,AO 2606366720,2606563327,US +2606563328,2606596095,NG 2606628864,2607349759,US 2607349760,2607415295,CH 2607415296,2609053695,US @@ -51899,7 +52407,25 @@ 2623602688,2623668223,CL 2623668224,2624192511,US 2624192512,2624258047,CH -2624258048,2624279039,US +2624258048,2624269313,US +2624269314,2624269314,AU +2624269315,2624269317,US +2624269318,2624269318,AU +2624269319,2624269321,US +2624269322,2624269322,AU +2624269323,2624269345,US +2624269346,2624269346,AU +2624269347,2624269349,US +2624269350,2624269350,AU +2624269351,2624269353,US +2624269354,2624269354,AU +2624269355,2624269377,US +2624269378,2624269378,AU +2624269379,2624269381,US +2624269382,2624269382,AU +2624269383,2624269385,US +2624269386,2624269386,AU +2624269387,2624279039,US 2624279040,2624279071,IN 2624279072,2624279095,US 2624279096,2624279111,IN @@ -51980,7 +52506,23 @@ 2624298292,2624298295,PH 2624298296,2624298299,TH 2624298300,2624298495,SG -2624298496,2624716799,US +2624298496,2624302081,US +2624302082,2624302082,AU +2624302083,2624302085,US +2624302086,2624302086,AU +2624302087,2624302089,US +2624302090,2624302090,AU +2624302091,2624302113,US +2624302114,2624302114,AU +2624302115,2624302117,US +2624302118,2624302118,AU +2624302119,2624302121,US +2624302122,2624302122,AU +2624302123,2624302149,US +2624302150,2624302150,AU +2624302151,2624302153,US +2624302154,2624302154,AU +2624302155,2624716799,US 2624716800,2624782335,NL 2624782336,2624847871,CH 2624847872,2624913407,NO @@ -52180,7 +52722,9 @@ 2655324800,2655325695,US 2655325696,2655325823,CA 2655325824,2655326207,US -2655326208,2655326463,CA +2655326208,2655326287,CA +2655326288,2655326303,US +2655326304,2655326463,CA 2655326464,2655373256,US 2655373257,2655373257,CA 2655373258,2655715327,US @@ -52462,7 +53006,11 @@ 2675580064,2675580095,AE 2675580096,2675589119,US 2675589120,2675605503,DE -2675605504,2675606271,US +2675605504,2675605961,US +2675605962,2675605962,DE +2675605963,2675605963,US +2675605964,2675605964,DE +2675605965,2675606271,US 2675606272,2675606527,IT 2675606528,2675606975,US 2675606976,2675607039,IT @@ -52781,7 +53329,9 @@ 2696478720,2696871935,JP 2696937472,2697789439,JP 2697789440,2697854975,US -2697854976,2697889791,AU +2697854976,2697887743,AU +2697887744,2697887999,ES +2697888000,2697889791,AU 2697889792,2697891839,US 2697891840,2697892095,GB 2697892096,2697892863,AU @@ -53006,7 +53556,9 @@ 2714373128,2714373128,SG 2714373129,2714386431,US 2714386432,2714402815,JP -2714402816,2714407160,US +2714402816,2714403996,US +2714403997,2714403997,JP +2714403998,2714407160,US 2714407161,2714407161,JP 2714407162,2714697727,US 2714697728,2714763263,CN @@ -53124,7 +53676,9 @@ 2728316928,2728317951,BG 2728317952,2728319999,US 2728320000,2728321023,NO -2728321024,2731543551,US +2728321024,2728323071,US +2728323072,2728324095,BE +2728324096,2731543551,US 2731543552,2731544575,CA 2731544576,2731549695,US 2731549696,2731550719,CA @@ -53242,7 +53796,7 @@ 2732273664,2732275711,CA 2732275712,2732278783,US 2732278784,2732279807,CA -2732279808,2732302335,US +2732279808,2732301311,US 2732302336,2732303359,CA 2732303360,2732306431,US 2732306432,2732307455,CA @@ -53283,9 +53837,7 @@ 2732455936,2732457983,CA 2732457984,2732472319,US 2732472320,2732474367,CA -2732474368,2732475391,US -2732475392,2732476415,CA -2732476416,2732478463,US +2732474368,2732478463,US 2732478464,2732479487,CA 2732479488,2732480511,AG 2732480512,2732485631,US @@ -53630,7 +54182,9 @@ 2745548800,2745565183,DE 2745565184,2745696255,GB 2745696256,2745761791,CH -2745761792,2746023935,GB +2745761792,2745962865,GB +2745962866,2745962866,FR +2745962867,2746023935,GB 2746023936,2746089471,FR 2746089472,2746155007,NO 2746155008,2746220543,NL @@ -53752,7 +54306,11 @@ 2759917568,2759983103,FR 2759983104,2760048639,IT 2760048640,2760114175,FR -2760114176,2760179711,IT +2760114176,2760119967,IT +2760119968,2760119983,GB +2760119984,2760120839,IT +2760120840,2760120843,PT +2760120844,2760179711,IT 2760179712,2760245247,DE 2760245248,2760310783,GB 2760310784,2760376319,SE @@ -53844,7 +54402,8 @@ 2773090304,2773221375,US 2773221376,2773286911,JP 2773286912,2773745663,US -2773745664,2773794815,NZ +2773745664,2773778431,NZ +2773778432,2773794815,HK 2773794816,2773798911,IN 2773798912,2773803007,NZ 2773803008,2773803263,GB @@ -53958,7 +54517,9 @@ 2782724096,2782789631,US 2782789632,2782855167,CH 2782855168,2782995455,US -2782995456,2782995967,CA +2782995456,2782995526,CA +2782995527,2782995527,US +2782995528,2782995967,CA 2782995968,2783002623,US 2783002624,2783002879,DK 2783002880,2783003135,US @@ -54112,7 +54673,9 @@ 2809269026,2809269026,US 2809269027,2809274367,CA 2809274368,2809274623,US -2809274624,2809277375,CA +2809274624,2809276083,CA +2809276084,2809276087,US +2809276088,2809277375,CA 2809277376,2809277407,FR 2809277408,2809281575,CA 2809281576,2809281583,US @@ -54233,11 +54796,9 @@ 2818124800,2818125823,AR 2818125824,2818126847,BR 2818126848,2818127871,AR -2818127872,2818138111,BR -2818139136,2818143231,BR +2818127872,2818143231,BR 2818143232,2818144255,MX -2818144256,2818145279,BR -2818146304,2818162687,BR +2818144256,2818162687,BR 2818162688,2818164735,AR 2818164736,2818165759,BZ 2818165760,2818168831,BR @@ -54260,9 +54821,11 @@ 2818209792,2818210815,CO 2818210816,2818212863,BR 2818212864,2818213887,CL -2818213888,2818221055,BR +2818213888,2818222079,BR 2818222080,2818223103,AR -2818223104,2818228223,BR +2818223104,2818225151,BR +2818225152,2818226175,EC +2818226176,2818228223,BR 2818228224,2818229247,CR 2818229248,2818231295,BR 2818231296,2818232319,PE @@ -54280,7 +54843,17 @@ 2818586624,2818587647,AR 2818587648,2818593791,BR 2818593792,2818594815,SX -2818594816,2818600959,BR +2818594816,2818619391,BR +2818619392,2818620415,AR +2818620416,2818623487,BR +2818623488,2818625535,AR +2818625536,2818626559,BR +2818626560,2818627583,HN +2818627584,2818628607,BR +2818628608,2818629631,MX +2818629632,2818634751,BR +2818634752,2818635775,CO +2818636800,2818637823,BR 2818637824,2818670591,AU 2818670592,2822592397,US 2822592398,2822592398,IE @@ -54306,6 +54879,35 @@ 2824357888,2824358143,CA 2824358144,2824404991,US 2824404992,2824470527,ZA +2824471552,2824472575,BR +2824472576,2824473599,AR +2824473600,2824474623,CO +2824474624,2824487935,BR +2824487936,2824488959,MX +2824488960,2824489983,AR +2824489984,2824492031,BR +2824492032,2824493055,AR +2824493056,2824494079,BR +2824494080,2824495103,VE +2824495104,2824496127,HN +2824496128,2824497151,BR +2824498176,2824499199,HN +2824499200,2824503295,BR +2824503296,2824504319,AR +2824504320,2824510463,BR +2824510464,2824511487,CL +2824511488,2824512511,AR +2824512512,2824515583,BR +2824515584,2824516607,PY +2824516608,2824520703,BR +2824520704,2824521727,HN +2824521728,2824526847,BR +2824526848,2824527871,CL +2824527872,2824528895,BR +2824529920,2824530943,CL +2824531968,2824532991,BR +2824534016,2824535039,BR +2824535040,2824536063,AR 2824536064,2824798207,US 2824798208,2824863743,TW 2824863744,2824929279,AR @@ -54317,6 +54919,16 @@ 2826108928,2826174463,KR 2826174464,2826436607,US 2826436608,2826502143,TH +2826502144,2826510335,BR +2826510336,2826512383,AR +2826512384,2826513407,BR +2826513408,2826515455,PE +2826515456,2826516479,BR +2826517504,2826518527,MX +2826518528,2826522623,BR +2826523648,2826524671,SR +2826524672,2826525695,BR +2826531840,2826532863,AR 2826567680,2826633215,US 2826633216,2826698751,GU 2826698752,2826829823,US @@ -54347,7 +54959,9 @@ 2828599808,2828664831,AU 2828664832,2828730367,KR 2828730368,2828795903,ZA -2828795904,2829033471,US +2828795904,2829029375,US +2829029376,2829029631,CN +2829029632,2829033471,US 2829033472,2829033727,IN 2829033728,2829041663,US 2829041664,2829041919,AU @@ -54483,7 +55097,7 @@ 2845704192,2845769727,CU 2845769728,2845786111,GA 2845786112,2845802495,NG -2845818880,2845822975,ZA +2845802496,2845835263,ZA 2845835264,2848212991,US 2848212992,2848215039,GB 2848215040,2848244735,US @@ -54535,7 +55149,8 @@ 2851053568,2851054591,KE 2851054592,2851055615,ZA 2851055616,2851057663,KE -2851057664,2851059711,ZA +2851057664,2851060735,ZA +2851060736,2851062783,NG 2851078144,2851995647,US 2852061184,2852062207,ZA 2852062208,2852063231,CM @@ -54645,7 +55260,7 @@ 2863267840,2863595519,US 2863595520,2863661055,CA 2863661056,2863857663,US -2863857664,2863923199,SG +2863857664,2863923199,CN 2863923200,2864844799,US 2864844800,2864845055,NL 2864845056,2864848895,US @@ -54994,7 +55609,9 @@ 2892369920,2892374015,CA 2892374016,2892420607,US 2892420608,2892420863,CA -2892420864,2892423167,US +2892420864,2892421631,US +2892421632,2892421887,CA +2892421888,2892423167,US 2892423168,2892424191,VI 2892424192,2892425215,CA 2892425216,2892443647,US @@ -55024,7 +55641,17 @@ 2892994560,2892994815,JO 2892994816,2892995327,GB 2892995328,2892995839,AU -2892995840,2893676543,US +2892995840,2892996095,CA +2892996096,2892996607,US +2892996608,2892996863,CA +2892996864,2892997119,AU +2892997120,2892997375,CA +2892997376,2892997887,AU +2892997888,2892998655,GB +2892998656,2892998911,HK +2892998912,2892999167,MX +2892999168,2892999423,MT +2892999424,2893676543,US 2893676544,2893807615,CA 2893807616,2894921727,US 2894921728,2895118335,GB @@ -55560,6 +56187,12 @@ 2943314944,2943315967,CN 2943315968,2943318015,ID 2943318016,2943320063,JP +2943320064,2943324159,IN +2943324160,2943332351,CN +2943332352,2943333375,AU +2943333376,2943334399,IN +2943334400,2943335423,CN +2943335424,2943336447,IN 2943336448,2943352831,TW 2943352832,2944401407,KR 2944401408,2944925695,JP @@ -55605,7 +56238,9 @@ 2947598336,2947602431,AU 2947602432,2947603455,NZ 2947603456,2947604479,TH -2947604480,2947612671,HK +2947604480,2947609855,HK +2947609856,2947610111,AF +2947610112,2947612671,HK 2947612672,2947678207,JP 2947678208,2947743743,CN 2947743744,2947809279,JP @@ -56463,8 +57098,10 @@ 2961064960,2961065215,HK 2961065216,2961065471,AU 2961065472,2961065727,BR -2961065728,2961065983,HK -2961065984,2961069567,NL +2961065728,2961066239,HK +2961066240,2961067519,NL +2961067520,2961067775,GB +2961067776,2961069567,NL 2961069568,2961069823,IN 2961069824,2961072127,NL 2961072128,2961088511,UA @@ -56522,7 +57159,7 @@ 2967400448,2967404543,RU 2967404544,2967422975,RO 2967422976,2967425023,KZ -2967425024,2967427071,DE +2967425024,2967427071,IR 2967427072,2967428095,NL 2967428096,2967432191,RO 2967432192,2967432447,GB @@ -57422,7 +58059,7 @@ 3000317952,3000319999,PL 3000320000,3000322047,FR 3000322048,3000322303,PL -3000322304,3000322559,RU +3000322304,3000322559,GB 3000322560,3000322815,DE 3000322816,3000323071,RU 3000323072,3000323583,DE @@ -57502,7 +58139,9 @@ 3000606720,3000608767,UA 3000608768,3000610815,KG 3000610816,3000612863,RU -3000612864,3000616959,PL +3000612864,3000613241,PL +3000613242,3000613242,PT +3000613243,3000616959,PL 3000616960,3000621055,UA 3000621056,3000623103,PL 3000623104,3000625151,RU @@ -58361,7 +59000,8 @@ 3025403904,3025600511,CN 3025600512,3025601663,IN 3025601664,3025601791,HK -3025601792,3025602047,IN +3025601792,3025601919,IN +3025601920,3025602047,CN 3025602048,3025602303,HK 3025602304,3025603071,IN 3025603072,3025603091,HK @@ -58436,8 +59076,8 @@ 3025631748,3025631767,HK 3025631768,3025631999,IN 3025632000,3025632255,HK -3025632256,3025632415,SG -3025632416,3025632511,IN +3025632256,3025632423,SG +3025632424,3025632511,IN 3025632512,3025632767,SG 3025632768,3025633535,IN 3025633536,3025633791,HK @@ -59327,11 +59967,13 @@ 3057041408,3057049599,MY 3057049600,3057050623,AU 3057050624,3057051647,SG -3057051648,3057052415,AU +3057051648,3057052159,AU +3057052160,3057052415,US 3057052416,3057052671,ES 3057052672,3057052927,IL 3057052928,3057053183,GB -3057053184,3057053695,AU +3057053184,3057053439,US +3057053440,3057053695,SG 3057053696,3057054719,JP 3057054720,3057055743,CN 3057055744,3057057791,JP @@ -59359,6 +60001,13 @@ 3063971840,3063988223,AU 3063988224,3064004607,JP 3064004608,3064012799,LK +3064012800,3064013823,AU +3064013824,3064015871,HK +3064015872,3064016895,AU +3064016896,3064017919,SG +3064017920,3064018943,IN +3064018944,3064019967,NZ +3064019968,3064020991,HK 3064020992,3064023039,JP 3064023040,3064024063,SG 3064024064,3064025087,JP @@ -59371,7 +60020,10 @@ 3064725504,3064791039,KR 3064791040,3064807423,TW 3064807424,3064808447,IN -3064808448,3064809471,TW +3064808448,3064808703,VG +3064808704,3064808959,JP +3064808960,3064809215,VN +3064809216,3064809471,VG 3064809472,3064810495,MY 3064810496,3064811519,HK 3064811520,3064823807,KR @@ -59476,7 +60128,8 @@ 3081846784,3081847807,TW 3081847808,3081848831,KR 3081848832,3081850879,SG -3081850880,3081851903,HK +3081850880,3081851391,HK +3081851392,3081851903,SG 3081851904,3081852927,JP 3081852928,3081854975,HK 3081854976,3081859071,MN @@ -59767,6 +60420,8 @@ 3103865600,3103865855,BG 3103865856,3103866367,DE 3103866368,3103866879,UA +3103866880,3103867135,RU +3103867136,3103867391,NO 3103916032,3103917055,CH 3103917056,3103918079,IT 3103918080,3103919103,DE @@ -60355,6 +61010,7 @@ 3104533504,3104534527,PL 3104534528,3104535551,SE 3104535552,3104536575,ES +3104536576,3104537599,SA 3104537600,3104538623,US 3104538624,3104539647,PL 3104539648,3104540671,RU @@ -61178,7 +61834,9 @@ 3105400832,3105401855,DK 3105401856,3105402879,NL 3105402880,3105404927,RU -3105404928,3105405951,FR +3105404928,3105404928,FR +3105404929,3105404929,RE +3105404930,3105405951,FR 3105405952,3105406975,NO 3105406976,3105407999,FR 3105408000,3105410047,PL @@ -62262,7 +62920,7 @@ 3106466560,3106466815,RO 3106466816,3106467839,EE 3106467840,3106468863,IR -3106469888,3106470911,DE +3106468864,3106470911,DE 3106470912,3106471935,NL 3106471936,3106472959,IR 3106472960,3106473983,FR @@ -62559,7 +63217,7 @@ 3106758656,3106759679,GB 3106759680,3106760703,RU 3106760704,3106761727,IE -3106762752,3106763775,DE +3106761728,3106763775,DE 3106763776,3106764799,NL 3106764800,3106765823,SE 3106765824,3106766847,CZ @@ -62890,7 +63548,8 @@ 3107099648,3107099903,UA 3107099904,3107100159,CZ 3107100160,3107100415,RU -3107100416,3107101695,CZ +3107100416,3107100671,SK +3107100672,3107101695,CZ 3107101696,3107102719,RU 3107102720,3107103743,GB 3107103744,3107104767,PL @@ -62995,6 +63654,7 @@ 3107205120,3107206143,BG 3107206144,3107207167,NL 3107207168,3107207423,AT +3107207424,3107208191,RU 3107208192,3107209215,NL 3107209216,3107210239,IT 3107210240,3107213311,RU @@ -63432,7 +64092,9 @@ 3107640320,3107641343,DK 3107641344,3107643391,RU 3107643392,3107643647,GB -3107643648,3107644415,IT +3107643648,3107643903,IT +3107643904,3107643904,GB +3107643905,3107644415,IT 3107644416,3107645439,FR 3107645440,3107646463,IE 3107646464,3107647487,NL @@ -63744,6 +64406,7 @@ 3107972096,3107973119,IT 3107973120,3107974143,SA 3107974144,3107975167,IR +3107975168,3107976191,DE 3107976192,3107977215,NL 3107977216,3107978239,AT 3107978240,3107979263,NL @@ -64082,7 +64745,9 @@ 3108333568,3108334591,SK 3108334592,3108335615,IR 3108335616,3108336639,NL -3108336640,3108337663,GB +3108336640,3108337151,GB +3108337152,3108337407,ES +3108337408,3108337663,GB 3108337664,3108338687,IR 3108338688,3108339711,RU 3108339712,3108340735,NL @@ -65157,7 +65822,9 @@ 3109465088,3109466111,DE 3109466112,3109467135,FR 3109467136,3109468159,IR -3109468160,3109468351,GB +3109468160,3109468322,GB +3109468323,3109468323,ES +3109468324,3109468351,GB 3109468352,3109468415,ES 3109468416,3109468671,GB 3109468672,3109468799,ES @@ -65592,7 +66259,22 @@ 3109921792,3109922815,IR 3109922816,3109924863,GB 3109924864,3109925887,IT -3109925888,3109926911,GB +3109925888,3109925967,GB +3109925968,3109925975,DE +3109925976,3109926015,GB +3109926016,3109926031,DE +3109926032,3109926143,GB +3109926144,3109926159,FR +3109926160,3109926175,GB +3109926176,3109926183,ES +3109926184,3109926207,GB +3109926208,3109926215,ES +3109926216,3109926279,GB +3109926280,3109926287,DE +3109926288,3109926335,ES +3109926336,3109926399,GB +3109926400,3109926655,ES +3109926656,3109926911,IT 3109926912,3109927935,UA 3109927936,3109928959,DE 3109928960,3109929983,DK @@ -65684,7 +66366,11 @@ 3109989376,3109990399,RU 3109990400,3109991423,GB 3109991424,3109992447,NL -3109992448,3109995519,GB +3109992448,3109993471,GB +3109993472,3109993727,NL +3109993728,3109993983,FR +3109993984,3109994239,HU +3109994240,3109995519,GB 3109995520,3109996543,NL 3109996544,3109997567,IE 3109997568,3109998591,GB @@ -65987,14 +66673,19 @@ 3110304768,3110305791,KZ 3110305792,3110306815,NL 3110306816,3110307327,NZ -3110307328,3110307452,BY +3110307328,3110307452,GB 3110307453,3110307453,NL -3110307454,3110307839,BY +3110307454,3110307583,GB +3110307584,3110307683,BY +3110307684,3110307684,BR +3110307685,3110307839,BY 3110307840,3110308863,IE 3110308864,3110309887,RS 3110309888,3110310911,DE 3110310912,3110311935,FR -3110311936,3110315007,RU +3110311936,3110312959,RU +3110312960,3110313983,UA +3110313984,3110315007,RU 3110315008,3110316031,GB 3110316032,3110317055,RU 3110317056,3110318079,PL @@ -67311,7 +68002,8 @@ 3111755776,3111756799,NO 3111756800,3111757823,NL 3111757824,3111758335,NZ -3111758336,3111758847,HR +3111758336,3111758591,NL +3111758592,3111758847,HR 3111758848,3111759871,DK 3111759872,3111760895,IS 3111760896,3111761919,NL @@ -67988,6 +68680,205 @@ 3112520704,3112521727,PT 3112521728,3112522751,FR 3112522752,3112523775,SA +3112523776,3112524799,PL +3112524800,3112525823,IT +3112525824,3112526847,ES +3112526848,3112527871,CZ +3112527872,3112528895,DE +3112528896,3112529919,NL +3112529920,3112530943,DE +3112530944,3112531967,FR +3112531968,3112532991,ES +3112532992,3112534015,KW +3112534016,3112535039,FR +3112535040,3112536063,HR +3112536064,3112537087,CZ +3112537088,3112538111,NO +3112538112,3112539135,CZ +3112539136,3112540159,NL +3112540160,3112541183,IR +3112541184,3112542207,GB +3112542208,3112543231,PL +3112543232,3112544255,IR +3112544256,3112545279,GB +3112545280,3112546303,DE +3112546304,3112547327,GB +3112547328,3112548351,SA +3112548352,3112549375,SI +3112549376,3112550399,CZ +3112550400,3112551423,GB +3112551424,3112552447,CZ +3112552448,3112553471,ES +3112553472,3112554495,SE +3112554496,3112555519,CH +3112555520,3112556543,IR +3112556544,3112557567,IT +3112557568,3112558591,GB +3112558592,3112559615,IQ +3112559616,3112560639,RU +3112560640,3112561663,FR +3112561664,3112562687,DE +3112562688,3112563711,CZ +3112563712,3112564735,AE +3112564736,3112565759,GB +3112565760,3112566783,US +3112566784,3112567807,CZ +3112567808,3112568831,DE +3112568832,3112569855,IT +3112569856,3112571903,SE +3112571904,3112572927,DE +3112572928,3112573951,BE +3112573952,3112574975,DK +3112574976,3112577023,RU +3112577024,3112578047,ES +3112578048,3112579071,DE +3112579072,3112580095,GB +3112580096,3112581119,IT +3112581120,3112582143,NL +3112582144,3112583167,CZ +3112583168,3112584191,NL +3112584192,3112585215,IT +3112585216,3112586239,RU +3112586240,3112587263,LU +3112587264,3112588287,HU +3112588288,3112589311,DE +3112589312,3112590335,FI +3112590336,3112591359,SE +3112591360,3112592383,IR +3112592384,3112593407,FI +3112593408,3112594431,GB +3112594432,3112595455,DE +3112595456,3112596479,GR +3112596480,3112597503,CY +3112597504,3112598527,RU +3112598528,3112599551,NO +3112599552,3112600575,DE +3112600576,3112601599,SY +3112601600,3112602623,ES +3112602624,3112603647,IT +3112603648,3112604671,IE +3112604672,3112605695,RU +3112605696,3112606719,IT +3112606720,3112607743,FR +3112607744,3112608767,CZ +3112608768,3112609791,CH +3112609792,3112610815,TJ +3112610816,3112611839,GE +3112611840,3112612863,LB +3112612864,3112613887,GB +3112613888,3112614911,TR +3112614912,3112615935,SK +3112615936,3112616959,BG +3112616960,3112617983,GB +3112617984,3112620031,RU +3112620032,3112621055,NL +3112621056,3112622079,SK +3112622080,3112623103,NL +3112623104,3112624127,DE +3112624128,3112625151,GB +3112625152,3112626175,BG +3112626176,3112627199,RU +3112627200,3112628223,KZ +3112628224,3112629247,DE +3112629248,3112630271,NO +3112630272,3112631295,NL +3112631296,3112632319,DK +3112632320,3112633343,PL +3112633344,3112634367,CZ +3112634368,3112635391,DE +3112635392,3112636415,BE +3112636416,3112637439,AT +3112637440,3112638463,CZ +3112638464,3112639487,DE +3112639488,3112640511,IR +3112640512,3112641535,DE +3112641536,3112642559,GB +3112642560,3112644607,TR +3112644608,3112645631,SY +3112645632,3112646655,DE +3112646656,3112647679,GB +3112647680,3112648703,DK +3112648704,3112649727,RO +3112649728,3112650751,IQ +3112650752,3112652799,IR +3112652800,3112653823,RU +3112653824,3112654847,IR +3112654848,3112655871,PL +3112655872,3112656895,IT +3112656896,3112657919,CY +3112657920,3112658943,IT +3112658944,3112659967,GB +3112659968,3112660991,TR +3112660992,3112662015,IT +3112662016,3112663039,ES +3112663040,3112664063,PL +3112664064,3112665087,FR +3112665088,3112666111,GB +3112666112,3112667135,CZ +3112667136,3112668159,CH +3112668160,3112669183,BE +3112669184,3112670207,CZ +3112670208,3112671231,RU +3112671232,3112672255,US +3112672256,3112673279,DE +3112673280,3112674303,FR +3112674304,3112676351,GB +3112676352,3112677375,RU +3112677376,3112678399,FR +3112678400,3112679423,RU +3112679424,3112680447,BG +3112680448,3112681471,IQ +3112681472,3112682495,PL +3112682496,3112683519,CZ +3112683520,3112684543,JO +3112684544,3112685567,ES +3112685568,3112686591,GB +3112687616,3112688639,FR +3112688640,3112689663,TR +3112689664,3112690687,PL +3112690688,3112691711,IR +3112691712,3112692735,RU +3112692736,3112693759,FR +3112693760,3112694783,NL +3112694784,3112695807,GB +3112695808,3112696831,LU +3112696832,3112697855,US +3112697856,3112699903,NL +3112699904,3112700927,RO +3112700928,3112701951,KZ +3112701952,3112702975,MD +3112702976,3112703231,SE +3112703232,3112703487,FI +3112703488,3112703743,DK +3112703744,3112703999,NO +3112704000,3112705023,DE +3112705024,3112706047,ES +3112706048,3112707071,RU +3112707072,3112708095,FI +3112708096,3112709119,FR +3112709120,3112710143,IL +3112710144,3112711167,NO +3112711168,3112712191,PT +3112712192,3112713215,TR +3112713216,3112714239,AT +3112714240,3112715263,NL +3112715264,3112717311,GB +3112717312,3112718335,RU +3112718336,3112719359,AT +3112719360,3112720383,TR +3112720384,3112721407,ES +3112721408,3112722431,PL +3112722432,3112723455,BG +3112723456,3112724479,IR +3112724480,3112725503,GB +3112725504,3112726527,CZ +3112726528,3112727551,DE +3112727552,3112728575,DK +3112728576,3112729599,CH +3112729600,3112730623,IT +3112730624,3112731647,NO +3112731648,3112732671,PL +3112732672,3112733695,IT 3113710318,3113710318,CA 3120562176,3120594943,CO 3120594944,3120599039,AR @@ -68860,7 +69751,9 @@ 3164976160,3164976295,FR 3164976296,3164976303,IT 3164976304,3164995583,FR -3164995584,3165040639,NL +3164995584,3165032447,NL +3165032448,3165036543,GB +3165036544,3165040639,NL 3165040640,3165044735,SG 3165044736,3165048831,NL 3165048832,3165061119,SG @@ -68979,7 +69872,7 @@ 3167899648,3167902719,RO 3167902720,3167902975,BE 3167902976,3167903231,NL -3167903232,3167903743,RO +3167903232,3167903743,DE 3167903744,3167932415,IR 3167932416,3167933439,CH 3167933440,3167933695,RO @@ -69117,7 +70010,8 @@ 3168192000,3168192255,GB 3168192256,3168192511,RO 3168192512,3168194559,MD -3168194560,3168198655,RO +3168194560,3168196607,RO +3168196608,3168198655,IR 3168198656,3168199167,ES 3168199168,3168199679,RO 3168199680,3168200703,MD @@ -69216,7 +70110,9 @@ 3169928192,3169928447,SE 3169928448,3169935359,RO 3169935360,3169937407,ES -3169937408,3169951743,RO +3169937408,3169946623,RO +3169946624,3169947135,IT +3169947136,3169951743,RO 3169951744,3169955839,SE 3169955840,3169960191,RO 3169960192,3169960447,NL @@ -70384,7 +71280,8 @@ 3210765056,3210765071,SE 3210765072,3210765311,BR 3210765312,3210765567,CL -3210765568,3210766079,US +3210765568,3210765823,US +3210765824,3210766079,ES 3210766080,3210766335,CL 3210766336,3210766591,US 3210766592,3210766847,CL @@ -70924,7 +71821,21 @@ 3222075136,3222075391,NL 3222075392,3222274559,US 3222274560,3222274815,AU -3222274816,3222305535,US +3222274816,3222275071,US +3222275072,3222275583,JP +3222275584,3222277631,US +3222277632,3222278143,IT +3222278144,3222279679,US +3222279680,3222280191,PL +3222280192,3222281215,US +3222281216,3222281727,GB +3222281728,3222284543,US +3222284544,3222285055,BR +3222285056,3222287359,US +3222287360,3222287871,NL +3222287872,3222288383,US +3222288384,3222288895,JP +3222288896,3222305535,US 3222305536,3222309119,SE 3222309120,3222309375,DE 3222309376,3222313727,SE @@ -70956,9 +71867,10 @@ 3222941696,3222952703,US 3222952704,3222952959,AU 3222952960,3222953215,US -3222953216,3222953727,AU +3222953216,3222953471,JP +3222953472,3222953727,AU 3222953728,3222953983,US -3222953984,3222954239,AU +3222953984,3222954239,JP 3222954240,3222956287,US 3222956288,3222957567,FI 3222957824,3222962431,FI @@ -71261,7 +72173,7 @@ 3223964160,3223964415,US 3223964416,3223964671,AU 3223964672,3223965183,US -3223965184,3223965439,AU +3223965184,3223965439,ID 3223965440,3223966207,US 3223966208,3223966463,NL 3223966464,3223967743,US @@ -71309,7 +72221,7 @@ 3224030464,3224030719,US 3224030720,3224030975,CA 3224030976,3224038655,US -3224038656,3224038911,AU +3224038656,3224038911,JP 3224038912,3224084991,US 3224084992,3224087551,SE 3224087552,3224088063,US @@ -71521,7 +72433,8 @@ 3224884480,3224885247,US 3224885248,3224885503,CA 3224885504,3224886015,US -3224886016,3224886527,AU +3224886016,3224886271,AU +3224886272,3224886527,JP 3224886528,3224887295,US 3224887296,3224887551,CA 3224887552,3224889343,US @@ -71781,7 +72694,9 @@ 3225785600,3225788159,CA 3225788160,3225807359,US 3225807360,3225807615,DE -3225807616,3225812991,US +3225807616,3225811711,US +3225811712,3225811967,GB +3225811968,3225812991,US 3225812992,3225843711,FR 3225843712,3225847039,US 3225847040,3225847551,NL @@ -71885,9 +72800,10 @@ 3226012672,3226012927,AU 3226012928,3226014463,US 3226014464,3226014975,NL -3226014976,3226015487,AU +3226014976,3226015231,NZ +3226015232,3226015487,AU 3226015488,3226015743,US -3226015744,3226016255,AU +3226015744,3226016255,ID 3226016256,3226018303,US 3226018304,3226018559,DE 3226018560,3226021119,CH @@ -72176,7 +73092,7 @@ 3226792960,3226793215,ZA 3226793216,3226793983,DE 3226793984,3226795263,US -3226795264,3226795519,AU +3226795264,3226795519,NZ 3226795520,3226800127,US 3226800128,3226800639,DE 3226800640,3226811391,US @@ -72233,7 +73149,7 @@ 3227013120,3227013375,AU 3227013376,3227013887,US 3227013888,3227014399,NL -3227014400,3227014655,AU +3227014400,3227014655,NZ 3227014656,3227014911,NL 3227014912,3227017471,US 3227017472,3227017983,NL @@ -72359,7 +73275,7 @@ 3227405568,3227414271,US 3227414272,3227416063,GB 3227416064,3227417087,US -3227417088,3227417343,AU +3227417088,3227417343,BN 3227417344,3227418111,US 3227418112,3227418367,CA 3227418368,3227425791,US @@ -72593,7 +73509,7 @@ 3227846912,3227847423,US 3227847424,3227847679,NL 3227847680,3227848703,US -3227848704,3227848959,AU +3227848704,3227848959,NZ 3227848960,3227851775,US 3227851776,3227852031,NL 3227852032,3227853311,US @@ -72605,7 +73521,7 @@ 3227864064,3227865343,US 3227865344,3227867647,NL 3227867648,3227867903,BR -3227867904,3227868159,AU +3227867904,3227868159,TH 3227868160,3227872767,US 3227872768,3227873023,GB 3227873024,3227874047,NL @@ -72617,7 +73533,9 @@ 3227879680,3227879935,NL 3227879936,3227880959,US 3227880960,3227881215,MU -3227881216,3227885823,US +3227881216,3227883319,US +3227883320,3227883320,CA +3227883321,3227885823,US 3227885824,3227887871,ES 3227887872,3227888127,PR 3227888128,3227888383,NL @@ -72687,7 +73605,8 @@ 3227982848,3227985919,GB 3227985920,3227986175,DE 3227986176,3227986431,US -3227986432,3227986943,AU +3227986432,3227986687,AU +3227986688,3227986943,JP 3227986944,3227987455,US 3227987456,3227987711,AU 3227987712,3227997439,US @@ -72742,14 +73661,15 @@ 3228084480,3228085247,US 3228085248,3228085503,AU 3228085504,3228100607,US -3228100608,3228101119,AU +3228100608,3228101119,JP 3228101120,3228102143,US 3228102144,3228102399,NL 3228102400,3228103423,US 3228103424,3228103679,CA 3228103680,3228103935,US 3228103936,3228104191,FR -3228104192,3228104703,AU +3228104192,3228104447,JP +3228104448,3228104703,AU 3228104704,3228104959,NL 3228104960,3228105471,US 3228105472,3228105727,NL @@ -72853,7 +73773,7 @@ 3228348160,3228353279,US 3228353280,3228358399,SE 3228358400,3228362239,US -3228362240,3228362495,AU +3228362240,3228362495,TH 3228362496,3228363263,US 3228363264,3228363519,CH 3228363520,3228364287,US @@ -72886,7 +73806,8 @@ 3228405760,3228406015,FR 3228406016,3228406271,US 3228406272,3228406527,IN -3228406528,3228407039,FR +3228406528,3228406783,BR +3228406784,3228407039,FR 3228407296,3228420095,DE 3228420608,3228420863,DE 3228421120,3228424447,DE @@ -72923,7 +73844,7 @@ 3228522496,3228522751,NL 3228522752,3228525823,US 3228525824,3228526079,NL -3228526080,3228526335,AU +3228526080,3228526335,NZ 3228526336,3228526847,NL 3228526848,3228527103,AU 3228527104,3228531711,US @@ -73092,7 +74013,7 @@ 3229382144,3229390847,US 3229390848,3229391103,AU 3229391104,3229391359,US -3229391360,3229391615,AU +3229391360,3229391615,CN 3229391616,3229391871,NL 3229391872,3229395455,US 3229395456,3229408255,RU @@ -73135,7 +74056,8 @@ 3229830912,3229831167,NL 3229831168,3229833471,US 3229833472,3229833727,NL -3229833728,3229834495,AU +3229833728,3229834239,IN +3229834240,3229834495,AU 3229834496,3229834751,US 3229834752,3229835007,CA 3229835008,3229835263,US @@ -73162,11 +74084,11 @@ 3229878784,3229879039,IT 3229879040,3229879295,NO 3229879296,3229880063,US -3229880064,3229880319,AU +3229880064,3229880319,KR 3229880320,3229881087,US 3229881088,3229881343,CA 3229881344,3229884159,US -3229884160,3229884415,AU +3229884160,3229884415,JP 3229884416,3229884927,US 3229884928,3229885183,NL 3229885184,3229885439,BR @@ -73222,7 +74144,8 @@ 3229956864,3229958143,US 3229958144,3229958399,NL 3229958400,3229958655,US -3229958656,3229959167,AU +3229958656,3229958911,AU +3229958912,3229959167,SG 3229959168,3229962079,US 3229962080,3229962111,CA 3229962112,3229968127,US @@ -73267,7 +74190,9 @@ 3230096384,3230096639,JP 3230096640,3230096895,US 3230096896,3230097151,JP -3230097408,3230100735,JP +3230097408,3230097663,JP +3230098688,3230098943,JP +3230099200,3230100735,JP 3230100736,3230100991,US 3230100992,3230101503,PR 3230101504,3230104319,US @@ -73296,7 +74221,7 @@ 3230126848,3230128895,US 3230128896,3230129151,NL 3230129152,3230129663,US -3230129664,3230129919,AU +3230129664,3230129919,JP 3230129920,3230130431,US 3230130432,3230130687,NL 3230130688,3230131711,US @@ -73330,7 +74255,7 @@ 3230152192,3230152447,FR 3230152448,3230153215,BF 3230153216,3230153471,FR -3230153472,3230153727,AU +3230153472,3230153727,PF 3230153728,3230153983,US 3230153984,3230154239,NL 3230154240,3230156543,US @@ -73473,7 +74398,7 @@ 3230825472,3230826239,ES 3230826240,3230827519,US 3230827520,3230827775,NL -3230827776,3230828031,AU +3230827776,3230828031,NZ 3230828032,3230828543,HU 3230828544,3230829055,GB 3230829568,3230830079,RU @@ -73504,7 +74429,7 @@ 3230845184,3230845951,US 3230845952,3230846207,CZ 3230846208,3230849535,US -3230849536,3230850047,AU +3230849536,3230850047,NZ 3230850048,3230851839,US 3230851840,3230852351,NL 3230852352,3230852607,BR @@ -73646,7 +74571,7 @@ 3231028736,3231042047,US 3231042048,3231042303,GU 3231042304,3231043839,US -3231043840,3231044095,AU +3231043840,3231044095,JP 3231044096,3231047935,US 3231047936,3231048191,GB 3231048192,3231048447,US @@ -73875,7 +74800,7 @@ 3231308288,3231308799,US 3231308800,3231309055,CA 3231310848,3231316735,US -3231316736,3231316991,AU +3231316736,3231316991,NZ 3231316992,3231318783,US 3231319040,3231321343,US 3231321344,3231321599,CA @@ -73899,7 +74824,8 @@ 3231478016,3231482879,US 3231482880,3231483135,BE 3231483136,3231484927,US -3231484928,3231487999,JP +3231484928,3231485439,JP +3231485696,3231487999,JP 3231488512,3231488767,JP 3231489280,3231489535,US 3231489536,3231489791,JP @@ -73907,7 +74833,7 @@ 3231490048,3231490559,US 3231490560,3231490815,NL 3231490816,3231491327,US -3231491328,3231491583,AU +3231491328,3231491583,NZ 3231491584,3231491839,US 3231491840,3231492095,GB 3231492096,3231493631,US @@ -74124,7 +75050,7 @@ 3231793664,3231800319,US 3231800320,3231801343,CN 3231801344,3231809535,CA -3231809536,3231810047,AU +3231809536,3231810047,NZ 3231810048,3231842303,US 3231842304,3231843327,RU 3231843328,3231844351,NO @@ -74368,7 +75294,7 @@ 3233548800,3233549055,NL 3233549056,3233549311,BR 3233549312,3233557247,US -3233557248,3233557503,AU +3233557248,3233557503,NZ 3233557504,3233561855,EC 3233561856,3233562367,US 3233562368,3233562879,GB @@ -74376,7 +75302,7 @@ 3233563136,3233563903,US 3233563904,3233564159,NL 3233564160,3233564415,US -3233564416,3233564671,AU +3233564416,3233564671,NZ 3233564672,3233564927,US 3233564928,3233566719,JP 3233567744,3233567999,US @@ -74422,7 +75348,8 @@ 3233590016,3233590271,TW 3233590272,3233590527,TH 3233590528,3233590783,PR -3233590784,3233591295,AU +3233590784,3233591039,PH +3233591040,3233591295,ID 3233591296,3233593599,US 3233593600,3233593855,NZ 3233593856,3233594111,AU @@ -74434,7 +75361,7 @@ 3233596928,3233605887,US 3233605888,3233607167,PL 3233607168,3233607935,US -3233607936,3233608191,AU +3233607936,3233608191,NZ 3233608192,3233609727,HU 3233609984,3233612031,US 3233612032,3233612287,NL @@ -74445,7 +75372,7 @@ 3233615616,3233617407,US 3233617408,3233617663,CA 3233617664,3233617919,NL -3233617920,3233618175,AU +3233617920,3233618175,JP 3233618176,3233620479,US 3233620480,3233620735,AU 3233620736,3233620991,US @@ -74494,7 +75421,7 @@ 3233664256,3233665023,US 3233665024,3233666047,AU 3233666048,3233668863,US -3233668864,3233669119,AU +3233668864,3233669119,PH 3233669120,3233670399,US 3233670400,3233670655,AU 3233671680,3233676031,US @@ -74624,7 +75551,7 @@ 3234008832,3234013695,US 3234013696,3234013951,AU 3234013952,3234014975,US -3234014976,3234015487,AU +3234014976,3234015487,KR 3234015488,3234015743,US 3234015744,3234015999,IE 3234016000,3234016255,GB @@ -74662,7 +75589,7 @@ 3234055680,3234056959,US 3234056960,3234057215,CA 3234057216,3234061055,US -3234061056,3234061311,AU +3234061056,3234061311,NZ 3234061312,3234064639,US 3234064640,3234064895,AU 3234064896,3234065407,US @@ -74752,7 +75679,7 @@ 3234557440,3234564607,US 3234564608,3234566911,KR 3234566912,3234568703,US -3234568704,3234568959,AU +3234568704,3234568959,NZ 3234568960,3234569215,US 3234569216,3234569727,AU 3234569728,3234569983,CL @@ -74781,7 +75708,7 @@ 3234589696,3234590463,US 3234590464,3234590719,CA 3234590720,3234592511,US -3234592512,3234592767,AU +3234592512,3234592767,TH 3234592768,3234726143,US 3234726144,3234726399,CA 3234726400,3234726911,US @@ -74844,7 +75771,7 @@ 3234826752,3234827007,CA 3234827008,3234827519,US 3234827520,3234828031,NL -3234828032,3234828287,AU +3234828032,3234828287,NZ 3234828288,3234828799,US 3234828800,3234829055,CL 3234829056,3234830079,US @@ -74865,7 +75792,7 @@ 3234842368,3234842623,US 3234842624,3234844415,BR 3234844416,3234853375,US -3234853376,3234853631,AU +3234853376,3234853631,TH 3234853632,3234853887,US 3234853888,3234854143,EC 3234854144,3234854911,US @@ -74985,7 +75912,13 @@ 3235970560,3235970815,CA 3235970816,3235971071,US 3235971072,3235971327,CA -3235971328,3236044799,US +3235971328,3235996671,US +3235996672,3235996927,CA +3235996928,3235997695,US +3235997696,3235997951,CA +3235997952,3235998719,US +3235998720,3235999231,CA +3235999232,3236044799,US 3236044800,3236052991,CA 3236052992,3236069375,US 3236069376,3236102143,CA @@ -75003,12 +75936,28 @@ 3236163520,3236163583,IE 3236163584,3236167935,US 3236167936,3236175871,CA -3236175872,3236191487,US -3236191744,3236200447,US +3236175872,3236200447,US 3236200448,3236233215,MY 3236233216,3236239359,US 3236239360,3236241407,CA -3236241408,3236291071,US +3236241408,3236267519,US +3236267520,3236268031,DE +3236268032,3236268543,ES +3236268544,3236272639,US +3236272640,3236272895,HK +3236272896,3236273919,US +3236273920,3236274175,DE +3236274176,3236275199,US +3236275200,3236275711,FR +3236275712,3236276223,AU +3236276224,3236277759,US +3236277760,3236278783,IN +3236278784,3236281855,US +3236281856,3236282367,SG +3236282368,3236287487,US +3236287488,3236287743,EC +3236287744,3236287999,CO +3236288000,3236291071,US 3236291072,3236291327,GB 3236291328,3236302847,US 3236306944,3236312063,US @@ -75016,10 +75965,12 @@ 3236312320,3236312575,GH 3236312576,3236312831,GR 3236312832,3236313087,QA -3236313088,3236365567,US +3236313088,3236314367,US +3236314368,3236314623,GB +3236314624,3236365567,US 3236365568,3236365823,CA 3236365824,3236368127,US -3236368128,3236368383,AU +3236368128,3236368383,NZ 3236368384,3236372991,US 3236372992,3236373247,AU 3236373248,3236373503,US @@ -75145,7 +76096,11 @@ 3236958208,3236962303,AU 3236962304,3236995623,US 3236995624,3236995631,NL -3236995632,3237038079,US +3236995632,3237003263,US +3237003264,3237003519,GB +3237003520,3237016831,US +3237016832,3237017087,GB +3237017088,3237038079,US 3237038080,3237038335,CA 3237038336,3237043967,US 3237043968,3237044223,CH @@ -75180,7 +76135,7 @@ 3237291264,3237294847,US 3237294848,3237295103,CA 3237295104,3237296639,US -3237296640,3237297151,AU +3237296640,3237297151,SG 3237297152,3237297407,CL 3237297408,3237300479,US 3237302528,3237305087,US @@ -77220,7 +78175,6 @@ 3244828160,3244828415,FI 3244828416,3244828671,FR 3244828672,3244828927,SA -3244828928,3244829183,MD 3244829184,3244829439,CH 3244829440,3244829695,DK 3244829696,3244829951,IL @@ -77266,7 +78220,6 @@ 3244841216,3244841471,GB 3244841472,3244841727,DE 3244841728,3244842239,GB -3244842496,3244842751,RU 3244842752,3244843007,DE 3244843008,3244843263,UA 3244843264,3244843519,RU @@ -77299,7 +78252,6 @@ 3244850688,3244850943,GB 3244850944,3244851455,RU 3244851456,3244851711,NL -3244851712,3244851967,TR 3244851968,3244852223,GB 3244852224,3244852479,CH 3244852480,3244852735,UA @@ -77499,7 +78451,6 @@ 3244909312,3244909567,IL 3244909568,3244909823,RU 3244909824,3244910079,NL -3244910080,3244910335,CY 3244910336,3244910591,DE 3244910592,3244910847,GB 3244910848,3244911103,DE @@ -77805,7 +78756,8 @@ 3245127936,3245128191,LV 3245128192,3245128447,IT 3245128448,3245128703,CH -3245128704,3245129471,DK +3245128704,3245129215,LU +3245129216,3245129471,DK 3245129472,3245129983,GB 3245129984,3245130239,DE 3245130240,3245130495,PL @@ -80152,7 +81104,11 @@ 3253775808,3253775823,DE 3253775824,3253776159,GB 3253776160,3253776175,DE -3253776176,3253796863,GB +3253776176,3253778231,GB +3253778232,3253778239,FR +3253778240,3253778271,GB +3253778272,3253778287,DE +3253778288,3253796863,GB 3253796864,3253862399,SE 3253862400,3253862655,GB 3253862656,3253882879,FR @@ -81290,7 +82246,9 @@ 3257742336,3257743359,DE 3257743360,3257748479,NL 3257748480,3257749503,DE -3257749504,3257765887,NL +3257749504,3257753087,NL +3257753088,3257753343,DE +3257753344,3257765887,NL 3257765888,3257767935,DE 3257767936,3257782271,NL 3257782272,3257784319,DE @@ -81773,7 +82731,9 @@ 3259963392,3259964415,PL 3259964416,3259964927,GB 3259964928,3259964959,NL -3259964960,3259965439,GB +3259964960,3259965023,GB +3259965024,3259965031,DE +3259965032,3259965439,GB 3259965440,3259966463,RU 3259967488,3259968511,RS 3259968512,3259969535,RU @@ -81955,10 +82915,9 @@ 3261767680,3261775871,RS 3261775872,3261776383,PL 3261776384,3261777407,RU -3261777408,3261777449,IR +3261777408,3261777449,GB 3261777450,3261777451,NL -3261777452,3261777663,IR -3261777664,3261777919,GB +3261777452,3261777919,GB 3261777920,3261778431,PL 3261778944,3261779455,RO 3261779456,3261779967,DE @@ -82066,7 +83025,7 @@ 3262043648,3262043903,NL 3262043904,3262044159,GB 3262044160,3262044415,RS -3262044416,3262044671,DE +3262044416,3262044671,LU 3262044672,3262044927,GR 3262044928,3262045183,UA 3262045184,3262045439,LT @@ -82790,8 +83749,8 @@ 3264615168,3264616263,GB 3264616264,3264616271,CH 3264616272,3264616335,GB -3264616336,3264616336,CH -3264616337,3264617983,GB +3264616336,3264616337,CH +3264616338,3264617983,GB 3264617984,3264618239,US 3264618240,3264619391,GB 3264619392,3264619519,BE @@ -83218,8 +84177,8 @@ 3266781184,3266789375,PL 3266789376,3266797567,SM 3266797568,3266797823,GB -3266797824,3266798079,ES -3266798080,3266798847,GB +3266797824,3266798207,ES +3266798208,3266798847,GB 3266798848,3266798879,CZ 3266798880,3266804099,GB 3266804100,3266804100,NL @@ -83289,9 +84248,17 @@ 3267095552,3267096575,PL 3267096576,3267097599,DE 3267097600,3267098623,KZ -3267098624,3267099391,GB -3267099392,3267099399,BE -3267099400,3267099647,GB +3267098624,3267099007,GB +3267099008,3267099043,FR +3267099044,3267099135,GB +3267099136,3267099263,DE +3267099264,3267099327,NL +3267099328,3267099383,GB +3267099384,3267099387,NL +3267099388,3267099399,BE +3267099400,3267099407,GB +3267099408,3267099415,DE +3267099416,3267099647,GB 3267099648,3267100671,IT 3267100672,3267166207,FI 3267166208,3267231743,GB @@ -84435,6 +85402,8 @@ 3273339136,3273339391,DE 3273339392,3273340415,GB 3273340928,3273341711,FR +3273342022,3273342022,GB +3273342034,3273342034,GB 3273342208,3273342231,AE 3273342464,3273342975,DE 3273342976,3273343999,GB @@ -84545,7 +85514,7 @@ 3273436672,3273437183,DE 3273437184,3273437695,RO 3273438208,3273438719,IL -3273438720,3273439231,GB +3273438720,3273439231,UA 3273439232,3273439743,RO 3273439744,3273440255,DE 3273440256,3273440767,RO @@ -85914,7 +86883,9 @@ 3277403904,3277404159,GB 3277404160,3277404415,DE 3277404416,3277404655,IT -3277404656,3277404671,GB +3277404656,3277404664,GB +3277404665,3277404665,IT +3277404666,3277404671,GB 3277404672,3277404735,CH 3277404736,3277404927,GB 3277404928,3277405183,NL @@ -86302,7 +87273,6 @@ 3279054848,3279055359,RU 3279055360,3279055871,SA 3279056896,3279057151,RU -3279057152,3279057407,GB 3279057408,3279057919,FR 3279058944,3279059455,UA 3279059456,3279060479,RU @@ -87122,7 +88092,7 @@ 3283977728,3283978751,RU 3283978752,3283979263,RO 3283979264,3283979775,IL -3283979776,3283980287,NO +3283979776,3283980287,NL 3283980288,3283980799,RO 3283980800,3283981823,CH 3283981824,3283982335,RO @@ -87462,8 +88432,8 @@ 3285120512,3285121023,RO 3285121024,3285121535,SE 3285121536,3285122047,CY -3285122048,3285122559,GB -3285122560,3285123071,RU +3285122048,3285122303,GB +3285122304,3285123071,RU 3285123072,3285188607,BE 3285188608,3285319679,RU 3285319680,3285320191,HU @@ -87669,8 +88639,7 @@ 3285913648,3285913655,IE 3285913656,3285913703,GB 3285913704,3285913711,FI -3285913712,3285913863,GB -3285913872,3285913903,GB +3285913712,3285913903,GB 3285913920,3285913951,GB 3285917696,3285918207,GB 3285919744,3285921791,QA @@ -87702,6 +88671,7 @@ 3285939840,3285939967,GB 3285940736,3285940767,IT 3285941248,3285941503,ES +3285943808,3285944063,CH 3285949604,3285949607,CH 3285949856,3285949887,ES 3285950208,3285950463,IT @@ -88550,6 +89520,7 @@ 3288782848,3288783359,NG 3288783360,3288784127,KE 3288784128,3288785407,ZA +3288785408,3288785663,UG 3288787968,3288788223,EG 3288788224,3288792831,ZA 3288792832,3288793087,AO @@ -88944,11 +89915,17 @@ 3291549696,3291549951,LR 3291549952,3291550207,GA 3291611136,3291611647,ZA -3291742208,3292004351,US +3291742208,3291939062,US +3291939063,3291939063,JP +3291939064,3292004351,US 3292004352,3292266495,SC 3292397568,3292463103,US 3292463104,3292528639,ZA +3292528640,3294625791,MA +3294625792,3295674367,KE +3295674368,3296722943,MA 3296722944,3298820095,EG +3299344384,3299606527,TG 3299606528,3299868671,GH 3299868672,3300130815,TN 3300130816,3300392959,CI @@ -89105,6 +90082,8 @@ 3302545920,3302546431,TZ 3302546432,3302546943,SL 3302546944,3302547455,KE +3302547456,3302547967,ZW +3302547968,3302548479,CI 3302548480,3302548991,GH 3302548992,3302549503,ZA 3302549504,3302550015,KE @@ -89183,7 +90162,9 @@ 3304062976,3304456191,SC 3304456192,3304521727,NG 3304521728,3304587263,SC -3304587264,3304718335,ZA +3304587264,3304669183,ZA +3304669184,3304685567,TZ +3304701952,3304718335,AO 3304849408,3305111551,ZA 3305111552,3307208703,TN 3307208704,3309305855,EG @@ -89524,7 +90505,10 @@ 3322880000,3322888191,AU 3322888192,3322945535,US 3322945536,3322951679,CN -3322951680,3322970111,US +3322951680,3322953727,US +3322953728,3322960895,NL +3322960896,3322969343,US +3322969344,3322970111,NL 3322970112,3323002879,CA 3323002880,3323003135,US 3323003392,3323004671,US @@ -89772,7 +90756,8 @@ 3325067264,3325100287,CA 3325100288,3325100543,US 3325101056,3325108223,US -3325110272,3325128703,US +3325110272,3325122559,US +3325123072,3325128703,US 3325128704,3325129215,TH 3325129216,3325131775,US 3325131776,3325132031,AU @@ -91117,7 +92102,9 @@ 3344671744,3344676863,US 3344676864,3344677247,CA 3344677248,3344677263,US -3344677264,3344677407,CA +3344677264,3344677279,CA +3344677280,3344677295,US +3344677296,3344677407,CA 3344677408,3344677423,US 3344677424,3344678911,CA 3344678912,3344681983,US @@ -91400,8 +92387,8 @@ 3350823424,3350823935,US 3350823936,3350834687,CA 3350834688,3350835199,US -3350835200,3350836735,CA -3350836736,3350836991,US +3350835200,3350836223,CA +3350836224,3350836991,US 3350836992,3350837247,CA 3350837248,3350837759,US 3350837760,3350843391,CA @@ -91653,7 +92640,9 @@ 3353335336,3353335337,NL 3353335338,3353653503,US 3353653504,3353653759,GB -3353653760,3353714431,US +3353653760,3353688063,US +3353688064,3353688575,GB +3353688576,3353714431,US 3353714432,3353714687,BE 3353714688,3353722367,US 3353722368,3353722623,GB @@ -92133,7 +93122,8 @@ 3356157952,3356158207,CL 3356158208,3356158463,MX 3356158464,3356158719,CL -3356158976,3356159999,CL +3356158976,3356159743,CL +3356159744,3356159999,BR 3356160000,3356160255,MX 3356160256,3356160511,GT 3356160512,3356160767,CL @@ -93610,7 +94600,7 @@ 3389035776,3389036031,SG 3389036032,3389036287,AU 3389036288,3389036543,NZ -3389037056,3389037567,AU +3389036800,3389037567,AU 3389037568,3389038591,NC 3389038592,3389044735,HK 3389044736,3389046783,AU @@ -93675,7 +94665,8 @@ 3389222912,3389223935,US 3389223936,3389226239,IN 3389226240,3389226495,AU -3389226496,3389227007,IN +3389226496,3389226751,SG +3389226752,3389227007,IN 3389227008,3389227519,CN 3389227520,3389228031,PK 3389228032,3389228799,AU @@ -93703,6 +94694,7 @@ 3389302016,3389302527,AU 3389302528,3389302783,PK 3389302784,3389303039,VN +3389303040,3389303295,IN 3389303296,3389303807,ID 3389303808,3389304063,IN 3389304064,3389304319,BD @@ -93751,7 +94743,8 @@ 3389407744,3389408255,CN 3389408256,3389409279,JP 3389409280,3389409791,CN -3389409792,3389412351,AU +3389409792,3389411327,AU +3389411584,3389412351,AU 3389412352,3389412607,NZ 3389412608,3389412863,PH 3389412864,3389413119,AU @@ -94088,7 +95081,9 @@ 3390414336,3390414847,SG 3390414848,3390418943,JP 3390418944,3390423039,MV -3390423040,3390439423,SG +3390423040,3390429439,SG +3390429440,3390429951,HK +3390429952,3390439423,SG 3390439424,3390441471,NZ 3390441472,3390443519,TH 3390443520,3390447359,NZ @@ -94112,9 +95107,12 @@ 3390770432,3390770687,AU 3390770944,3390771199,AU 3390771200,3390775295,SG -3390775296,3390801919,NZ +3390775296,3390790399,NZ +3390790400,3390790655,AU +3390790656,3390801919,NZ 3390801920,3390802431,CN -3390802432,3390832639,NZ +3390802432,3390825727,NZ +3390826496,3390832639,NZ 3390832640,3390963711,TH 3390963712,3391094783,KR 3391094784,3391356927,JP @@ -94126,7 +95124,9 @@ 3391444480,3391444991,VN 3391444992,3391453183,NZ 3391453184,3391453439,ID -3391453440,3391487999,NZ +3391453440,3391469055,NZ +3391469056,3391469311,AU +3391469312,3391487999,NZ 3391488000,3391489023,CN 3391489024,3391490047,NP 3391490048,3391492095,CN @@ -94188,7 +95188,9 @@ 3391717888,3391718399,CN 3391718400,3391718911,IN 3391718912,3391719423,JP -3391719424,3391721471,NZ +3391719424,3391720959,NZ +3391720960,3391721215,CN +3391721216,3391721471,NZ 3391721472,3391721983,AU 3391721984,3391722239,TW 3391722240,3391722495,PH @@ -94352,8 +95354,7 @@ 3392130816,3392135167,ID 3392135168,3392143359,TH 3392143360,3392208895,JP -3392208896,3392217343,NZ -3392217600,3392287743,NZ +3392208896,3392287743,NZ 3392287744,3392288767,NP 3392288768,3392324607,NZ 3392324608,3392325119,AU @@ -94435,6 +95436,7 @@ 3392487424,3392499711,IN 3392499712,3392503807,JP 3392503808,3392505343,HK +3392505344,3392505855,IN 3392506880,3392507903,HK 3392507904,3392508927,KH 3392508928,3392510975,HK @@ -94600,7 +95602,6 @@ 3393021440,3393021695,IN 3393021696,3393021951,HK 3393021952,3393022463,ID -3393022464,3393022975,SG 3393022976,3393023231,PH 3393023232,3393023487,AU 3393023488,3393023743,SG @@ -94611,6 +95612,7 @@ 3393025280,3393025535,IN 3393025536,3393025791,PH 3393025792,3393026047,AU +3393026048,3393026559,IN 3393026560,3393026815,AU 3393027072,3393028095,ID 3393028096,3393060863,AU @@ -94831,7 +95833,9 @@ 3394035712,3394039807,MY 3394039808,3394040575,SG 3394040576,3394040831,IN -3394040832,3394041855,SG +3394040832,3394041087,SG +3394041088,3394041343,MY +3394041344,3394041855,SG 3394041856,3394042879,AU 3394042880,3394043903,CN 3394043904,3394060287,HK @@ -94924,6 +95928,7 @@ 3394502656,3394503679,HK 3394503680,3394507263,CN 3394507264,3394507775,JP +3394507776,3394508287,AU 3394508544,3394508799,PH 3394508800,3394510847,CN 3394510848,3394514943,BD @@ -95131,10 +96136,11 @@ 3395180032,3395180287,JP 3395180288,3395180543,HK 3395180544,3395181055,VN +3395181056,3395181567,TH 3395181568,3395182591,CN 3395182592,3395190783,SG 3395190784,3395198975,JP -3395198976,3395203071,MY +3395200768,3395201023,MY 3395203072,3395215359,JP 3395215360,3395219455,HK 3395219456,3395223551,TH @@ -95166,6 +96172,7 @@ 3397026304,3397026815,TH 3397026816,3397027071,CN 3397027072,3397027327,PH +3397027328,3397027839,IN 3397027840,3397029887,JP 3397029888,3397033983,MY 3397033984,3397038079,ID @@ -95175,7 +96182,6 @@ 3397070848,3397074943,PH 3397074944,3397083135,HK 3397083136,3397087231,CN -3397087232,3397088255,JP 3397088256,3397090303,CN 3397090304,3397091327,TW 3397091328,3397093375,GU @@ -95224,8 +96230,7 @@ 3397213184,3397213439,IN 3397213440,3397213695,AU 3397213696,3397214207,ID -3397214208,3397214719,BD -3397214720,3397215231,AU +3397214208,3397215231,AU 3397215232,3397215743,ID 3397215744,3397216255,PH 3397216256,3397216767,AU @@ -95259,7 +96264,9 @@ 3397323776,3397328895,CN 3397328896,3397330943,ID 3397330944,3397337087,CN -3397337088,3397338375,HK +3397337088,3397338039,HK +3397338040,3397338043,SG +3397338044,3397338375,HK 3397338376,3397338379,JP 3397338380,3397339647,HK 3397339648,3397339687,SG @@ -95306,8 +96313,7 @@ 3397500928,3397501951,BD 3397501952,3397503999,IN 3397504000,3397505023,TH -3397505280,3397505535,IN -3397506048,3397506559,IN +3397505024,3397506559,IN 3397506560,3397506815,AU 3397506816,3397507071,IN 3397507072,3397507583,ID @@ -95517,7 +96523,9 @@ 3398640672,3398640695,SG 3398640696,3398642431,JP 3398642432,3398642687,AU -3398642688,3398646783,JP +3398642688,3398643679,JP +3398643680,3398643695,NZ +3398643696,3398646783,JP 3398646784,3398647039,AU 3398647040,3398647807,JP 3398647808,3398655999,IN @@ -96483,7 +97491,8 @@ 3406835968,3406836735,CN 3406836736,3406838271,AU 3406838272,3406838527,CN -3406838528,3406857471,AU +3406838528,3406839551,AU +3406839808,3406857471,AU 3406857472,3406857727,CN 3406857728,3406864639,AU 3406864640,3406865151,CN @@ -96743,7 +97752,8 @@ 3407240192,3407241215,CN 3407241216,3407241983,AU 3407241984,3407242239,CN -3407242240,3407243775,AU +3407242240,3407243263,AU +3407243264,3407243775,HK 3407243776,3407244031,CN 3407244032,3407244287,AU 3407244800,3407247871,AU @@ -96772,7 +97782,8 @@ 3407282176,3407282431,CN 3407282688,3407294207,AU 3407294208,3407294463,CN -3407294464,3407297791,AU +3407294464,3407295487,AU +3407295744,3407297791,AU 3407297792,3407298559,CN 3407298560,3407300863,AU 3407300864,3407301119,CN @@ -96817,7 +97828,8 @@ 3407352320,3407352575,CN 3407352576,3407354623,AU 3407354624,3407354879,CN -3407354880,3407358719,AU +3407354880,3407357439,AU +3407357696,3407358719,AU 3407358720,3407358975,CN 3407358976,3407360511,AU 3407360512,3407361023,ID @@ -96969,7 +97981,9 @@ 3407523328,3407523583,AU 3407523584,3407523839,JP 3407523840,3407524095,CN -3407524096,3407526143,AU +3407524096,3407524607,AU +3407524608,3407524863,NZ +3407524864,3407526143,AU 3407526144,3407526399,CN 3407526400,3407530495,AU 3407530496,3407531007,CN @@ -97027,7 +98041,9 @@ 3407595520,3407595775,CN 3407595776,3407596031,AU 3407596032,3407596287,CN -3407596288,3407603967,AU +3407596288,3407602943,AU +3407602944,3407603199,JP +3407603200,3407603967,AU 3407603968,3407604223,CN 3407604224,3407604479,AU 3407604480,3407604735,IN @@ -97035,7 +98051,9 @@ 3407606016,3407606271,CN 3407606272,3407608319,AU 3407608320,3407608575,CN -3407608576,3407612415,AU +3407608576,3407608715,AU +3407608716,3407608736,JP +3407608737,3407612415,AU 3407612416,3407612671,CN 3407612672,3407612927,AU 3407612928,3407613183,CN @@ -97155,7 +98173,7 @@ 3407748608,3407750655,AU 3407750656,3407751167,SG 3407751168,3407753215,AU -3407753216,3407753727,SG +3407753216,3407753727,HK 3407753728,3407757823,AU 3407757824,3407758079,CN 3407758080,3407761663,AU @@ -97168,7 +98186,8 @@ 3407771904,3407772159,CN 3407772160,3407772415,AU 3407772416,3407772671,CN -3407772672,3407779839,AU +3407772672,3407773439,AU +3407773696,3407779839,AU 3407779840,3407780095,CN 3407780096,3407780863,AU 3407780864,3407781119,CN @@ -97220,7 +98239,9 @@ 3407826944,3407827199,CN 3407827200,3407828223,AU 3407828224,3407828479,CN -3407828480,3407831295,AU +3407828480,3407828991,AU +3407828992,3407829503,US +3407829504,3407831295,AU 3407831296,3407831551,CN 3407831552,3407833343,AU 3407833344,3407833855,CN @@ -97294,7 +98315,7 @@ 3407910912,3407911167,CN 3407911168,3407919615,AU 3407919616,3407920127,CN -3407920128,3407921151,AU +3407920384,3407921151,AU 3407921152,3407921407,CN 3407921408,3407922175,AU 3407922176,3407922431,CN @@ -97418,7 +98439,8 @@ 3408055296,3408056319,CN 3408056320,3408062463,AU 3408062464,3408062719,CN -3408062720,3408064511,AU +3408062720,3408063999,AU +3408064256,3408064511,AU 3408064512,3408064767,CN 3408065024,3408065279,CN 3408065280,3408065791,AU @@ -97438,7 +98460,7 @@ 3409387008,3409387263,CN 3409387264,3409396479,AU 3409396480,3409396735,PH -3409396736,3409403135,AU +3409396992,3409403135,AU 3409403136,3409403391,CN 3409403392,3409405183,AU 3409405184,3409405439,CN @@ -97452,7 +98474,9 @@ 3409412096,3409412607,CN 3409412608,3409416703,AU 3409416704,3409417215,CN -3409417216,3409420287,AU +3409417216,3409418495,AU +3409418496,3409418751,PL +3409418752,3409420287,AU 3409420288,3409420543,IN 3409420544,3409423615,AU 3409423616,3409423871,IN @@ -97990,7 +99014,9 @@ 3413251072,3413262335,JP 3413262336,3413263359,PH 3413263360,3413264383,IN -3413264384,3413265407,SG +3413264384,3413264639,ID +3413264640,3413264895,AU +3413264896,3413265407,SG 3413265408,3413266431,AU 3413266432,3413270527,CN 3413270528,3413278719,TH @@ -98167,7 +99193,12 @@ 3415080960,3415082239,MY 3415082240,3415083007,SG 3415083008,3415083519,AU -3415083520,3415088127,SG +3415083520,3415084031,SG +3415084032,3415084543,CN +3415084544,3415085055,US +3415085056,3415087615,SG +3415087616,3415087871,US +3415087872,3415088127,SG 3415088128,3415089151,HK 3415089152,3415097343,MY 3415097344,3415103487,ID @@ -98302,7 +99333,9 @@ 3416327168,3416328191,HK 3416328192,3416330239,AU 3416330240,3416334335,ID -3416334336,3416342527,SG +3416334336,3416339455,SG +3416339456,3416339711,IN +3416339712,3416342527,SG 3416342528,3416371199,AU 3416371200,3416371711,PH 3416371712,3416371967,VN @@ -98580,7 +99613,9 @@ 3418282240,3418282495,AU 3418282496,3418283519,PH 3418283520,3418284031,AU -3418284032,3418286079,SG +3418284032,3418285567,SG +3418285568,3418285823,JP +3418285824,3418286079,SG 3418286080,3418287103,AU 3418287104,3418288127,SG 3418288128,3418290175,ID @@ -98595,7 +99630,9 @@ 3418294272,3418296319,VN 3418296320,3418297343,HK 3418297344,3418298367,CN -3418298368,3418299391,HK +3418298368,3418298879,HK +3418298880,3418299135,CN +3418299136,3418299391,HK 3418299392,3418300415,CN 3418300416,3418300927,BD 3418300928,3418301439,IN @@ -99517,7 +100554,9 @@ 3435271680,3435507711,US 3435507712,3435511807,CA 3435511808,3436249343,US -3436249344,3436255743,CA +3436249344,3436252415,CA +3436252416,3436253183,US +3436253184,3436255743,CA 3436255744,3436256255,US 3436256256,3436278271,CA 3436278272,3436278527,US @@ -99722,7 +100761,9 @@ 3448987648,3448989695,IN 3448989696,3448990719,HK 3448990720,3448991743,IN -3448991744,3449098751,US +3448991744,3449098239,US +3449098240,3449098495,GB +3449098496,3449098751,US 3449098752,3449099263,DE 3449099264,3449100799,US 3449100800,3449101311,AU @@ -100197,7 +101238,9 @@ 3453408256,3453409023,BB 3453409024,3453409535,KN 3453409536,3453411327,BB -3453411328,3453552127,US +3453411328,3453419519,US +3453419520,3453427711,MO +3453427712,3453552127,US 3453552128,3453552383,GB 3453552384,3453552639,US 3453552640,3453552895,GB @@ -100980,8 +102023,7 @@ 3464421632,3464421887,CA 3464421888,3464426495,US 3464426496,3464426751,GD -3464426752,3464428543,US -3464428800,3464429311,US +3464426752,3464429311,US 3464429312,3464429567,CA 3464429568,3464548351,US 3464548352,3464548607,AG @@ -102457,7 +103499,9 @@ 3495375872,3495376895,CA 3495376896,3495399423,US 3495399424,3495400447,KN -3495400448,3495406335,US +3495400448,3495405055,US +3495405056,3495405567,HK +3495405568,3495406335,US 3495406336,3495406591,LB 3495406592,3495412735,US 3495412736,3495413759,CA @@ -103646,7 +104690,9 @@ 3518472192,3518762495,US 3518762496,3518762751,GB 3518762752,3518765311,US -3518765312,3518765567,CA +3518765312,3518765343,CA +3518765344,3518765351,US +3518765352,3518765567,CA 3518765568,3518912511,US 3518912512,3518912767,IN 3518912768,3518918143,US @@ -103811,7 +104857,8 @@ 3523297280,3523317759,PH 3523317760,3523330047,JP 3523330048,3523338239,AU -3523338240,3523340287,MY +3523338240,3523339775,MY +3523339776,3523340287,HK 3523340288,3523341311,AU 3523341312,3523342335,JP 3523342336,3523346431,BD @@ -103860,13 +104907,67 @@ 3523686400,3523688447,AU 3523688448,3523690495,CN 3523690496,3523698687,IN -3523698688,3523700735,JP +3523698688,3523698863,HK +3523698864,3523698879,JP +3523698880,3523698943,HK +3523698944,3523698975,JP +3523698976,3523699007,HK +3523699008,3523699071,JP +3523699072,3523699199,HK +3523699200,3523699711,US +3523699712,3523700223,JP +3523700224,3523700287,US +3523700288,3523700351,JP +3523700352,3523700415,US +3523700416,3523700671,JP +3523700672,3523700679,HK +3523700680,3523700735,JP 3523700736,3523701759,HK -3523701760,3523707903,JP +3523701760,3523702783,JP +3523702784,3523702799,SG +3523702800,3523702807,SN +3523702808,3523702847,SG +3523702848,3523702871,JP +3523702872,3523702911,SG +3523702912,3523703039,JP +3523703040,3523703103,SG +3523703104,3523704703,JP +3523704704,3523704719,SG +3523704720,3523704751,JP +3523704752,3523704783,SG +3523704784,3523704791,JP +3523704792,3523704831,SG +3523704832,3523704839,HK +3523704840,3523706879,JP +3523706880,3523707039,AU +3523707040,3523707071,JP +3523707072,3523707103,AU +3523707104,3523707119,JP +3523707120,3523707135,AU +3523707136,3523707903,GB 3523707904,3523708159,AU -3523708160,3523723263,JP +3523708160,3523708287,JP +3523708288,3523708319,AU +3523708320,3523708351,JP +3523708352,3523708415,AU +3523708416,3523708927,JP +3523708928,3523708975,AU +3523708976,3523708991,JP +3523708992,3523709183,AU +3523709184,3523713023,JP +3523713024,3523713135,AU +3523713136,3523714047,JP +3523714048,3523714719,AU +3523714720,3523714799,JP +3523714800,3523714943,AU +3523714944,3523715007,GB +3523715008,3523715031,JP +3523715032,3523715071,AU +3523715072,3523723263,JP 3523723264,3523725311,US -3523725312,3523739647,JP +3523725312,3523737599,JP +3523737600,3523738111,US +3523738112,3523739647,JP 3523739648,3524001791,AU 3524001792,3524132863,CN 3524132864,3524145151,PH @@ -103875,9 +104976,20 @@ 3524157440,3524161535,AU 3524161536,3524247551,CN 3524247552,3524263935,AU -3524263936,3524274175,PH +3524263936,3524266495,PH +3524266496,3524266751,SG +3524266752,3524274175,PH 3524274176,3524274431,SG 3524274432,3524280319,PH +3524280320,3524281343,JP +3524281344,3524282367,AU +3524282368,3524288511,IN +3524288512,3524289535,HK +3524289536,3524290559,IN +3524290560,3524291583,CN +3524291584,3524294655,IN +3524294656,3524295679,SG +3524295680,3524296703,PH 3524296704,3524313087,CN 3524313088,3524329471,KR 3524329472,3524362239,TW @@ -103895,7 +105007,9 @@ 3524745984,3524747263,MP 3524747264,3524755455,PH 3524755456,3524763647,AU -3524763648,3524788223,PH +3524763648,3524781791,PH +3524781792,3524781823,SG +3524781824,3524788223,PH 3524788224,3524853759,SG 3524853760,3526361087,CN 3526361088,3526393855,NZ @@ -103923,7 +105037,9 @@ 3526926336,3526934527,JP 3526934528,3526942719,CN 3526942720,3526950911,AU -3526950912,3527004159,JP +3526950912,3527002111,JP +3527002112,3527003647,IN +3527003648,3527004159,JP 3527004160,3527008255,ID 3527008256,3527016447,KR 3527016448,3527933951,TW @@ -104398,7 +105514,9 @@ 3559200256,3559200511,FI 3559200512,3559200639,SE 3559200640,3559200671,FI -3559200672,3559202815,SE +3559200672,3559201607,SE +3559201608,3559201615,FI +3559201616,3559202815,SE 3559202816,3559211007,DE 3559211008,3559219199,SK 3559219200,3559227391,SE @@ -105476,7 +106594,9 @@ 3567389440,3567390975,DE 3567390976,3567391231,GB 3567391232,3567391487,DE -3567391488,3567394815,GB +3567391488,3567393801,GB +3567393802,3567393802,SI +3567393803,3567394815,GB 3567394816,3567395071,IE 3567395072,3567403007,GB 3567403008,3567419391,IT @@ -105575,9 +106695,7 @@ 3568795648,3568803839,GB 3568803840,3568812031,IT 3568812032,3568828415,ES -3568828416,3568904191,DE -3568904192,3568904447,GB -3568904448,3568959487,DE +3568828416,3568959487,DE 3568959488,3569025023,AT 3569025024,3569057791,NL 3569057792,3569074687,GB @@ -106117,13 +107235,13 @@ 3579740160,3579772927,IE 3579772928,3579838463,DE 3579838464,3580100607,ES -3580100608,3580103679,SE -3580103680,3580106751,LV -3580106752,3580112895,SE +3580100608,3580103167,SE +3580103168,3580107775,LV +3580107776,3580112895,SE 3580112896,3580116991,LV 3580116992,3580131327,SE -3580131328,3580133375,LV -3580133376,3580135423,SE +3580131328,3580134399,LV +3580134400,3580135423,SE 3580135424,3580135935,EE 3580135936,3580136447,SE 3580136448,3580138495,HR @@ -106133,32 +107251,38 @@ 3580162048,3580164095,EE 3580164096,3580165887,SE 3580165888,3580166143,NL -3580166144,3580199935,SE +3580166144,3580198911,SE +3580198912,3580199551,LV +3580199552,3580199935,SE 3580199936,3580200447,EE 3580200448,3580200959,SE 3580200960,3580203007,LT -3580203008,3580204543,SE +3580203008,3580203647,SE +3580203648,3580203775,AT +3580203776,3580204543,SE 3580204544,3580205055,NL 3580205056,3580206079,SE 3580206080,3580207103,HR 3580207104,3580208127,LV 3580208128,3580209151,EE 3580209152,3580213247,HR -3580213248,3580214271,LV -3580214272,3580215295,SE +3580213248,3580215295,LV 3580215296,3580217343,EE -3580217344,3580221439,SE -3580221440,3580221951,LV +3580217344,3580220415,SE +3580220416,3580221951,LV 3580221952,3580223487,SE 3580223488,3580231679,DE -3580231680,3580232447,SE +3580231680,3580231935,SE +3580231936,3580232191,LV +3580232192,3580232447,SE 3580232448,3580233215,LT 3580233216,3580233727,SE 3580233728,3580235263,LT 3580235264,3580235775,SE 3580235776,3580236799,LT 3580236800,3580237567,LV -3580237568,3580239871,SE +3580237568,3580237823,SE +3580237824,3580239871,LV 3580239872,3580241919,EE 3580241920,3580243967,SE 3580243968,3580244991,EE @@ -106167,7 +107291,8 @@ 3580248064,3580254207,EE 3580254208,3580255231,LV 3580255232,3580258303,DE -3580258304,3580258815,SE +3580258304,3580258559,LV +3580258560,3580258815,SE 3580258816,3580260351,DE 3580260352,3580265471,AT 3580265472,3580266495,SE @@ -106322,7 +107447,9 @@ 3582443520,3582451711,DE 3582451712,3582459903,LU 3582459904,3582468095,NL -3582468096,3582476287,SE +3582468096,3582476239,SE +3582476240,3582476247,DK +3582476248,3582476287,SE 3582476288,3582484479,DE 3582484480,3582492671,CI 3582492672,3582509055,IT @@ -107210,6 +108337,7 @@ 3589810432,3589810687,PL 3589810688,3589816319,RU 3589825792,3589826047,DE +3589826718,3589826718,AT 3589827584,3589827647,DE 3589827712,3589827839,DE 3589828736,3589828991,NL @@ -109385,7 +110513,9 @@ 3650920928,3650920959,LB 3650920960,3650920991,GB 3650920992,3650921007,IL -3650921008,3650922799,GB +3650921008,3650921087,GB +3650921088,3650921215,GR +3650921216,3650922799,GB 3650922800,3650922815,FR 3650922816,3650926335,GB 3650926336,3650926591,DE @@ -109716,7 +110846,7 @@ 3663992320,3663992575,MY 3663992576,3663993599,NZ 3663993600,3663996159,ID -3663996160,3663996415,AU +3663996160,3663996415,BD 3663996416,3663996671,TH 3663996672,3663997183,AU 3663997184,3663997439,ID @@ -109901,7 +111031,7 @@ 3707207680,3707208703,BD 3707208704,3707209727,NZ 3707209728,3707211775,CN -3707211776,3707215871,ID +3707211776,3707215871,NZ 3707215872,3707217919,BD 3707217920,3707219967,ID 3707219968,3707222015,AU diff --git a/src/config/geoip6 b/src/config/geoip6 index 94e13e255c..228b046ec4 100644 --- a/src/config/geoip6 +++ b/src/config/geoip6 @@ -1,7 +1,8 @@ -# Last updated based on January 5 2016 Maxmind GeoLite2 Country +# Last updated based on February 2 2016 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 +76:96:42:219::,76:96:42:219:ffff:ffff:ffff:ffff,US 600:8801:9400:580::,600:8801:9400:580::,US 2001:200::,2001:200::7fff:ffff:ffff:ffff:ffff,JP 2001:200:120::,2001:200:120:7fff:ffff:ffff:ffff:ffff,JP @@ -90,7 +91,9 @@ 2001:420:4084::,2001:420:4084:7fff:ffff:ffff:ffff:ffff,GB 2001:420:4084:8000::,2001:420:4085:ffff:ffff:ffff:ffff:ffff,US 2001:420:4086::,2001:420:4086:7fff:ffff:ffff:ffff:ffff,GB -2001:420:4086:8000::,2001:420:44d9:ffff:ffff:ffff:ffff:ffff,US +2001:420:4086:8000::,2001:420:4490:ffff:ffff:ffff:ffff:ffff,US +2001:420:4491::,2001:420:4491:7fff:ffff:ffff:ffff:ffff,NL +2001:420:4491:8000::,2001:420:44d9:ffff:ffff:ffff:ffff:ffff,US 2001:420:44da::,2001:420:44da:7fff:ffff:ffff:ffff:ffff,ES 2001:420:44da:8000::,2001:420:44ef:ffff:ffff:ffff:ffff:ffff,US 2001:420:44f0::,2001:420:44f0:7fff:ffff:ffff:ffff:ffff,FR @@ -114,13 +117,17 @@ 2001:420:5505::,2001:420:5505:7fff:ffff:ffff:ffff:ffff,IN 2001:420:5505:8000::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US 2001:420:5883::,2001:420:5883:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5883:8000::,2001:420:5894:ffff:ffff:ffff:ffff:ffff,US +2001:420:5883:8000::,2001:420:5894:11ff:ffff:ffff:ffff:ffff,US +2001:420:5894:1200::,2001:420:5894:12ff:ffff:ffff:ffff:ffff,CN +2001:420:5894:1300::,2001:420:5894:ffff:ffff:ffff:ffff:ffff,US 2001:420:5895::,2001:420:5895:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5895:8000::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US +2001:420:5895:8000::,2001:420:5899:ffff:ffff:ffff:ffff:ffff,US +2001:420:589a::,2001:420:589a:7fff:ffff:ffff:ffff:ffff,CN +2001:420:589a:8000::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US 2001:420:5a40::,2001:420:5a40:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5a40:8000::,2001:420:5a44:11ff:ffff:ffff:ffff:ffff,US -2001:420:5a44:1200::,2001:420:5a44:12ff:ffff:ffff:ffff:ffff,CN -2001:420:5a44:1300::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US +2001:420:5a40:8000::,2001:420:5a43:ffff:ffff:ffff:ffff:ffff,US +2001:420:5a44::,2001:420:5a44:7fff:ffff:ffff:ffff:ffff,CN +2001:420:5a44:8000::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US 2001:420:5c40::,2001:420:5c40:7fff:ffff:ffff:ffff:ffff,SG 2001:420:5c40:8000::,2001:420:5c40:ffff:ffff:ffff:ffff:ffff,US 2001:420:5c41::,2001:420:5c41:7fff:ffff:ffff:ffff:ffff,SG @@ -160,8 +167,8 @@ 2001:470::,2001:470:0:284::,US 2001:470:0:284::1,2001:470:0:284::1,AT 2001:470:0:284::2,2001:470:17:ffff:ffff:ffff:ffff:ffff,US -2001:470:18::,2001:470:18:7ff:ffff:ffff:ffff:ffff,CN -2001:470:18:800::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US +2001:470:18::,2001:470:18:7fff:ffff:ffff:ffff:ffff,CN +2001:470:18:8000::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US 2001:470:19::,2001:470:19:7fff:ffff:ffff:ffff:ffff,HK 2001:470:19:8000::,2001:470:1c:ff:ffff:ffff:ffff:ffff,US 2001:470:1c:100::,2001:470:1c:7ff:ffff:ffff:ffff:ffff,CA @@ -169,9 +176,9 @@ 2001:470:1c:900::,2001:470:1c:bff:ffff:ffff:ffff:ffff,CA 2001:470:1c:c00::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US 2001:470:1d::,2001:470:1d:7fff:ffff:ffff:ffff:ffff,CA -2001:470:1d:8000::,2001:470:23:ffff:ffff:ffff:ffff:ffff,US -2001:470:24::,2001:470:24:7fff:ffff:ffff:ffff:ffff,TW -2001:470:24:8000::,2001:470:26:b6c:ffff:ffff:ffff:ffff,US +2001:470:1d:8000::,2001:470:23:7ff:ffff:ffff:ffff:ffff,US +2001:470:23:800::,2001:470:23:bff:ffff:ffff:ffff:ffff,KR +2001:470:23:c00::,2001:470:26:b6c:ffff:ffff:ffff:ffff,US 2001:470:26:b6d::,2001:470:26:b6d:ffff:ffff:ffff:ffff,AT 2001:470:26:b6e::,2001:470:27:1a5:ffff:ffff:ffff:ffff,US 2001:470:27:1a6::,2001:470:27:1a6:ffff:ffff:ffff:ffff,RU @@ -179,44 +186,46 @@ 2001:470:28:36::,2001:470:28:36:ffff:ffff:ffff:ffff,SE 2001:470:28:37::,2001:470:28:1a5:ffff:ffff:ffff:ffff,US 2001:470:28:1a6::,2001:470:28:1a6:ffff:ffff:ffff:ffff,RU -2001:470:28:1a7::,2001:470:28:9c1:ffff:ffff:ffff:ffff,US +2001:470:28:1a7::,2001:470:28:2df:ffff:ffff:ffff:ffff,US +2001:470:28:2e0::,2001:470:28:2e0:ffff:ffff:ffff:ffff,SE +2001:470:28:2e1::,2001:470:28:9c1:ffff:ffff:ffff:ffff,US 2001:470:28:9c2::,2001:470:28:9c2:ffff:ffff:ffff:ffff,SE 2001:470:28:9c3::,2001:470:28:a2b:ffff:ffff:ffff:ffff,US 2001:470:28:a2c::,2001:470:28:a2c:ffff:ffff:ffff:ffff,SE 2001:470:28:a2d::,2001:470:3c:ffff:ffff:ffff:ffff:ffff,US 2001:470:3d::,2001:470:3d:7fff:ffff:ffff:ffff:ffff,PH -2001:470:3d:8000::,2001:470:6d:ffff:ffff:ffff:ffff:ffff,US -2001:470:6e::,2001:470:6e:3ff:ffff:ffff:ffff:ffff,CZ -2001:470:6e:400::,2001:470:6f:49e:ffff:ffff:ffff:ffff,US +2001:470:3d:8000::,2001:470:6e:ffff:ffff:ffff:ffff:ffff,US +2001:470:6f::,2001:470:6f:49e:ffff:ffff:ffff:ffff,CZ 2001:470:6f:49f::,2001:470:6f:49f:ffff:ffff:ffff:ffff,SK -2001:470:6f:4a0::,2001:470:70:6ff:ffff:ffff:ffff:ffff,US +2001:470:6f:4a0::,2001:470:6f:7fff:ffff:ffff:ffff:ffff,CZ +2001:470:6f:8000::,2001:470:70:6ff:ffff:ffff:ffff:ffff,US 2001:470:70:700::,2001:470:70:7ff:ffff:ffff:ffff:ffff,RU -2001:470:70:800::,2001:470:70:ffff:ffff:ffff:ffff:ffff,US -2001:470:71::,2001:470:71:5ff:ffff:ffff:ffff:ffff,UA +2001:470:70:800::,2001:470:71:5ff:ffff:ffff:ffff:ffff,US 2001:470:71:600::,2001:470:71:600:ffff:ffff:ffff:ffff,PL -2001:470:71:601::,2001:470:71:60b:ffff:ffff:ffff:ffff,UA +2001:470:71:601::,2001:470:71:60b:ffff:ffff:ffff:ffff,US 2001:470:71:60c::,2001:470:71:60c:ffff:ffff:ffff:ffff,PL -2001:470:71:60d::,2001:470:71:7fff:ffff:ffff:ffff:ffff,UA -2001:470:71:8000::,2001:470:d2:ffff:ffff:ffff:ffff:ffff,US +2001:470:71:60d::,2001:470:d2:ffff:ffff:ffff:ffff:ffff,US 2001:470:d3::,2001:470:d3:7fff:ffff:ffff:ffff:ffff,DE 2001:470:d3:8000::,2001:470:1857:ffff:ffff:ffff:ffff:ffff,US 2001:470:1858::,2001:470:1858:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1858:8000::,2001:470:18c1:7fff:ffff:ffff:ffff:ffff,US +2001:470:1858:8000::,2001:470:18ae:ffff:ffff:ffff:ffff:ffff,US +2001:470:18af::,2001:470:18af:7fff:ffff:ffff:ffff:ffff,GB +2001:470:18af:8000::,2001:470:18c1:7fff:ffff:ffff:ffff:ffff,US 2001:470:18c1:8000::,2001:470:18c1:ffff:ffff:ffff:ffff:ffff,GB 2001:470:18c2::,2001:470:1f07:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f08::,2001:470:1f08:1ff:ffff:ffff:ffff:ffff,GB -2001:470:1f08:200::,2001:470:1f08:415::1,US +2001:470:1f08::,2001:470:1f08:3ff:ffff:ffff:ffff:ffff,GB +2001:470:1f08:400::,2001:470:1f08:415::1,US 2001:470:1f08:415::2,2001:470:1f08:415::2,GB -2001:470:1f08:415::3,2001:470:1f08:bff:ffff:ffff:ffff:ffff,US -2001:470:1f08:c00::,2001:470:1f08:dff:ffff:ffff:ffff:ffff,GB -2001:470:1f08:e00::,2001:470:1f08:fff:ffff:ffff:ffff:ffff,US +2001:470:1f08:415::3,2001:470:1f08:fff:ffff:ffff:ffff:ffff,US 2001:470:1f08:1000::,2001:470:1f08:11ff:ffff:ffff:ffff:ffff,GB 2001:470:1f08:1200::,2001:470:1f08:13ff:ffff:ffff:ffff:ffff,RU 2001:470:1f08:1400::,2001:470:1f08:17ff:ffff:ffff:ffff:ffff,US 2001:470:1f08:1800::,2001:470:1f08:1fff:ffff:ffff:ffff:ffff,GB -2001:470:1f08:2000::,2001:470:1f08:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f09::,2001:470:1f09:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1f09:8000::,2001:470:1f0a:7ff:ffff:ffff:ffff:ffff,US +2001:470:1f08:2000::,2001:470:1f09:2b5:ffff:ffff:ffff:ffff,US +2001:470:1f09:2b6::,2001:470:1f09:2b6:ffff:ffff:ffff:ffff,GB +2001:470:1f09:2b7::,2001:470:1f09:414:ffff:ffff:ffff:ffff,US +2001:470:1f09:415::,2001:470:1f09:415:ffff:ffff:ffff:ffff,GB +2001:470:1f09:416::,2001:470:1f0a:7ff:ffff:ffff:ffff:ffff,US 2001:470:1f0a:800::,2001:470:1f0a:bff:ffff:ffff:ffff:ffff,RU 2001:470:1f0a:c00::,2001:470:1f0b:30e:ffff:ffff:ffff:ffff,US 2001:470:1f0b:30f::,2001:470:1f0b:30f:ffff:ffff:ffff:ffff,DE @@ -271,7 +280,9 @@ 2001:470:49e5:8000::,2001:470:49e5:ffff:ffff:ffff:ffff:ffff,CN 2001:470:49e6::,2001:470:507c:ffff:ffff:ffff:ffff:ffff,US 2001:470:507d::,2001:470:507d:7fff:ffff:ffff:ffff:ffff,UA -2001:470:507d:8000::,2001:470:52ba:ffff:ffff:ffff:ffff:ffff,US +2001:470:507d:8000::,2001:470:51e8:ffff:ffff:ffff:ffff:ffff,US +2001:470:51e9::,2001:470:51e9:7fff:ffff:ffff:ffff:ffff,DE +2001:470:51e9:8000::,2001:470:52ba:ffff:ffff:ffff:ffff:ffff,US 2001:470:52bb::,2001:470:52bb:7fff:ffff:ffff:ffff:ffff,UA 2001:470:52bb:8000::,2001:470:52c5:ffff:ffff:ffff:ffff:ffff,US 2001:470:52c6::,2001:470:52c6:7fff:ffff:ffff:ffff:ffff,DE @@ -281,7 +292,9 @@ 2001:470:5803:8000::,2001:470:5803:ffff:ffff:ffff:ffff:ffff,CZ 2001:470:5804::,2001:470:5853:ffff:ffff:ffff:ffff:ffff,US 2001:470:5854::,2001:470:5854:7fff:ffff:ffff:ffff:ffff,CZ -2001:470:5854:8000::,2001:470:591a:ffff:ffff:ffff:ffff:ffff,US +2001:470:5854:8000::,2001:470:587d:ffff:ffff:ffff:ffff:ffff,US +2001:470:587e::,2001:470:587e:7fff:ffff:ffff:ffff:ffff,CZ +2001:470:587e:8000::,2001:470:591a:ffff:ffff:ffff:ffff:ffff,US 2001:470:591b::,2001:470:591b:7fff:ffff:ffff:ffff:ffff,CZ 2001:470:591b:8000::,2001:470:591c:ffff:ffff:ffff:ffff:ffff,US 2001:470:591d::,2001:470:591d:7fff:ffff:ffff:ffff:ffff,CZ @@ -297,9 +310,13 @@ 2001:470:5a35::,2001:470:5a35:ffff:ffff:ffff:ffff:ffff,CZ 2001:470:5a36::,2001:470:5a39:ffff:ffff:ffff:ffff:ffff,US 2001:470:5a3a::,2001:470:5a3a:ffff:ffff:ffff:ffff:ffff,CZ -2001:470:5a3b::,2001:470:60a2:ffff:ffff:ffff:ffff:ffff,US +2001:470:5a3b::,2001:470:5a80:ffff:ffff:ffff:ffff:ffff,US +2001:470:5a81::,2001:470:5a81:ffff:ffff:ffff:ffff:ffff,CZ +2001:470:5a82::,2001:470:60a2:ffff:ffff:ffff:ffff:ffff,US 2001:470:60a3::,2001:470:60a3:7fff:ffff:ffff:ffff:ffff,BY -2001:470:60a3:8000::,2001:470:60f4:7fff:ffff:ffff:ffff:ffff,US +2001:470:60a3:8000::,2001:470:60e4:ffff:ffff:ffff:ffff:ffff,US +2001:470:60e5::,2001:470:60e5:7fff:ffff:ffff:ffff:ffff,PL +2001:470:60e5:8000::,2001:470:60f4:7fff:ffff:ffff:ffff:ffff,US 2001:470:60f4:8000::,2001:470:60f4:ffff:ffff:ffff:ffff:ffff,PL 2001:470:60f5::,2001:470:613f:ffff:ffff:ffff:ffff:ffff,US 2001:470:6140::,2001:470:6140:7fff:ffff:ffff:ffff:ffff,PL @@ -341,9 +358,7 @@ 2001:470:6b77::,2001:470:6b77:7fff:ffff:ffff:ffff:ffff,GB 2001:470:6b77:8000::,2001:470:6bba:ffff:ffff:ffff:ffff:ffff,US 2001:470:6bbb::,2001:470:6bbb:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6bbb:8000::,2001:470:6bd1:ffff:ffff:ffff:ffff:ffff,US -2001:470:6bd2::,2001:470:6bd2:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6bd2:8000::,2001:470:6bee:7fff:ffff:ffff:ffff:ffff,US +2001:470:6bbb:8000::,2001:470:6bee:7fff:ffff:ffff:ffff:ffff,US 2001:470:6bee:8000::,2001:470:6bee:ffff:ffff:ffff:ffff:ffff,IN 2001:470:6bef::,2001:470:6c0d:ffff:ffff:ffff:ffff:ffff,US 2001:470:6c0e::,2001:470:6c0e:7fff:ffff:ffff:ffff:ffff,GB @@ -391,13 +406,17 @@ 2001:470:7193::,2001:470:7193:7fff:ffff:ffff:ffff:ffff,DE 2001:470:7193:8000::,2001:470:71d4:ffff:ffff:ffff:ffff:ffff,US 2001:470:71d5::,2001:470:71d5:7fff:ffff:ffff:ffff:ffff,UA -2001:470:71d5:8000::,2001:470:7280:ffff:ffff:ffff:ffff:ffff,US +2001:470:71d5:8000::,2001:470:71f7:ffff:ffff:ffff:ffff:ffff,US +2001:470:71f8::,2001:470:71f8:7fff:ffff:ffff:ffff:ffff,DE +2001:470:71f8:8000::,2001:470:7280:ffff:ffff:ffff:ffff:ffff,US 2001:470:7281::,2001:470:7281:7fff:ffff:ffff:ffff:ffff,DE 2001:470:7281:8000::,2001:470:7286:ffff:ffff:ffff:ffff:ffff,US 2001:470:7287::,2001:470:7287:ffff:ffff:ffff:ffff:ffff,PL 2001:470:7288::,2001:470:72bd:ffff:ffff:ffff:ffff:ffff,US 2001:470:72be::,2001:470:72be:7fff:ffff:ffff:ffff:ffff,DE -2001:470:72be:8000::,2001:470:7309:ffff:ffff:ffff:ffff:ffff,US +2001:470:72be:8000::,2001:470:72da:ffff:ffff:ffff:ffff:ffff,US +2001:470:72db::,2001:470:72db:7fff:ffff:ffff:ffff:ffff,RU +2001:470:72db:8000::,2001:470:7309:ffff:ffff:ffff:ffff:ffff,US 2001:470:730a::,2001:470:730a:7fff:ffff:ffff:ffff:ffff,DE 2001:470:730a:8000::,2001:470:7368:ffff:ffff:ffff:ffff:ffff,US 2001:470:7369::,2001:470:7369:7fff:ffff:ffff:ffff:ffff,TR @@ -405,7 +424,9 @@ 2001:470:7384::,2001:470:7384:7fff:ffff:ffff:ffff:ffff,BG 2001:470:7384:8000::,2001:470:73d1:ffff:ffff:ffff:ffff:ffff,US 2001:470:73d2::,2001:470:73d2:7fff:ffff:ffff:ffff:ffff,DE -2001:470:73d2:8000::,2001:470:742b:7fff:ffff:ffff:ffff:ffff,US +2001:470:73d2:8000::,2001:470:73e8:7fff:ffff:ffff:ffff:ffff,US +2001:470:73e8:8000::,2001:470:73e8:ffff:ffff:ffff:ffff:ffff,DE +2001:470:73e9::,2001:470:742b:7fff:ffff:ffff:ffff:ffff,US 2001:470:742b:8000::,2001:470:742b:ffff:ffff:ffff:ffff:ffff,RU 2001:470:742c::,2001:470:7479:ffff:ffff:ffff:ffff:ffff,US 2001:470:747a::,2001:470:747a:7fff:ffff:ffff:ffff:ffff,DE @@ -431,7 +452,9 @@ 2001:470:785a::,2001:470:785a:ffff:ffff:ffff:ffff:ffff,AT 2001:470:785b::,2001:470:78ab:ffff:ffff:ffff:ffff:ffff,US 2001:470:78ac::,2001:470:78ac:7fff:ffff:ffff:ffff:ffff,NL -2001:470:78ac:8000::,2001:470:78db:ffff:ffff:ffff:ffff:ffff,US +2001:470:78ac:8000::,2001:470:78c7:ffff:ffff:ffff:ffff:ffff,US +2001:470:78c8::,2001:470:78c8:7fff:ffff:ffff:ffff:ffff,NL +2001:470:78c8:8000::,2001:470:78db:ffff:ffff:ffff:ffff:ffff,US 2001:470:78dc::,2001:470:78dc:7fff:ffff:ffff:ffff:ffff,NL 2001:470:78dc:8000::,2001:470:78e3:ffff:ffff:ffff:ffff:ffff,US 2001:470:78e4::,2001:470:78e4:7fff:ffff:ffff:ffff:ffff,NL @@ -445,7 +468,9 @@ 2001:470:7a92::,2001:470:7a92:7fff:ffff:ffff:ffff:ffff,DE 2001:470:7a92:8000::,2001:470:7a99:ffff:ffff:ffff:ffff:ffff,US 2001:470:7a9a::,2001:470:7a9a:ffff:ffff:ffff:ffff:ffff,NL -2001:470:7a9b::,2001:470:7ba6:ffff:ffff:ffff:ffff:ffff,US +2001:470:7a9b::,2001:470:7b22:ffff:ffff:ffff:ffff:ffff,US +2001:470:7b23::,2001:470:7b23:7fff:ffff:ffff:ffff:ffff,ES +2001:470:7b23:8000::,2001:470:7ba6:ffff:ffff:ffff:ffff:ffff,US 2001:470:7ba7::,2001:470:7ba7:7fff:ffff:ffff:ffff:ffff,NL 2001:470:7ba7:8000::,2001:470:7baf:ffff:ffff:ffff:ffff:ffff,US 2001:470:7bb0::,2001:470:7bb0:7fff:ffff:ffff:ffff:ffff,BE @@ -473,7 +498,9 @@ 2001:470:80f1::,2001:470:80f1:7fff:ffff:ffff:ffff:ffff,AU 2001:470:80f1:8000::,2001:470:814c:ffff:ffff:ffff:ffff:ffff,US 2001:470:814d::,2001:470:814d:7fff:ffff:ffff:ffff:ffff,AU -2001:470:814d:8000::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US +2001:470:814d:8000::,2001:470:81b0:ffff:ffff:ffff:ffff:ffff,US +2001:470:81b1::,2001:470:81b1:7fff:ffff:ffff:ffff:ffff,CN +2001:470:81b1:8000::,2001:470:81ee:ffff:ffff:ffff:ffff:ffff,US 2001:470:81ef::,2001:470:81ef:7fff:ffff:ffff:ffff:ffff,CA 2001:470:81ef:8000::,2001:470:828d:ffff:ffff:ffff:ffff:ffff,US 2001:470:828e::,2001:470:828e:7fff:ffff:ffff:ffff:ffff,CA @@ -497,13 +524,13 @@ 2001:470:8c40::,2001:470:8c40:7fff:ffff:ffff:ffff:ffff,CA 2001:470:8c40:8000::,2001:470:8c6b:ffff:ffff:ffff:ffff:ffff,US 2001:470:8c6c::,2001:470:8c6c:7fff:ffff:ffff:ffff:ffff,AU -2001:470:8c6c:8000::,2001:470:90a6:ffff:ffff:ffff:ffff:ffff,US -2001:470:90a7::,2001:470:90a7:7fff:ffff:ffff:ffff:ffff,GB -2001:470:90a7:8000::,2001:470:94f2:7fff:ffff:ffff:ffff:ffff,US +2001:470:8c6c:8000::,2001:470:94f2:7fff:ffff:ffff:ffff:ffff,US 2001:470:94f2:8000::,2001:470:94f2:ffff:ffff:ffff:ffff:ffff,CZ 2001:470:94f3::,2001:470:9616:ffff:ffff:ffff:ffff:ffff,US 2001:470:9617::,2001:470:9617:7fff:ffff:ffff:ffff:ffff,GB -2001:470:9617:8000::,2001:470:974e:ffff:ffff:ffff:ffff:ffff,US +2001:470:9617:8000::,2001:470:9678:ffff:ffff:ffff:ffff:ffff,US +2001:470:9679::,2001:470:9679:7fff:ffff:ffff:ffff:ffff,GB +2001:470:9679:8000::,2001:470:974e:ffff:ffff:ffff:ffff:ffff,US 2001:470:974f::,2001:470:974f:7fff:ffff:ffff:ffff:ffff,GB 2001:470:974f:8000::,2001:470:9794:ffff:ffff:ffff:ffff:ffff,US 2001:470:9795::,2001:470:9795:ffff:ffff:ffff:ffff:ffff,GB @@ -515,9 +542,7 @@ 2001:470:99b9::,2001:470:99b9:7fff:ffff:ffff:ffff:ffff,DE 2001:470:99b9:8000::,2001:470:9d38:ffff:ffff:ffff:ffff:ffff,US 2001:470:9d39::,2001:470:9d39:7fff:ffff:ffff:ffff:ffff,DE -2001:470:9d39:8000::,2001:470:9ebf:ffff:ffff:ffff:ffff:ffff,US -2001:470:9ec0::,2001:470:9ec0:7fff:ffff:ffff:ffff:ffff,DE -2001:470:9ec0:8000::,2001:470:9f5e:ffff:ffff:ffff:ffff:ffff,US +2001:470:9d39:8000::,2001:470:9f5e:ffff:ffff:ffff:ffff:ffff,US 2001:470:9f5f::,2001:470:9f5f:7fff:ffff:ffff:ffff:ffff,RU 2001:470:9f5f:8000::,2001:470:b009:ffff:ffff:ffff:ffff:ffff,US 2001:470:b00a::,2001:470:b00a:7fff:ffff:ffff:ffff:ffff,CA @@ -525,13 +550,19 @@ 2001:470:b048::,2001:470:b048:7fff:ffff:ffff:ffff:ffff,CA 2001:470:b048:8000::,2001:470:b083:ffff:ffff:ffff:ffff:ffff,US 2001:470:b084::,2001:470:b084:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b084:8000::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US +2001:470:b084:8000::,2001:470:b08d:ffff:ffff:ffff:ffff:ffff,US +2001:470:b08e::,2001:470:b08e:7fff:ffff:ffff:ffff:ffff,CA +2001:470:b08e:8000::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US 2001:470:b0e2::,2001:470:b0e2:ffff:ffff:ffff:ffff:ffff,CA 2001:470:b0e3::,2001:470:b136:7fff:ffff:ffff:ffff:ffff,US 2001:470:b136:8000::,2001:470:b136:ffff:ffff:ffff:ffff:ffff,CA 2001:470:b137::,2001:470:b14d:ffff:ffff:ffff:ffff:ffff,US 2001:470:b14e::,2001:470:b14e:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b14e:8000::,2001:470:b218:ffff:ffff:ffff:ffff:ffff,US +2001:470:b14e:8000::,2001:470:b16f:ffff:ffff:ffff:ffff:ffff,US +2001:470:b170::,2001:470:b170:7fff:ffff:ffff:ffff:ffff,CA +2001:470:b170:8000::,2001:470:b1c3:ffff:ffff:ffff:ffff:ffff,US +2001:470:b1c4::,2001:470:b1c4:7fff:ffff:ffff:ffff:ffff,CA +2001:470:b1c4:8000::,2001:470:b218:ffff:ffff:ffff:ffff:ffff,US 2001:470:b219::,2001:470:b219:7fff:ffff:ffff:ffff:ffff,CA 2001:470:b219:8000::,2001:470:b23e:ffff:ffff:ffff:ffff:ffff,US 2001:470:b23f::,2001:470:b23f:7fff:ffff:ffff:ffff:ffff,CA @@ -571,13 +602,13 @@ 2001:470:b518::,2001:470:b518:7fff:ffff:ffff:ffff:ffff,PL 2001:470:b518:8000::,2001:470:b59e:ffff:ffff:ffff:ffff:ffff,US 2001:470:b59f::,2001:470:b59f:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b59f:8000::,2001:470:b60d:ffff:ffff:ffff:ffff:ffff,US +2001:470:b59f:8000::,2001:470:b5f5:ffff:ffff:ffff:ffff:ffff,US +2001:470:b5f6::,2001:470:b5f6:7fff:ffff:ffff:ffff:ffff,DE +2001:470:b5f6:8000::,2001:470:b60d:ffff:ffff:ffff:ffff:ffff,US 2001:470:b60e::,2001:470:b60e:7fff:ffff:ffff:ffff:ffff,DE 2001:470:b60e:8000::,2001:470:b625:ffff:ffff:ffff:ffff:ffff,US 2001:470:b626::,2001:470:b626:7fff:ffff:ffff:ffff:ffff,DE -2001:470:b626:8000::,2001:470:b7a4:ffff:ffff:ffff:ffff:ffff,US -2001:470:b7a5::,2001:470:b7a5:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b7a5:8000::,2001:470:b7b6:ffff:ffff:ffff:ffff:ffff,US +2001:470:b626:8000::,2001:470:b7b6:ffff:ffff:ffff:ffff:ffff,US 2001:470:b7b7::,2001:470:b7b7:7fff:ffff:ffff:ffff:ffff,AT 2001:470:b7b7:8000::,2001:470:b8e6:ffff:ffff:ffff:ffff:ffff,US 2001:470:b8e7::,2001:470:b8e7:7fff:ffff:ffff:ffff:ffff,CR @@ -599,7 +630,9 @@ 2001:470:cd93:8000::,2001:470:cd93:ffff:ffff:ffff:ffff:ffff,FR 2001:470:cd94::,2001:470:d050:ffff:ffff:ffff:ffff:ffff,US 2001:470:d051::,2001:470:d051:7fff:ffff:ffff:ffff:ffff,NL -2001:470:d051:8000::,2001:470:d17a:ffff:ffff:ffff:ffff:ffff,US +2001:470:d051:8000::,2001:470:d075:ffff:ffff:ffff:ffff:ffff,US +2001:470:d076::,2001:470:d076:7fff:ffff:ffff:ffff:ffff,NL +2001:470:d076:8000::,2001:470:d17a:ffff:ffff:ffff:ffff:ffff,US 2001:470:d17b::,2001:470:d17b:7fff:ffff:ffff:ffff:ffff,PL 2001:470:d17b:8000::,2001:470:d4ec:ffff:ffff:ffff:ffff:ffff,US 2001:470:d4ed::,2001:470:d4ed:7fff:ffff:ffff:ffff:ffff,FR @@ -611,7 +644,9 @@ 2001:470:d891::,2001:470:d891:7fff:ffff:ffff:ffff:ffff,BR 2001:470:d891:8000::,2001:470:d9cc:ffff:ffff:ffff:ffff:ffff,US 2001:470:d9cd::,2001:470:d9cd:7fff:ffff:ffff:ffff:ffff,DO -2001:470:d9cd:8000::,2001:470:db28:ffff:ffff:ffff:ffff:ffff,US +2001:470:d9cd:8000::,2001:470:da01:ffff:ffff:ffff:ffff:ffff,US +2001:470:da02::,2001:470:da02:7fff:ffff:ffff:ffff:ffff,AR +2001:470:da02:8000::,2001:470:db28:ffff:ffff:ffff:ffff:ffff,US 2001:470:db29::,2001:470:db29:7fff:ffff:ffff:ffff:ffff,DO 2001:470:db29:8000::,2001:470:dc00:ffff:ffff:ffff:ffff:ffff,US 2001:470:dc01::,2001:470:dc01:7fff:ffff:ffff:ffff:ffff,SE @@ -661,7 +696,9 @@ 2001:470:e1e5::,2001:470:e1e5:7fff:ffff:ffff:ffff:ffff,CA 2001:470:e1e5:8000::,2001:470:e20e:ffff:ffff:ffff:ffff:ffff,US 2001:470:e20f::,2001:470:e20f:7fff:ffff:ffff:ffff:ffff,CA -2001:470:e20f:8000::,2001:470:e939:ffff:ffff:ffff:ffff:ffff,US +2001:470:e20f:8000::,2001:470:e2fa:ffff:ffff:ffff:ffff:ffff,US +2001:470:e2fb::,2001:470:e2fb:7fff:ffff:ffff:ffff:ffff,CA +2001:470:e2fb:8000::,2001:470:e939:ffff:ffff:ffff:ffff:ffff,US 2001:470:e93a::,2001:470:e93a:7fff:ffff:ffff:ffff:ffff,CA 2001:470:e93a:8000::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US 2001:470:e97f::,2001:470:e97f:7fff:ffff:ffff:ffff:ffff,CA @@ -677,7 +714,9 @@ 2001:470:ecf7::,2001:470:ecf7:7fff:ffff:ffff:ffff:ffff,ID 2001:470:ecf7:8000::,2001:470:ed26:ffff:ffff:ffff:ffff:ffff,US 2001:470:ed27::,2001:470:ed27:7fff:ffff:ffff:ffff:ffff,ID -2001:470:ed27:8000::,2001:470:ed3c:ffff:ffff:ffff:ffff:ffff,US +2001:470:ed27:8000::,2001:470:ed39:ffff:ffff:ffff:ffff:ffff,US +2001:470:ed3a::,2001:470:ed3a:7fff:ffff:ffff:ffff:ffff,SG +2001:470:ed3a:8000::,2001:470:ed3c:ffff:ffff:ffff:ffff:ffff,US 2001:470:ed3d::,2001:470:ed3d:7fff:ffff:ffff:ffff:ffff,SG 2001:470:ed3d:8000::,2001:470:ed42:ffff:ffff:ffff:ffff:ffff,US 2001:470:ed43::,2001:470:ed43:7fff:ffff:ffff:ffff:ffff,ID @@ -705,7 +744,9 @@ 2001:470:f83d:8000::,2001:470:f83d:ffff:ffff:ffff:ffff:ffff,CN 2001:470:f83e::,2001:470:f891:ffff:ffff:ffff:ffff:ffff,US 2001:470:f892::,2001:470:f892:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f892:8000::,2001:470:f91b:ffff:ffff:ffff:ffff:ffff,US +2001:470:f892:8000::,2001:470:f90f:7fff:ffff:ffff:ffff:ffff,US +2001:470:f90f:8000::,2001:470:f90f:ffff:ffff:ffff:ffff:ffff,CN +2001:470:f910::,2001:470:f91b:ffff:ffff:ffff:ffff:ffff,US 2001:470:f91c::,2001:470:f91c:7fff:ffff:ffff:ffff:ffff,CN 2001:470:f91c:8000::,2001:470:fa48:ffff:ffff:ffff:ffff:ffff,US 2001:470:fa49::,2001:470:fa49:7fff:ffff:ffff:ffff:ffff,CN @@ -983,6 +1024,15 @@ 2001:678:d0::,2001:678:d0:ffff:ffff:ffff:ffff:ffff,NL 2001:678:d4::,2001:678:d4:ffff:ffff:ffff:ffff:ffff,IT 2001:678:d8::,2001:678:d8:ffff:ffff:ffff:ffff:ffff,LV +2001:678:dc::,2001:678:dc:ffff:ffff:ffff:ffff:ffff,NL +2001:678:e0::,2001:678:e0:ffff:ffff:ffff:ffff:ffff,MD +2001:678:e4::,2001:678:e4:ffff:ffff:ffff:ffff:ffff,SE +2001:678:e8::,2001:678:e8:ffff:ffff:ffff:ffff:ffff,CZ +2001:678:ec::,2001:678:ec:ffff:ffff:ffff:ffff:ffff,RU +2001:678:f0::,2001:678:f0:ffff:ffff:ffff:ffff:ffff,SE +2001:678:f4::,2001:678:f4:ffff:ffff:ffff:ffff:ffff,RU +2001:678:f8::,2001:678:f8:ffff:ffff:ffff:ffff:ffff,DE +2001:678:fc::,2001:678:fc:ffff:ffff:ffff:ffff:ffff,LT 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 @@ -1012,6 +1062,7 @@ 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:78::,2001:67c:78:ffff:ffff:ffff:ffff:ffff,NL 2001:67c:7c::,2001:67c:7c:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:80::,2001:67c:80:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:84::,2001:67c:84:ffff:ffff:ffff:ffff:ffff,CZ @@ -1170,7 +1221,8 @@ 2001:67c:2f0::,2001:67c:2f0:ffff:ffff:ffff:ffff:ffff,RU 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:2fc::,2001:67c:2fc:7fff:ffff:ffff:ffff:ffff,DE +2001:67c:2fc:8000::,2001:67c:2fc:ffff:ffff:ffff:ffff:ffff,US 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 @@ -1555,7 +1607,6 @@ 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:1168::,2001:67c:1168:ffff:ffff:ffff:ffff:ffff,PL 2001:67c:116c::,2001:67c:116c:ffff:ffff:ffff:ffff:ffff,SE @@ -1740,7 +1791,6 @@ 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 @@ -1912,7 +1962,6 @@ 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 @@ -2633,7 +2682,6 @@ 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 @@ -2956,6 +3004,10 @@ 2001:67c:2f34::,2001:67c:2f34:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:2f38::,2001:67c:2f38:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2f3c::,2001:67c:2f3c:ffff:ffff:ffff:ffff:ffff,GB +2001:67c:2f40::,2001:67c:2f40:ffff:ffff:ffff:ffff:ffff,BG +2001:67c:2f44::,2001:67c:2f44:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2f48::,2001:67c:2f48:ffff:ffff:ffff:ffff:ffff,UA +2001:67c:2f4c::,2001:67c:2f4c:ffff:ffff:ffff:ffff:ffff,BG 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 @@ -2977,13 +3029,17 @@ 2001:6f8:900::,2001:6f8:900:ffff:ffff:ffff:ffff:ffff,DE 2001:6f8:901::,2001:6f8:91c:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:91d::,2001:6f8:91d:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:91d:8000::,2001:6f8:1011:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:91d:8000::,2001:6f8:96b:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:96c::,2001:6f8:96c:7fff:ffff:ffff:ffff:ffff,DE +2001:6f8:96c:8000::,2001:6f8:1011:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:1012::,2001:6f8:1012:7fff:ffff:ffff:ffff:ffff,DE 2001:6f8:1012:8000::,2001:6f8:107c:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:107d::,2001:6f8:107d:7fff:ffff:ffff:ffff:ffff,DE 2001:6f8:107d:8000::,2001:6f8:10f1:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:10f2::,2001:6f8:10f2:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:10f2:8000::,2001:6f8:11ab:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:10f2:8000::,2001:6f8:1182:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:1183::,2001:6f8:1183:7fff:ffff:ffff:ffff:ffff,DE +2001:6f8:1183:8000::,2001:6f8:11ab:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:11ac::,2001:6f8:11ac:7fff:ffff:ffff:ffff:ffff,DE 2001:6f8:11ac:8000::,2001:6f8:11b1:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:11b2::,2001:6f8:11b2:7fff:ffff:ffff:ffff:ffff,AT @@ -2993,7 +3049,9 @@ 2001:6f8:12ca:8000::,2001:6f8:12ca:ffff:ffff:ffff:ffff:ffff,DE 2001:6f8:12cb::,2001:6f8:12d8:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:12d9::,2001:6f8:12d9:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:12d9:8000::,2001:6f8:13e0:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:12d9:8000::,2001:6f8:1368:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:1369::,2001:6f8:1369:7fff:ffff:ffff:ffff:ffff,DE +2001:6f8:1369:8000::,2001:6f8:13e0:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:13e1::,2001:6f8:13e1:7fff:ffff:ffff:ffff:ffff,DE 2001:6f8:13e1:8000::,2001:6f8:13ff:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:1400::,2001:6f8:14ff:ffff:ffff:ffff:ffff:ffff,BE @@ -3034,11 +3092,14 @@ 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:7e8::,2001:7e8:c036:ffff:ffff:ffff:ffff:ffff,LU +2001:7e8:c037::,2001:7e8:c037:7fff:ffff:ffff:ffff:ffff,FR +2001:7e8:c037:8000::,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:4:ffff:ffff:ffff:ffff:ffff,GB +2001:7f8:5::,2001:7f8:5:ffff:ffff:ffff:ffff:ffff,RU 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 @@ -3243,9 +3304,7 @@ 2001:920:18a1::,2001:920:18a1:7fff:ffff:ffff:ffff:ffff,DE 2001:920:18a1:8000::,2001:920:18ad:ffff:ffff:ffff:ffff:ffff,GB 2001:920:18ae::,2001:920:18ae:7fff:ffff:ffff:ffff:ffff,DE -2001:920:18ae:8000::,2001:920:18bf:ffff:ffff:ffff:ffff:ffff,GB -2001:920:18c0::,2001:920:18c0:7fff:ffff:ffff:ffff:ffff,DE -2001:920:18c0:8000::,2001:920:18c0:ffff:ffff:ffff:ffff:ffff,GB +2001:920:18ae:8000::,2001:920:18c0:ffff:ffff:ffff:ffff:ffff,GB 2001:920:18c1::,2001:920:18c1:7fff:ffff:ffff:ffff:ffff,DE 2001:920:18c1:8000::,2001:920:5809:ffff:ffff:ffff:ffff:ffff,GB 2001:920:580a::,2001:920:580a:7fff:ffff:ffff:ffff:ffff,ES @@ -3299,7 +3358,9 @@ 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:a60::,2001:a61:2175:7fff:ffff:ffff:ffff:ffff,DE +2001:a61:2175:8000::,2001:a61:2175:ffff:ffff:ffff:ffff:ffff,CH +2001:a61:2176::,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 @@ -3311,7 +3372,9 @@ 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:ac8::,2001:ac8:20::ffff:ffff:ffff:ffff,GB +2001:ac8:20:1::,2001:ac8:20:1:ffff:ffff:ffff:ffff,DE +2001:ac8:20:2::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:ad0::,2001:ad0:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:ad8::,2001:ae1:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:ae8::,2001:ae8:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -3690,7 +3753,6 @@ 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 @@ -3869,21 +3931,35 @@ 2001:df0:2c00::,2001:df0:2c00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:2e00::,2001:df0:2e00:ffff:ffff:ffff:ffff:ffff,CN 2001:df0:3000::,2001:df0:3000:ffff:ffff:ffff:ffff:ffff,PH +2001:df0:3200::,2001:df0:3200:ffff:ffff:ffff:ffff:ffff,PK +2001:df0:3600::,2001:df0:3600:ffff:ffff:ffff:ffff:ffff,SG 2001:df0:3800::,2001:df0:3800:ffff:ffff:ffff:ffff:ffff,MY +2001:df0:3a00::,2001:df0:3a00:ffff:ffff:ffff:ffff:ffff,IN 2001:df0:3c00::,2001:df0:3c00:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:3e00::,2001:df0:3e00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:4200::,2001:df0:4200:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:4400::,2001:df0:4400:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:4600::,2001:df0:4600:ffff:ffff:ffff:ffff:ffff,SG 2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK +2001:df0:4a00::,2001:df0:4a00:ffff:ffff:ffff:ffff:ffff,PK +2001:df0:4e00::,2001:df0:4e00:ffff:ffff:ffff:ffff:ffff,TW 2001:df0:5000::,2001:df0:5000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:5200::,2001:df0:5200:ffff:ffff:ffff:ffff:ffff,IN 2001:df0:5400::,2001:df0:5400:ffff:ffff:ffff:ffff:ffff,AU +2001:df0:5600::,2001:df0:5600:ffff:ffff:ffff:ffff:ffff,MY 2001:df0:5800::,2001:df0:5800:ffff:ffff:ffff:ffff:ffff,ID +2001:df0:5a00::,2001:df0:5a00:ffff:ffff:ffff:ffff:ffff,BD 2001:df0:5c00::,2001:df0:5c00:ffff:ffff:ffff:ffff:ffff,BD +2001:df0:5e00::,2001:df0:5e00:ffff:ffff:ffff:ffff:ffff,AU 2001:df0:6000::,2001:df0:6000:ffff:ffff:ffff:ffff:ffff,IN +2001:df0:6200::,2001:df0:6200:ffff:ffff:ffff:ffff:ffff,MY 2001:df0:6400::,2001:df0:6400:ffff:ffff:ffff:ffff:ffff,SG +2001:df0:6600::,2001:df0:6600:ffff:ffff:ffff:ffff:ffff,SG 2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP +2001:df0:6a00::,2001:df0:6a00: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 @@ -3934,7 +4010,6 @@ 2001:df1:4800::,2001:df1:4800:ffff:ffff:ffff:ffff:ffff,IN 2001:df1:4c00::,2001:df1:4c00:ffff:ffff:ffff:ffff:ffff,HK 2001:df1:5000::,2001:df1:5000:ffff:ffff:ffff:ffff:ffff,HK -2001:df1:5400::,2001:df1:5400:ffff:ffff:ffff:ffff:ffff,KR 2001:df1:5800::,2001:df1:5800:ffff:ffff:ffff:ffff:ffff,BD 2001:df1:5c00::,2001:df1:5c00:ffff:ffff:ffff:ffff:ffff,ID 2001:df1:6000::,2001:df1:6000:ffff:ffff:ffff:ffff:ffff,SG @@ -4343,7 +4418,7 @@ 2001:df7:f800::,2001:df7:f800:ffff:ffff:ffff:ffff:ffff,IN 2001:df7:fc00::,2001:df7:fc00:ffff:ffff:ffff:ffff:ffff,SG 2001:df8::,2001:df8:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,ID +2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,NZ 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 @@ -4597,8 +4672,8 @@ 2001:16c0:1234:8000::,2001:16c7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:16d8::,2001:16d8:dcff:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:dd00::,2001:16d8:dd00:ffff:ffff:ffff:ffff:ffff,DK -2001:16d8:dd01::,2001:16d8:dd72:ffff:ffff:ffff:ffff:ffff,SE +2001:16d8:dd00::,2001:16d8:dd00:7fff:ffff:ffff:ffff:ffff,DK +2001:16d8:dd00:8000::,2001:16d8:dd72:ffff:ffff:ffff:ffff:ffff,SE 2001:16d8:dd73::,2001:16d8:dd73:7fff:ffff:ffff:ffff:ffff,DK 2001:16d8:dd73:8000::,2001:16d8:dd84:ffff:ffff:ffff:ffff:ffff,SE 2001:16d8:dd85::,2001:16d8:dd85:7fff:ffff:ffff:ffff:ffff,DK @@ -4688,8 +4763,8 @@ 2001:19f0:5000:8000::,2001:19f0:5000:ffff:ffff:ffff:ffff:ffff,NL 2001:19f0:5001::,2001:19f0:5800:7fff:ffff:ffff:ffff:ffff,US 2001:19f0:5800:8000::,2001:19f0:5800:ffff:ffff:ffff:ffff:ffff,AU -2001:19f0:5801::,2001:19f0:67ff:ffff:ffff:ffff:ffff:ffff,US -2001:19f0:6800::,2001:19f0:6800:87ff:ffff:ffff:ffff:ffff,FR +2001:19f0:5801::,2001:19f0:6800:7fff:ffff:ffff:ffff:ffff,US +2001:19f0:6800:8000::,2001:19f0:6800:87ff:ffff:ffff:ffff:ffff,FR 2001:19f0:6800:8800::,2001:19f0:6c00:7fff:ffff:ffff:ffff:ffff,US 2001:19f0:6c00:8000::,2001:19f0:6c00:ffff:ffff:ffff:ffff:ffff,DE 2001:19f0:6c01::,2001:19f0:7000:9bc8:ffff:ffff:ffff:ffff,US @@ -4767,16 +4842,16 @@ 2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:2002:2f8::,2001:2002:2f8:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:2f9:8000::,2001:2002:2f9:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:3e14:8000::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:4e42::,2001:2002:4e42:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:4e43::,2001:2002:4e44:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:3e14::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:4e42::,2001:2002:4e44:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:4e45::,2001:2002:4e45:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:4e46::,2001:2002:4e46:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:4e47::,2001:2002:4e47:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:4e48::,2001:2002:4e48:afff:ffff:ffff:ffff:ffff,SE -2001:2002:4e49::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:51e0::,2001:2002:51e1:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e2::,2001:2002:51e2:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e3::,2001:2002:51e5:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e6::,2001:2002:51e6:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:4e48:c000::,2001:2002:4e49:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:51e0::,2001:2002:51e0:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:51e1::,2001:2002:51e1:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:51e3:8000::,2001:2002:51e6:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:51e7::,2001:2002:51e9:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:51eb::,2001:2002:51eb:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:51ec:8000::,2001:2002:51ec:ffff:ffff:ffff:ffff:ffff,SE @@ -4784,15 +4859,18 @@ 2001:2002:5ae0::,2001:2002:5ae1:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:5ae2::,2001:2002:5ae3:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:5ae4:8000::,2001:2002:5ae4:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:5ae5:8000::,2001:2002:5ae6:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:5ae6:8000::,2001:2002:5ae6:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:c2ec:8000::,2001:2002:c2ec:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:c343:8000::,2001:2002:c343:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:c3c6::,2001:2002:c3c6:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:c3fc::,2001:2002:c3fc:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:d541::,2001:2002:d541:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:d543::,2001:2002:d543:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:d540::,2001:2002:d540:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d541::,2001:2002:d542:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d543::,2001:2002:d543:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:d9d0::,2001:2002:d9d0:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:d9d2::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:d9d1::,2001:2002:d9d1:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d9d2::,2001:2002:d9d2:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:d9d3:8000::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:d9d4:8000::,2001:2002:d9d4:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:d9d7::,2001:2002:d9d7:ffff:ffff:ffff:ffff:ffff,SE 2001:2003:50dc::,2001:2003:50df:7fff:ffff:ffff:ffff:ffff,FI @@ -4804,6 +4882,7 @@ 2001:2003:f072:8000::,2001:2003:f072:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f0ab::,2001:2003:f0ab:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f0b6::,2001:2003:f0b6:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f0c8:8000::,2001:2003:f0c8:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f0e5:8000::,2001:2003:f0e5:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f13d:8000::,2001:2003:f13d:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f19b::,2001:2003:f19b:7fff:ffff:ffff:ffff:ffff,FI @@ -4828,16 +4907,21 @@ 2001:2003:f4a6:8000::,2001:2003:f4a6:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f543::,2001:2003:f543:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f5dc::,2001:2003:f5dc:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f603:8000::,2001:2003:f603:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f617::,2001:2003:f617:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f620::,2001:2003:f620:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f639::,2001:2003:f639:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f64e::,2001:2003:f64e:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f662::,2001:2003:f662:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f67c:8000::,2001:2003:f67c:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f6a9:8000::,2001:2003:f6a9:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f6ba::,2001:2003:f6ba:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f6da::,2001:2003:f6da:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f72a::,2001:2003:f72a:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f72c:8000::,2001:2003:f72c:ffff:ffff:ffff:ffff:ffff,FI +2001:2003:f744:8000::,2001:2003:f744:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f764::,2001:2003:f764:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f786::,2001:2003:f786:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f798:8000::,2001:2003:f798:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f7a3:8000::,2001:2003:f7a3:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f802::,2001:2003:f802:7fff:ffff:ffff:ffff:ffff,FI @@ -4845,6 +4929,7 @@ 2001:2003:f825:8000::,2001:2003:f825:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f839::,2001:2003:f839:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f83c::,2001:2003:f83c:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f849::,2001:2003:f849:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f882:8000::,2001:2003:f882:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f8d4::,2001:2003:f8d4:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f8f6:8000::,2001:2003:f8f6:ffff:ffff:ffff:ffff:ffff,FI @@ -4869,7 +4954,14 @@ 2001:2010:d038:8000::,2001:2010:d038:ffff:ffff:ffff:ffff:ffff,DK 2001:2010:d039:8000::,2001:2010:d03a:ffff:ffff:ffff:ffff:ffff,DK 2001:2010:d04e:8000::,2001:2010:d04e:ffff:ffff:ffff:ffff:ffff,DK +2001:2011:c002::,2001:2011:c002:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:3ec6::,2001:2012:3ec6:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:3ec7:8000::,2001:2012:3ec7:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:c213:8000::,2001:2012:c213:ffff:ffff:ffff:ffff:ffff,DK 2001:2040:4b::,2001:2040:4b:ffff:ffff:ffff:ffff:ffff,SE +2001:2040:c006::,2001:2040:c006:ffff:ffff:ffff:ffff:ffff,SE +2001:2060:41::,2001:2060:41:7fff:ffff:ffff:ffff:ffff,FI +2001:2060:bffb::,2001:2060:bffb: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 @@ -4925,7 +5017,9 @@ 2001:41d0:2:4dbe::,2001:41d0:2:4dbe:ffff:ffff:ffff:ffff,CZ 2001:41d0:2:4dbf::,2001:41d0:a:5dff:ffff:ffff:ffff:ffff,FR 2001:41d0:a:5e00::,2001:41d0:a:5fff:ffff:ffff:ffff:ffff,ES -2001:41d0:a:6000::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:41d0:a:6000::,2001:41d0:129:9bff:ffff:ffff:ffff:ffff,FR +2001:41d0:129:9c00::,2001:41d0:129:9cff:ffff:ffff:ffff:ffff,NL +2001:41d0:129:9d00::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:41d8::,2001:41d8:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:41e0::,2001:41e0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:41e8::,2001:41e8:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -5105,6 +5199,7 @@ 2001:43f8:af0::,2001:43f8:af1:ffff:ffff:ffff:ffff:ffff,BJ 2001:43f8:b00::,2001:43f8:b00:ffff:ffff:ffff:ffff:ffff,KE 2001:43f8:b10::,2001:43f8:b10:ffff:ffff:ffff:ffff:ffff,NG +2001:43f8:b20::,2001:43f8:b20:ffff:ffff:ffff:ffff:ffff,CI 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 @@ -5221,7 +5316,9 @@ 2001:4960::,2001:4960:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4968::,2001:4968:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4970::,2001:4970:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:4978::,2001:4978:1e2:ffff:ffff:ffff:ffff:ffff,US +2001:4978::,2001:4978:f:7fff:ffff:ffff:ffff:ffff,US +2001:4978:f:8000::,2001:4978:f:ffff:ffff:ffff:ffff:ffff,CA +2001:4978:10::,2001:4978:1e2:ffff:ffff:ffff:ffff:ffff,US 2001:4978:1e3::,2001:4978:1e3:7fff:ffff:ffff:ffff:ffff,CA 2001:4978:1e3:8000::,2001:4978:2d0:ffff:ffff:ffff:ffff:ffff,US 2001:4978:2d1::,2001:4978:2d1:7fff:ffff:ffff:ffff:ffff,CA @@ -5280,12 +5377,16 @@ 2001:4c00::,2001:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:4c08::,2001:4c08:2000:ffff:ffff:ffff:ffff:ffff,GB 2001:4c08:2001::,2001:4c08:2001:7fff:ffff:ffff:ffff:ffff,NL -2001:4c08:2001:8000::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4c08:2001:8000::,2001:4c08:200c:ffff:ffff:ffff:ffff:ffff,GB +2001:4c08:200d::,2001:4c08:200d:7fff:ffff:ffff:ffff:ffff,DE +2001:4c08:200d:8000::,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,NO 2001:4c28:1::,2001:4c28:1:7fff:ffff:ffff:ffff:ffff,RU -2001:4c28:1:8000::,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO +2001:4c28:1:8000::,2001:4c28:2fff:ffff:ffff:ffff:ffff:ffff,NO +2001:4c28:3000::,2001:4c28:3000:7fff:ffff:ffff:ffff:ffff,US +2001:4c28:3000:8000::,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 @@ -5362,15 +5463,13 @@ 2003:61:ea1c::,2003:61:ea1c:7fff:ffff:ffff:ffff:ffff,GB 2003:61:ea1c:8000::,2003:62:4e56:7fff:ffff:ffff:ffff:ffff,DE 2003:62:4e56:8000::,2003:62:4e56:ffff:ffff:ffff:ffff:ffff,CH -2003:62:4e57::,2003:77:8f34:ffff:ffff:ffff:ffff:ffff,DE -2003:77:8f35::,2003:77:8f35:7fff:ffff:ffff:ffff:ffff,NL -2003:77:8f35:8000::,2003:7a:8943:7fff:ffff:ffff:ffff:ffff,DE -2003:7a:8943:8000::,2003:7a:8943:ffff:ffff:ffff:ffff:ffff,US -2003:7a:8944::,2003:84:ab78:ffff:ffff:ffff:ffff:ffff,DE -2003:84:ab79::,2003:84:ab79:7fff:ffff:ffff:ffff:ffff,RO -2003:84:ab79:8000::,2003:87:292f:ffff:ffff:ffff:ffff:ffff,DE +2003:62:4e57::,2003:6a:7f66:7fff:ffff:ffff:ffff:ffff,DE +2003:6a:7f66:8000::,2003:6a:7f66:ffff:ffff:ffff:ffff:ffff,CH +2003:6a:7f67::,2003:87:292f:ffff:ffff:ffff:ffff:ffff,DE 2003:87:2930::,2003:87:2930:7fff:ffff:ffff:ffff:ffff,NZ -2003:87:2930:8000::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2003:87:2930:8000::,2003:87:2968:7fff:ffff:ffff:ffff:ffff,DE +2003:87:2968:8000::,2003:87:2968:ffff:ffff:ffff:ffff:ffff,NZ +2003:87:2969::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2067:8e00::,2067:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US 2160:150::,2160:150:7fff:ffff:ffff:ffff:ffff:ffff,US 2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR @@ -5558,9 +5657,7 @@ 2400:8380::,2400:8380:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8400::,2400:8400:ffff:ffff:ffff:ffff:ffff:ffff,JP 2400:8480::,2400:8480:ffff:ffff:ffff:ffff:ffff:ffff,MM -2400:8500::,2400:8500:24ff:ffff:ffff:ffff:ffff:ffff,JP -2400:8500:2500::,2400:8500:2500:7fff:ffff:ffff:ffff:ffff,US -2400:8500:2500:8000::,2400:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP +2400:8500::,2400:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP 2400:8580::,2400:8580:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:8600::,2400:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:8680::,2400:8680:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -5570,11 +5667,7 @@ 2400:8880::,2400:8880:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:8900::,2400:8900::f03c:91ff:fe70:9ac8,SG 2400:8900::f03c:91ff:fe70:9ac9,2400:8900::f03c:91ff:fe70:9ac9,JP -2400:8900::f03c:91ff:fe70:9aca,2400:8900:e000:ffff:ffff:ffff:ffff:ffff,SG -2400:8900:e001::,2400:8900:e001:29ff:ffff:ffff:ffff:ffff,CN -2400:8900:e001:2a00::,2400:8900:e001:2a00::,SG -2400:8900:e001:2a00::1,2400:8900:e001:7fff:ffff:ffff:ffff:ffff,CN -2400:8900:e001:8000::,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG +2400:8900::f03c:91ff:fe70:9aca,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 @@ -5695,9 +5788,78 @@ 2400:c900::,2400:c900:ffff:ffff:ffff:ffff:ffff:ffff,ID 2400:c980::,2400:c980:ffff:ffff:ffff:ffff:ffff:ffff,SG 2400:ca00::,2400:ca00:ffff:ffff:ffff:ffff:ffff:ffff,BD -2400:cb00::,2400:cb00:f00c:ffff:ffff:ffff:ffff:ffff,HK -2400:cb00:f00d::,2400:cb00:f00d:7fff:ffff:ffff:ffff:ffff,US -2400:cb00:f00d:8000::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00::,2400:cb00::ffff:ffff:ffff:ffff:ffff,US +2400:cb00:1::,2400:cb00:3:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:4::,2400:cb00:4:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:5::,2400:cb00:10:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:11::,2400:cb00:12:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:13::,2400:cb00:13:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:14::,2400:cb00:17:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:18::,2400:cb00:18:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:19::,2400:cb00:19:ffff:ffff:ffff:ffff:ffff,FR +2400:cb00:1a::,2400:cb00:1f:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:20::,2400:cb00:20:ffff:ffff:ffff:ffff:ffff,NL +2400:cb00:21::,2400:cb00:21:ffff:ffff:ffff:ffff:ffff,GB +2400:cb00:22::,2400:cb00:22:ffff:ffff:ffff:ffff:ffff,JP +2400:cb00:23::,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:26:ffff:ffff:ffff:ffff:ffff,AU +2400:cb00:27::,2400:cb00:28:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:29::,2400:cb00:29:ffff:ffff:ffff:ffff:ffff,CA +2400:cb00:2a::,2400:cb00:2f:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:30::,2400:cb00:30:ffff:ffff:ffff:ffff:ffff,AT +2400:cb00:31::,2400:cb00:31:ffff:ffff:ffff:ffff:ffff,CZ +2400:cb00:32::,2400:cb00:32:ffff:ffff:ffff:ffff:ffff,SE +2400:cb00:33::,2400:cb00:33:ffff:ffff:ffff:ffff:ffff,PL +2400:cb00:34::,2400:cb00:34:ffff:ffff:ffff:ffff:ffff,KR +2400:cb00:35::,2400:cb00:35:ffff:ffff:ffff:ffff:ffff,SG +2400:cb00:36::,2400:cb00:36:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:37::,2400:cb00:37:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:38::,2400:cb00:38:ffff:ffff:ffff:ffff:ffff,CL +2400:cb00:39::,2400:cb00:39:ffff:ffff:ffff:ffff:ffff,IT +2400:cb00:3a::,2400:cb00:3f:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:40::,2400:cb00:40:ffff:ffff:ffff:ffff:ffff,ES +2400:cb00:41::,2400:cb00:41:ffff:ffff:ffff:ffff:ffff,CO +2400:cb00:42::,2400:cb00:42:ffff:ffff:ffff:ffff:ffff,BR +2400:cb00:43::,2400:cb00:43:ffff:ffff:ffff:ffff:ffff,PE +2400:cb00:44::,2400:cb00:44:ffff:ffff:ffff:ffff:ffff,AR +2400:cb00:45::,2400:cb00:45:ffff:ffff:ffff:ffff:ffff,ZA +2400:cb00:46::,2400:cb00:46:ffff:ffff:ffff:ffff:ffff,NZ +2400:cb00:47::,2400:cb00:47:ffff:ffff:ffff:ffff:ffff,AU +2400:cb00:48::,2400:cb00:48:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:49::,2400:cb00:49:ffff:ffff:ffff:ffff:ffff,FR +2400:cb00:4a::,2400:cb00:4f:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:50::,2400:cb00:50:ffff:ffff:ffff:ffff:ffff,RO +2400:cb00:51::,2400:cb00:51:ffff:ffff:ffff:ffff:ffff,JP +2400:cb00:52::,2400:cb00:52:ffff:ffff:ffff:ffff:ffff,IE +2400:cb00:53::,2400:cb00:53:ffff:ffff:ffff:ffff:ffff,KW +2400:cb00:54::,2400:cb00:54:ffff:ffff:ffff:ffff:ffff,QA +2400:cb00:55::,2400:cb00:55:ffff:ffff:ffff:ffff:ffff,OM +2400:cb00:56::,2400:cb00:56:ffff:ffff:ffff:ffff:ffff,MY +2400:cb00:57::,2400:cb00:59:ffff:ffff:ffff:ffff:ffff,IN +2400:cb00:5a::,2400:cb00:5f:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:60::,2400:cb00:60:ffff:ffff:ffff:ffff:ffff,AE +2400:cb00:61::,2400:cb00:61:ffff:ffff:ffff:ffff:ffff,KE +2400:cb00:62::,2400:cb00:62:ffff:ffff:ffff:ffff:ffff,EG +2400:cb00:63::,2400:cb00:63:ffff:ffff:ffff:ffff:ffff,GB +2400:cb00:64::,2400:cb00:64:ffff:ffff:ffff:ffff:ffff,CH +2400:cb00:65::,2400:cb00:65:ffff:ffff:ffff:ffff:ffff,DK +2400:cb00:66::,2400:cb00:66:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:67::,2400:cb00:67:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:68::,2400:cb00:68:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:69::,2400:cb00:69:ffff:ffff:ffff:ffff:ffff,CA +2400:cb00:6a::,2400:cb00:6f:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:70::,2400:cb00:70:ffff:ffff:ffff:ffff:ffff,CA +2400:cb00:71::,2400:cb00:71:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:72::,2400:cb00:72:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:73::,2400:cb00:73:ffff:ffff:ffff:ffff:ffff,PL +2400:cb00:74::,2400:cb00:74:ffff:ffff:ffff:ffff:ffff,BG +2400:cb00:75::,2400:cb00:75:ffff:ffff:ffff:ffff:ffff,DE +2400:cb00:76::,2400:cb00:77:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:78::,2400:cb00:78:ffff:ffff:ffff:ffff:ffff,BE +2400:cb00:79::,2400:cb00:82:ffff:ffff:ffff:ffff:ffff,HK +2400:cb00:83::,2400:cb00:83:ffff:ffff:ffff:ffff:ffff,NO +2400:cb00:84::,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 @@ -5918,7 +6080,9 @@ 2401:3d80::,2401:3d80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:3e00::,2401:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KH 2401:3e80::,2401:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2401:3f00::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:3f00::,2401:3f00:10:ffff:ffff:ffff:ffff:ffff,SG +2401:3f00:11::,2401:3f00:11:7fff:ffff:ffff:ffff:ffff,ID +2401:3f00:11:8000::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:3f80::,2401:3f80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:4000::,2401:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR 2401:4080::,2401:4080:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -6120,7 +6284,6 @@ 2401:b800::,2401:b800:ffff:ffff:ffff:ffff:ffff:ffff,VN 2401:b880::,2401:b880:ffff:ffff:ffff:ffff:ffff:ffff,AU 2401:b900::,2401:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH -2401:b980::,2401:b980:ffff:ffff:ffff:ffff:ffff:ffff,TH 2401:ba00::,2401:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:ba80::,2401:ba80:ffff:ffff:ffff:ffff:ffff:ffff,PK 2401:bb00::,2401:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -6271,9 +6434,7 @@ 2401:fa00:8::,2401:fa00:8:7fff:ffff:ffff:ffff:ffff,IN 2401:fa00:8:8000::,2401:fa00:8:ffff:ffff:ffff:ffff:ffff,MY 2401:fa00:9::,2401:fa00:9:ffff:ffff:ffff:ffff:ffff,AU -2401:fa00:a::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:d::,2401:fa00:d:7fff:ffff:ffff:ffff:ffff,KR -2401:fa00:d:8000::,2401:fa00:f:7fff:ffff:ffff:ffff:ffff,IN +2401:fa00:a::,2401:fa00:f:7fff:ffff:ffff:ffff:ffff,IN 2401:fa00:f:8000::,2401:fa00:f:ffff:ffff:ffff:ffff:ffff,SG 2401:fa00:10::,2401:fa00:10:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:11::,2401:fa00:11:ffff:ffff:ffff:ffff:ffff,AU @@ -7387,37 +7548,72 @@ 2404:1500::,2404:1500:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:1580::,2404:1580:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:1600::,2404:1601:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:1680::,2404:1680:ffff:ffff:ffff:ffff:ffff:ffff,TH 2404:1700::,2404:1700:ffff:ffff:ffff:ffff:ffff:ffff,JP +2404:1780::,2404:1780:ffff:ffff:ffff:ffff:ffff:ffff,MM 2404:1800::,2404:1800:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:1880::,2404:1880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:1900::,2404:1900:ffff:ffff:ffff:ffff:ffff:ffff,JP +2404:1980::,2404:1980:ffff:ffff:ffff:ffff:ffff:ffff,JP 2404:1a00::,2404:1a00:ffff:ffff:ffff:ffff:ffff:ffff,TH +2404:1a80::,2404:1a80:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2404:1b00::,2404:1b00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2404:1b80::,2404:1b80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2404:1c00::,2404:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:1c80::,2404:1c80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:1d00::,2404:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:1d80::,2404:1d80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:1e00::,2404:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:1e80::,2404:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:1f00::,2404:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN +2404:1f80::,2404:1f80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:2000::,2404:2000:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:2080::,2404:2080:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:2100::,2404:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK +2404:2180::,2404:2180:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:2200::,2404:2200:ffff:ffff:ffff:ffff:ffff:ffff,NC +2404:2280::,2404:2280:ffff:ffff:ffff:ffff:ffff:ffff,SG 2404:2300::,2404:2300:ffff:ffff:ffff:ffff:ffff:ffff,KR +2404:2380::,2404:2380:ffff:ffff:ffff:ffff:ffff:ffff,PH 2404:2400::,2404:2400:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:2480::,2404:2480:ffff:ffff:ffff:ffff:ffff:ffff,HK +2404:2580::,2404:2580:ffff:ffff:ffff:ffff:ffff:ffff,TH 2404:2600::,2404:2600:ffff:ffff:ffff:ffff:ffff:ffff,TH +2404:2680::,2404:2680:ffff:ffff:ffff:ffff:ffff:ffff,JP 2404:2700::,2404:2700:ffff:ffff:ffff:ffff:ffff:ffff,MN +2404:2780::,2404:2780:ffff:ffff:ffff:ffff:ffff:ffff,AU 2404:2800::,2404:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:2880::,2404:2880:ffff:ffff:ffff:ffff:ffff:ffff,KR 2404:2900::,2404:2900:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:2980::,2404:2980:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:2a00::,2404:2a00:ffff:ffff:ffff:ffff:ffff:ffff,NC +2404:2a80::,2404:2a80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:2b00::,2404:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2404:2b80::,2404:2b80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:2c00::,2404:2c00:ffff:ffff:ffff:ffff:ffff:ffff,NP +2404:2c80::,2404:2c80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:2d00::,2404:2d00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2404:2d80::,2404:2d80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:2e00::,2404:2e00:ffff:ffff:ffff:ffff:ffff:ffff,LA +2404:2e80::,2404:2e80:ffff:ffff:ffff:ffff:ffff:ffff,NP 2404:2f00::,2404:2f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:2f80::,2404:2f80:ffff:ffff:ffff:ffff:ffff:ffff,ID +2404:3080::,2404:3080:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:3100::,2404:3100:ffff:ffff:ffff:ffff:ffff:ffff,PK +2404:3180::,2404:3180:ffff:ffff:ffff:ffff:ffff:ffff,BD 2404:3200::,2404:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP +2404:3280::,2404:3280:ffff:ffff:ffff:ffff:ffff:ffff,TH 2404:3300::,2404:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN +2404:3380::,2404:3380:ffff:ffff:ffff:ffff:ffff:ffff,PH +2404:3480::,2404:3480:ffff:ffff:ffff:ffff:ffff:ffff,CN 2404:3500::,2404:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK +2404:3580::,2404:3580:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:3600::,2404:3601:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:3680::,2404:3680:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:3700::,2404:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN +2404:3780::,2404:3780:ffff:ffff:ffff:ffff:ffff:ffff,NP 2404:3800::,2404:3800:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2404:3880::,2404:3880:ffff:ffff:ffff:ffff:ffff:ffff,HK 2404:3900::,2404:3900:ffff:ffff:ffff:ffff:ffff:ffff,ID 2404:3a00::,2404:3a00:ffff:ffff:ffff:ffff:ffff:ffff,VN 2404:3b00::,2404:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -8111,7 +8307,7 @@ 2406:e100::,2406:e100:ffff:ffff:ffff:ffff:ffff:ffff,PH 2406:e200::,2406:e200:ffff:ffff:ffff:ffff:ffff:ffff,HK 2406:e300::,2406:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK -2406:e400::,2406:e400:ffff:ffff:ffff:ffff:ffff:ffff,MV +2406:e400::,2406:e401:ffff:ffff:ffff:ffff:ffff:ffff,MV 2406:e500::,2406:e500:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:e600::,2406:e600:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:e700::,2406:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -8476,6 +8672,11 @@ 2602:230::,2602:231:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2602:ff5b::,2602:ff5b:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff5c::,2602:ff5c:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff5d::,2602:ff5d:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff5e::,2602:ff5e:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff5f::,2602:ff5f:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff60::,2602:ff60:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff61::,2602:ff61:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff62::,2602:ff62:fff:ffff:ffff:ffff:ffff:ffff,US @@ -8618,7 +8819,7 @@ 2602:ffe7::,2602:ffe7:fff:ffff:ffff:ffff:ffff:ffff,PR 2602:ffe8::,2602:ffe8:3ff:ffff:ffff:ffff:ffff:ffff,US 2602:ffe8:400::,2602:ffe8:4ff:ffff:ffff:ffff:ffff:ffff,AU -2602:ffe8:500::,2602:ffe9:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffe8:500::,2602:ffe8:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:ffea::,2602:ffeb:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffec::,2602:ffec:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ffed::,2602:ffed:fff:ffff:ffff:ffff:ffff:ffff,US @@ -8641,6 +8842,7 @@ 2602:ffff::,2602:ffff:fff:ffff:ffff:ffff:ffff:ffff,US 2603::,2603:10ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2603:2000::,2603:30ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:4000::,2603:40ff:ffff:ffff:ffff:ffff:ffff:ffff,US 2604::,2604::ffff:ffff:ffff:ffff:ffff:ffff,US 2604:10::,2604:10:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:100::,2604:100:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -8663,7 +8865,6 @@ 2604:980::,2604:980:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:a00::,2604:a00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:a80::,2604:a80:ffff:ffff:ffff:ffff:ffff:ffff,US -2604:b00::,2604:b00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:b80::,2604:b80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:c00::,2604:c00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:c80::,2604:c80:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -8971,8 +9172,8 @@ 2604:a780::,2604:a780:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:a800::,2604:a800:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:a880::,2604:a880:cac:ffff:ffff:ffff:ffff:ffff,US -2604:a880:cad::,2604:a880:cad:7fff:ffff:ffff:ffff:ffff,CA -2604:a880:cad:8000::,2604:a880:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:a880:cad::,2604:a880:cad:ffff:ffff:ffff:ffff:ffff,CA +2604:a880:cae::,2604:a880:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:a900::,2604:a900:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:a980::,2604:a980:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:aa00::,2604:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -9159,7 +9360,7 @@ 2605:900::,2605:900:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:980::,2605:980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a00::,2605:a00:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:a80::,2605:a80:ffff:ffff:ffff:ffff:ffff:ffff,CA +2605:a80::,2605:a80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:b00::,2605:b00:fff:ffff:ffff:ffff:ffff:ffff,US 2605:b80::,2605:b80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:c00::,2605:c00:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -9545,7 +9746,7 @@ 2605:d180::,2605:d180:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:d280::,2605:d280:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:d300::,2605:d300:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:d380::,2605:d380:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:d380::,2605:d380:fff:ffff:ffff:ffff:ffff:ffff,US 2605:d400::,2605:d400:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:d480::,2605:d480:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:d500::,2605:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -9668,7 +9869,6 @@ 2606:1100::,2606:1100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1180::,2606:1180:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1200::,2606:1200:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:1280::,2606:1280:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1300::,2606:1300:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1380::,2606:1380:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:1400::,2606:1400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -9710,7 +9910,51 @@ 2606:2680::,2606:2680:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2700::,2606:2700:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:2780::,2606:2780:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:2800::,2606:2800:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:2800::,2606:2800:420a:ffff:ffff:ffff:ffff:ffff,US +2606:2800:420b::,2606:2800:420b:ffff:ffff:ffff:ffff:ffff,BR +2606:2800:420c::,2606:2800:420c:ffff:ffff:ffff:ffff:ffff,US +2606:2800:420d::,2606:2800:420d:ffff:ffff:ffff:ffff:ffff,EC +2606:2800:420e::,2606:2800:5000:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5001::,2606:2800:5001:ffff:ffff:ffff:ffff:ffff,ES +2606:2800:5002::,2606:2800:500f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5010::,2606:2800:5011:ffff:ffff:ffff:ffff:ffff,GB +2606:2800:5012::,2606:2800:501f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5020::,2606:2800:5021:ffff:ffff:ffff:ffff:ffff,DE +2606:2800:5022::,2606:2800:5030:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5031::,2606:2800:5033:ffff:ffff:ffff:ffff:ffff,FR +2606:2800:5034::,2606:2800:503f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5040::,2606:2800:5041:ffff:ffff:ffff:ffff:ffff,NL +2606:2800:5042::,2606:2800:504f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5050::,2606:2800:5051:ffff:ffff:ffff:ffff:ffff,AT +2606:2800:5052::,2606:2800:505f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5060::,2606:2800:5061:ffff:ffff:ffff:ffff:ffff,SE +2606:2800:5062::,2606:2800:506f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5070::,2606:2800:5071:ffff:ffff:ffff:ffff:ffff,DE +2606:2800:5072::,2606:2800:507f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5080::,2606:2800:5080:ffff:ffff:ffff:ffff:ffff,IT +2606:2800:5081::,2606:2800:508f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:5090::,2606:2800:5090:ffff:ffff:ffff:ffff:ffff,PL +2606:2800:5091::,2606:2800:5fff:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6000::,2606:2800:6001:ffff:ffff:ffff:ffff:ffff,SG +2606:2800:6002::,2606:2800:600f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6010::,2606:2800:6011:ffff:ffff:ffff:ffff:ffff,HK +2606:2800:6012::,2606:2800:601f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6020::,2606:2800:6023:ffff:ffff:ffff:ffff:ffff,JP +2606:2800:6024::,2606:2800:6027:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6028::,2606:2800:6029:ffff:ffff:ffff:ffff:ffff,JP +2606:2800:602a::,2606:2800:602a:ffff:ffff:ffff:ffff:ffff,US +2606:2800:602b::,2606:2800:602b:ffff:ffff:ffff:ffff:ffff,JP +2606:2800:602c::,2606:2800:602f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6030::,2606:2800:6031:ffff:ffff:ffff:ffff:ffff,AU +2606:2800:6032::,2606:2800:6032:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6033::,2606:2800:6033:ffff:ffff:ffff:ffff:ffff,AU +2606:2800:6034::,2606:2800:603f:ffff:ffff:ffff:ffff:ffff,US +2606:2800:6040::,2606:2800:6041:ffff:ffff:ffff:ffff:ffff,HK +2606:2800:6042::,2606:2800:60ef:ffff:ffff:ffff:ffff:ffff,US +2606:2800:60f0::,2606:2800:60f3:ffff:ffff:ffff:ffff:ffff,IN +2606:2800:60f4::,2606:2800:7000:ffff:ffff:ffff:ffff:ffff,US +2606:2800:7001::,2606:2800:7001:ffff:ffff:ffff:ffff:ffff,CO +2606:2800:7002::,2606:2800:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2880::,2606:2880:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2900::,2606:2900:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2980::,2606:2980:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -9776,7 +10020,9 @@ 2606:4580::,2606:4580:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:4600::,2606:4600:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:4680::,2606:4680:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:4700::,2606:4700:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:4700::,2606:4700:1000:7fff:ffff:ffff:ffff:ffff,US +2606:4700:1000:8000::,2606:4700:1000:ffff:ffff:ffff:ffff:ffff,DE +2606:4700:1001::,2606:4700:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:4780::,2606:4780:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:4800::,2606:4800:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:4880::,2606:4880:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -9895,7 +10141,6 @@ 2606:8100::,2606:8100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:8180::,2606:8180:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:8200::,2606:8200:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:8280::,2606:8280:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:8300::,2606:830f:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:8380::,2606:8380:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:8400::,2606:8400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -10083,23 +10328,41 @@ 2606:e000::,2606:e000:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:e080::,2606:e080:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e100::,2606:e100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e180::,2606:e180:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e200::,2606:e200:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e280::,2606:e280:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e300::,2606:e300:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e380::,2606:e380:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:e400::,2606:e400:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e480::,2606:e480:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e500::,2606:e500:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e580::,2606:e580:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e600::,2606:e600:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e680::,2606:e680:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e700::,2606:e700:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e780::,2606:e780:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e800::,2606:e800:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e880::,2606:e880:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:e900::,2606:e900:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:e980::,2606:e980:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ea00::,2606:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:ea80::,2606:ea80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:eb00::,2606:eb00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:eb80::,2606:eb80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ec00::,2606:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:ec80::,2606:ec80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:ed00::,2606:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:ed80::,2606:ed80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ee00::,2606:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2606:ee80::,2606:ee80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:ef00::,2606:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:ef80::,2606:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f000::,2606:f000:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:f080::,2606:f080:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:f100::,2606:f100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:f180::,2606:f180:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f200::,2606:f200:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:f280::,2606:f280:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:f300::,2606:f300:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f400::,2606:f40f:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:f500::,2606:f500:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -10207,7 +10470,7 @@ 2607:5d00::,2607:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:5e00::,2607:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:5f00::,2607:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:6000::,2607:6000:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:6000::,2607:600f:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6100::,2607:6100:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6200::,2607:6200:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:6300::,2607:6300:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -10447,7 +10710,7 @@ 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:f300:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f300::,2607:f300:fff: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 @@ -11063,9 +11326,7 @@ 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::100b:ffff:ffff:ffff:ffff:ffff,US -2620:0:100c::,2620::100c:7fff:ffff:ffff:ffff:ffff,CA -2620:0:100c:8000::,2620::100c:ffff:ffff:ffff:ffff:ffff,US -2620:0:100d::,2620::100d:ffff:ffff:ffff:ffff:ffff,CA +2620:0:100c::,2620::100d:ffff:ffff:ffff:ffff:ffff,CA 2620:0:100e::,2620::1010:ffff:ffff:ffff:ffff:ffff,US 2620:0:1011::,2620::1011:7fff:ffff:ffff:ffff:ffff,AR 2620:0:1011:8000::,2620::1017:7fff:ffff:ffff:ffff:ffff,US @@ -11073,8 +11334,8 @@ 2620:0:1018::,2620::1019:ffff:ffff:ffff:ffff:ffff,US 2620:0:101a::,2620::101a:7fff:ffff:ffff:ffff:ffff,BR 2620:0:101a:8000::,2620::101f:ffff:ffff:ffff:ffff:ffff,US -2620:0:1020::,2620::1020:7fff:ffff:ffff:ffff:ffff,MX -2620:0:1020:8000::,2620::1024:ffff:ffff:ffff:ffff:ffff,US +2620:0:1020::,2620::1020:ffff:ffff:ffff:ffff:ffff,MX +2620:0:1021::,2620::1024:ffff:ffff:ffff:ffff:ffff,US 2620:0:1025::,2620::1025:7fff:ffff:ffff:ffff:ffff,BR 2620:0:1025:8000::,2620::1034:ffff:ffff:ffff:ffff:ffff,US 2620:0:1035::,2620::1035:ffff:ffff:ffff:ffff:ffff,CA @@ -11404,7 +11665,7 @@ 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::,2620:30:f: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 @@ -11794,7 +12055,6 @@ 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:99:c000::,2620:99:c000:ffff:ffff:ffff:ffff:ffff,US 2620:9a::,2620:9a::ffff:ffff:ffff:ffff:ffff,CA @@ -11920,7 +12180,7 @@ 2620:b9:4000::,2620:b9:4000:ffff:ffff:ffff:ffff:ffff,US 2620:b9:8000::,2620:b9:8000:ffff:ffff:ffff:ffff:ffff,US 2620:b9:c000::,2620:b9:c000:ffff:ffff:ffff:ffff:ffff,US -2620:ba::,2620:ba::ffff:ffff:ffff:ffff:ffff,US +2620:ba::,2620:ba:ff:ffff:ffff:ffff:ffff:ffff,US 2620:ba:4000::,2620:ba:4000:ffff:ffff:ffff:ffff:ffff,US 2620:ba:8000::,2620:ba:8000:ffff:ffff:ffff:ffff:ffff,US 2620:ba:c000::,2620:ba:c000:ffff:ffff:ffff:ffff:ffff,US @@ -12135,18 +12395,29 @@ 2620:ef:8000::,2620:ef:8000:ffff:ffff:ffff:ffff:ffff,US 2620:ef:c000::,2620:ef:c000:ffff:ffff:ffff:ffff:ffff,US 2620:f0::,2620:f0::ffff:ffff:ffff:ffff:ffff,US -2620:f0:4000::,2620:f0:4000:ffff:ffff:ffff:ffff:ffff,US +2620:f0:4000::,2620:f0:400f:ffff:ffff:ffff:ffff:ffff,US 2620:f0:8000::,2620:f0:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f0:c000::,2620:f0:c00f:ffff:ffff:ffff:ffff:ffff,US 2620:f1::,2620:f1::ffff:ffff:ffff:ffff:ffff,US +2620:f1:4000::,2620:f1:4000:ffff:ffff:ffff:ffff:ffff,CA 2620:f1:8000::,2620:f1:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f1:c000::,2620:f1:c000:ffff:ffff:ffff:ffff:ffff,US 2620:f2::,2620:f2::ffff:ffff:ffff:ffff:ffff,CA +2620:f2:4000::,2620:f2:4000:ffff:ffff:ffff:ffff:ffff,US 2620:f2:8000::,2620:f2:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f2:c000::,2620:f2:c000:ffff:ffff:ffff:ffff:ffff,US 2620:f3::,2620:f3::ffff:ffff:ffff:ffff:ffff,US +2620:f3:4000::,2620:f3:4000:ffff:ffff:ffff:ffff:ffff,US 2620:f3:8000::,2620:f3:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f3:c000::,2620:f3:c000:ffff:ffff:ffff:ffff:ffff,US 2620:f4::,2620:f4::ffff:ffff:ffff:ffff:ffff,US +2620:f4:4000::,2620:f4:40ff:ffff:ffff:ffff:ffff:ffff,US 2620:f4:8000::,2620:f4:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:f4:c000::,2620:f4:c000:ffff:ffff:ffff:ffff:ffff,US 2620:f5::,2620:f5::ffff:ffff:ffff:ffff:ffff,US +2620:f5:4000::,2620:f5:4000:ffff:ffff:ffff:ffff:ffff,US 2620:f5:8000::,2620:f5:8000:ffff:ffff:ffff:ffff:ffff,US +2620:f5:c000::,2620:f5:c000:ffff:ffff:ffff:ffff:ffff,US 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 @@ -12328,7 +12599,9 @@ 2620:10a:3000::,2620:10a:30ff:ffff:ffff:ffff:ffff:ffff,US 2620:10a:4000::,2620:10a:40ff:ffff:ffff:ffff:ffff:ffff,US 2620:10a:5000::,2620:10a:50ff:ffff:ffff:ffff:ffff:ffff,US -2620:10a:6000::,2620:10a:600f:ffff:ffff:ffff:ffff:ffff,US +2620:10a:6000::,2620:10a:6000:3fff:ffff:ffff:ffff:ffff,US +2620:10a:6000:4000::,2620:10a:6000:7fff:ffff:ffff:ffff:ffff,CA +2620:10a:6000:8000::,2620:10a:600f:ffff:ffff:ffff:ffff:ffff,US 2620:10a:8000::,2620:10a:80ff:ffff:ffff:ffff:ffff:ffff,CA 2620:10a:9000::,2620:10a:90ff:ffff:ffff:ffff:ffff:ffff,US 2620:10a:a000::,2620:10a:a0ff:ffff:ffff:ffff:ffff:ffff,US @@ -12380,7 +12653,9 @@ 2620:10d:9000::,2620:10d:900f:ffff:ffff:ffff:ffff:ffff,US 2620:10d:a000::,2620:10d:a0ff:ffff:ffff:ffff:ffff:ffff,US 2620:10d:b000::,2620:10d:b00f:ffff:ffff:ffff:ffff:ffff,US -2620:10d:c000::,2620:10d:c0f0:ffff:ffff:ffff:ffff:ffff,US +2620:10d:c000::,2620:10d:c091:ffff:ffff:ffff:ffff:ffff,US +2620:10d:c092::,2620:10d:c092:7fff:ffff:ffff:ffff:ffff,GB +2620:10d:c092:8000::,2620:10d:c0f0:ffff:ffff:ffff:ffff:ffff,US 2620:10d:c0f1::,2620:10d:c0f1:7fff:ffff:ffff:ffff:ffff,KR 2620:10d:c0f1:8000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US 2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA @@ -12750,6 +13025,15 @@ 2620:124:a000::,2620:124:a00f:ffff:ffff:ffff:ffff:ffff,US 2620:124:b000::,2620:124:b0ff:ffff:ffff:ffff:ffff:ffff,CA 2620:124:c000::,2620:124:c00f:ffff:ffff:ffff:ffff:ffff,US +2620:124:d000::,2620:124:d0ff:ffff:ffff:ffff:ffff:ffff,US +2620:124:e000::,2620:124:e0ff:ffff:ffff:ffff:ffff:ffff,US +2620:124:f000::,2620:124:f00f:ffff:ffff:ffff:ffff:ffff,US +2620:125::,2620:125:ff:ffff:ffff:ffff:ffff:ffff,US +2620:125:1000::,2620:125:100f:ffff:ffff:ffff:ffff:ffff,US +2620:125:2000::,2620:125:200f:ffff:ffff:ffff:ffff:ffff,US +2620:125:3000::,2620:125:30ff:ffff:ffff:ffff:ffff:ffff,US +2620:125:4000::,2620:125:400f:ffff:ffff:ffff:ffff:ffff,US +2620:125:5000::,2620:125:500f:ffff:ffff:ffff:ffff:ffff,CA 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 @@ -12815,7 +13099,7 @@ 2620:1c0::,2620:1c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1d0::,2620:1d1:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1d2::,2620:1d2:ffff:ffff:ffff:ffff:ffff:ffff,CA -2620:1d3::,2620:1d3:ffff:ffff:ffff:ffff:ffff:ffff,US +2620:1d3::,2620:1d5:fff: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 @@ -12828,7 +13112,6 @@ 2620:1ea::,2620:1ea:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1eb::,2620:1eb:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1ec::,2620:1ec:fff:ffff:ffff:ffff:ffff:ffff,US -2620:1ed::,2620:1ed:fff:ffff:ffff:ffff:ffff:ffff,CA 2620:1ee::,2620:1ee:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1ef::,2620:1ef:fff:ffff:ffff:ffff:ffff:ffff,US 2620:1f0::,2620:1f1:fff:ffff:ffff:ffff:ffff:ffff,US @@ -13123,6 +13406,7 @@ 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:9000::,2801:10:9000:ffff:ffff:ffff:ffff:ffff,PY 2801:10:a000::,2801:10:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO 2801:10:e000::,2801:10:e000:ffff:ffff:ffff:ffff:ffff,AR @@ -13191,7 +13475,6 @@ 2801:18::,2801:18::ffff:ffff:ffff:ffff:ffff,CR 2801:18:1000::,2801:18:1000:ffff:ffff:ffff:ffff:ffff,PA 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 @@ -13251,6 +13534,7 @@ 2801:1e:a000::,2801:1e:a000:ffff:ffff:ffff:ffff:ffff,AR 2801:1e:e000::,2801:1e:e000:ffff:ffff:ffff:ffff:ffff,SV 2801:1f::,2801:1f::ffff:ffff:ffff:ffff:ffff,AR +2801:1f:1000::,2801:1f:1000:ffff:ffff:ffff:ffff:ffff,HN 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:6000::,2801:1f:6000:ffff:ffff:ffff:ffff:ffff,AR @@ -13540,6 +13824,7 @@ 2801:80:1660::,2801:80:1660:ffff:ffff:ffff:ffff:ffff,BR 2801:80:1670::,2801:80:1670:ffff:ffff:ffff:ffff:ffff,BR 2801:80:1680::,2801:80:1680:ffff:ffff:ffff:ffff:ffff,BR +2801:80:1690::,2801:80:1690: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 @@ -13683,6 +13968,7 @@ 2803:1400::,2803:1400:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:1440::,2803:1440:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:1500::,2803:1500:ffff:ffff:ffff:ffff:ffff:ffff,TT +2803:1540::,2803:1540:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:1580::,2803:1580:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ 2803:1640::,2803:1640:ffff:ffff:ffff:ffff:ffff:ffff,NI @@ -13724,6 +14010,7 @@ 2803:2440::,2803:2440: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 +2803:2540::,2803:2540:ffff:ffff:ffff:ffff:ffff:ffff,EC 2803:2580::,2803:2580:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:2600::,2803:2600:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:2640::,2803:2640:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -13765,6 +14052,7 @@ 2803:3440::,2803:3440:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3480::,2803:3480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3500::,2803:3500:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:3540::,2803:3540:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3580::,2803:3580:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:3600::,2803:3600:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:3640::,2803:3640:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -13849,6 +14137,7 @@ 2803:5440::,2803:5440: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 +2803:5540::,2803:5540:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:5580::,2803:5580:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:5600::,2803:5600:ffff:ffff:ffff:ffff:ffff:ffff,HN 2803:5640::,2803:5640:ffff:ffff:ffff:ffff:ffff:ffff,CO @@ -13889,6 +14178,7 @@ 2803:6440::,2803:6440:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6480::,2803:6480:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:6500::,2803:6500:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:6540::,2803:6540:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6580::,2803:6580:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6640::,2803:6640:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -14015,6 +14305,7 @@ 2803:9440::,2803:9440:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9480::,2803:9480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9500::,2803:9500:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:9540::,2803:9540:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:9580::,2803:9580:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:9600::,2803:9600:ffff:ffff:ffff:ffff:ffff:ffff,CW 2803:9640::,2803:9640:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -14056,6 +14347,7 @@ 2803:a440::,2803:a440:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a500::,2803:a500:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:a540::,2803:a540:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a580::,2803:a580:ffff:ffff:ffff:ffff:ffff:ffff,HT 2803:a600::,2803:a600:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:a640::,2803:a640:ffff:ffff:ffff:ffff:ffff:ffff,DO @@ -14138,6 +14430,7 @@ 2803:c440::,2803:c440: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 +2803:c540::,2803:c540:ffff:ffff:ffff:ffff:ffff:ffff,GT 2803:c580::,2803:c580:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:c640::,2803:c640:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -14181,6 +14474,7 @@ 2803:d440::,2803:d440:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d500::,2803:d500:ffff:ffff:ffff:ffff:ffff:ffff,BZ +2803:d540::,2803:d540:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:d580::,2803:d580:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:d600::,2803:d600:ffff:ffff:ffff:ffff:ffff:ffff,UY 2803:d640::,2803:d640:ffff:ffff:ffff:ffff:ffff:ffff,SV @@ -14223,6 +14517,7 @@ 2803:e440::,2803:e440: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 +2803:e540::,2803:e540:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:e580::,2803:e580:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:e600::,2803:e600:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:e640::,2803:e640:ffff:ffff:ffff:ffff:ffff:ffff,CL @@ -16237,6 +16532,7 @@ 2804:1f18::,2804:1f18:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f1a::,2804:1f1a:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:1f1c::,2804:1f1c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:1f1e::,2804:1f1e:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2000::,2804:2000:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2004::,2804:2004:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2008::,2804:2008:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -17058,10 +17354,75 @@ 2804:2ccc::,2804:2ccc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2cd0::,2804:2cd0:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2cd4::,2804:2cd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cd8::,2804:2cd8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cdc::,2804:2cdc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2ce0::,2804:2ce0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2ce4::,2804:2ce4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2ce8::,2804:2ce8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cec::,2804:2cec:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cf0::,2804:2cf0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cf4::,2804:2cf4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cf8::,2804:2cf8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2cfc::,2804:2cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d00::,2804:2d00:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d04::,2804:2d04:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d08::,2804:2d08:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d0c::,2804:2d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d10::,2804:2d10:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d14::,2804:2d14:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d18::,2804:2d18:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d1c::,2804:2d1c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d20::,2804:2d20:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d24::,2804:2d24:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d28::,2804:2d28:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d2c::,2804:2d2c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d30::,2804:2d30:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d34::,2804:2d34:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d38::,2804:2d38:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d3c::,2804:2d3c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d40::,2804:2d40:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d44::,2804:2d44:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d48::,2804:2d48:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d4c::,2804:2d4c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d50::,2804:2d50:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d54::,2804:2d54:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d58::,2804:2d58:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d5c::,2804:2d5c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d60::,2804:2d60:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d64::,2804:2d64:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d68::,2804:2d68:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d6c::,2804:2d6c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d70::,2804:2d70:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d74::,2804:2d74:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d78::,2804:2d78:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d7c::,2804:2d7c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d80::,2804:2d80:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d84::,2804:2d84:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d88::,2804:2d88:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d8c::,2804:2d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d90::,2804:2d90:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d94::,2804:2d94:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d98::,2804:2d98:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2d9c::,2804:2d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2da0::,2804:2da0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2da4::,2804:2da4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2da8::,2804:2da8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dac::,2804:2dac:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2db0::,2804:2db0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2db4::,2804:2db4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2db8::,2804:2db8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dbc::,2804:2dbc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dc0::,2804:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dc4::,2804:2dc4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dc8::,2804:2dc8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dcc::,2804:2dcc:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dd0::,2804:2dd0:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dd4::,2804:2dd4:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2dd8::,2804:2dd8:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:2ddc::,2804:2ddc:ffff:ffff:ffff:ffff:ffff:ffff,BR 2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:200::,2806:216::ffff:ffff:ffff:ffff:ffff,MX -2806:217::,2806:21d:ffff:ffff:ffff:ffff:ffff:ffff,MX -2806:220::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX +2806:217::,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 2806:238:10::,2806:238:10:ffff:ffff:ffff:ffff:ffff,MX @@ -17738,6 +18099,7 @@ 2a00:4280::,2a00:4280:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:42a0::,2a00:42a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:42c0::,2a00:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:42e0::,2a00:42e0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:4300::,2a00:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:4320::,2a00:4320:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:4340::,2a00:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -17777,6 +18139,7 @@ 2a00:4780::,2a00:4780:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:47a0::,2a00:47a0:ffff:ffff:ffff:ffff:ffff:ffff,KG 2a00:47c0::,2a00:47c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a00:47e0::,2a00:47e0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a00:4800::,2a00:4807:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a00:4820::,2a00:4820:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a00:4840::,2a00:4847:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -18021,6 +18384,7 @@ 2a00:6620::,2a00:6620:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a00:6640::,2a00:6647:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:6660::,2a00:6660:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a00:6680::,2a00:6680:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:66a0::,2a00:66a0:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a00:66c0::,2a00:66c0:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:66e0::,2a00:66e0:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -18193,7 +18557,9 @@ 2a00:79e0:15::,2a00:79e0:15:ffff:ffff:ffff:ffff:ffff,DE 2a00:79e0:16::,2a00:79e0:1b:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:1c::,2a00:79e0:1c:ffff:ffff:ffff:ffff:ffff,GH -2a00:79e0:1d::,2a00:79e0:22:ffff:ffff:ffff:ffff:ffff,CH +2a00:79e0:1d::,2a00:79e0:1e:ffff:ffff:ffff:ffff:ffff,CH +2a00:79e0:1f::,2a00:79e0:1f:ffff:ffff:ffff:ffff:ffff,LT +2a00:79e0:20::,2a00:79e0:22:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:23::,2a00:79e0:23:ffff:ffff:ffff:ffff:ffff,GB 2a00:79e0:24::,2a00:79e1:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:7a00::,2a00:7a00:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -18309,6 +18675,7 @@ 2a00:8820::,2a00:8820:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a00:8840::,2a00:8840:ffff:ffff:ffff:ffff:ffff:ffff,UZ 2a00:8860:8001::,2a00:8860:8001:7fff:ffff:ffff:ffff:ffff,US +2a00:8860:8007::,2a00:8860:8007:7fff:ffff:ffff:ffff:ffff,US 2a00:8880::,2a00:8880:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:88a0::,2a00:88a0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:88c0::,2a00:88c0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -18461,7 +18828,6 @@ 2a00:9ae0::,2a00:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:9b00::,2a00:9b00:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a00:9b20::,2a00:9b20:ffff:ffff:ffff:ffff:ffff:ffff,IR -2a00:9b40::,2a00:9b40:ffff:ffff:ffff:ffff:ffff:ffff,KZ 2a00:9b60::,2a00:9b60:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:9b80::,2a00:9b80:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a00:9ba0::,2a00:9ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -18633,6 +18999,7 @@ 2a00:b040::,2a00:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:b060::,2a00:b060:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a00:b080::,2a00:b080:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a00:b0a0::,2a00:b0a0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:b0c0::,2a00:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:b0e0::,2a00:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:b100::,2a00:b100:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -18834,7 +19201,9 @@ 2a00:ca00::,2a00:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:ca20::,2a00:ca20:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a00:ca40::,2a00:ca40:ffff:ffff:ffff:ffff:ffff:ffff,DK -2a00:ca60::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a00:ca60::,2a00:ca60:16:7fff:ffff:ffff:ffff:ffff,LU +2a00:ca60:16:8000::,2a00:ca60:16:ffff:ffff:ffff:ffff:ffff,GB +2a00:ca60:17::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a00:ca80::,2a00:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:caa0::,2a00:caa0:ffff:ffff:ffff:ffff:ffff:ffff,JO 2a00:cac0::,2a00:cac0:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -18894,7 +19263,9 @@ 2a00:d140::,2a00:d140:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a00:d160::,2a00:d160:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:d180::,2a00:d180:ffff:ffff:ffff:ffff:ffff:ffff,PT -2a00:d1a0::,2a00:d1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:d1a0::,2a00:d1a0:f:ffff:ffff:ffff:ffff:ffff,DE +2a00:d1a0:10::,2a00:d1a0:1f:ffff:ffff:ffff:ffff:ffff,GB +2a00:d1a0:20::,2a00:d1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:d1c0::,2a00:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:d1e0::,2a00:d1e0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:d200::,2a00:d200:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -19016,7 +19387,9 @@ 2a00:e120::,2a00:e120:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:e140::,2a00:e140:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:e160::,2a00:e160:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a00:e180::,2a00:e180:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:e180::,2a00:e180:12ca:ffff:ffff:ffff:ffff:ffff,DE +2a00:e180:12cb::,2a00:e180:12cb:7fff:ffff:ffff:ffff:ffff,US +2a00:e180:12cb:8000::,2a00:e180:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:e1a0::,2a00:e1a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:e1c0::,2a00:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:e1e0::,2a00:e1e0:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -19123,6 +19496,7 @@ 2a00:eea0::,2a00:eea0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:eec0::,2a00:eec0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a00:eee0::,2a00:eee0:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a00:ef00::,2a00:ef00:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:ef20::,2a00:ef20:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:ef40::,2a00:ef40:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:ef60::,2a00:ef67:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -19200,7 +19574,7 @@ 2a00:f8a0::,2a00:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:f8c0::,2a00:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,LI 2a00:f8e0::,2a00:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:f900::,2a00:f900:ffff:ffff:ffff:ffff:ffff:ffff,MD +2a00:f900::,2a00:f907:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a00:f920::,2a00:f920:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:f940::,2a00:f940:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:f960::,2a00:f960:ffff:ffff:ffff:ffff:ffff:ffff,IS @@ -19244,7 +19618,7 @@ 2a00:fe20::,2a00:fe20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:fe40::,2a00:fe40:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:fe60::,2a00:fe60:ffff:ffff:ffff:ffff:ffff:ffff,FI -2a00:fe80::,2a00:fe80:ffff:ffff:ffff:ffff:ffff:ffff,ME +2a00:fe80::,2a00:fe87:ffff:ffff:ffff:ffff:ffff:ffff,ME 2a00:fea0::,2a00:fea7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:fec0::,2a00:fec0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a00:fee0::,2a00:fee0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -19350,7 +19724,7 @@ 2a01:248::,2a01:248:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:250::,2a01:250:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a01:258::,2a01:258:ffff:ffff:ffff:ffff:ffff:ffff,IE -2a01:260::,2a01:260:ffff:ffff:ffff:ffff:ffff:ffff,SI +2a01:260::,2a01:267:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a01:268::,2a01:268:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:270::,2a01:270:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a01:278::,2a01:27f:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -19369,7 +19743,6 @@ 2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:2d8::,2a01:2df:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a01:300:22::,2a01:300:22:7fff: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 @@ -19408,6 +19781,7 @@ 2a01:3e0:1601::,2a01:3e0:1601:ffff:ffff:ffff:ffff:ffff,FI 2a01:3e0:1700::,2a01:3e0:1701:ff:ffff:ffff:ffff:ffff,GB 2a01:3e0:1b00::,2a01:3e0:1b00:ffff:ffff:ffff:ffff:ffff,FI +2a01:3e0:1d00::,2a01:3e0:1d00:ff:ffff:ffff:ffff:ffff,CH 2a01:3e0:ff24::,2a01:3e0:ff24:ffff:ffff:ffff:ffff:ffff,DE 2a01:3e8::,2a01:3e8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:3f0::,2a01:3f7:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -19458,7 +19832,7 @@ 2a01:558::,2a01:558:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a01:560::,2a01:567:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a01:568::,2a01:570:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a01:578::,2a01:578:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a01:578::,2a01:578:ffff:ffff:ffff:ffff:ffff:ffff,US 2a01:580::,2a01:580:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:590::,2a01:590:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:598::,2a01:59f:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -20022,6 +20396,7 @@ 2a01:7cc0::,2a01:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a01:7ce0::,2a01:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:7d00::,2a01:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a01:7d20::,2a01:7d20:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:7d40::,2a01:7d40:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a01:7d60::,2a01:7d60:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a01:7d80::,2a01:7d80:ffff:ffff:ffff:ffff:ffff:ffff,HU @@ -20129,7 +20504,7 @@ 2a01:8a40::,2a01:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:8a60::,2a01:8a60:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:8a80::,2a01:8a80:ffff:ffff:ffff:ffff:ffff:ffff,SK -2a01:8aa0::,2a01:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:8aa0::,2a01:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:8ac0::,2a01:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:8ae0::,2a01:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:8b00::,2a01:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -20344,6 +20719,7 @@ 2a01:a500::,2a01:a500:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:a520::,2a01:a520:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a01:a540::,2a01:a540:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a01:a560::,2a01:a560:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a01:a580::,2a01:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:a5a0::,2a01:a5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:a5c0::,2a01:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -20388,6 +20764,7 @@ 2a01:aac0::,2a01:aac0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a01:aae0::,2a01:aae0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:ab00::,2a01:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a01:ab20::,2a01:ab20:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:ab40::,2a01:ab40:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:ab60::,2a01:ab60:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:ab80::,2a01:ab80:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -20483,7 +20860,6 @@ 2a01:b740::,2a01:b740:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:b760::,2a01:b760:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a01:b780::,2a01:b780:ffff:ffff:ffff:ffff:ffff:ffff,MK -2a01:b7a0::,2a01:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:b7c0::,2a01:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:b7e0::,2a01:b7e0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:b800::,2a01:b800:ffff:ffff:ffff:ffff:ffff:ffff,RS @@ -20953,7 +21329,9 @@ 2a02:c60::,2a02:c60:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:c68::,2a02:c68:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:c70::,2a02:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a02:c78::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:c78::,2a02:c7d:424:5fff:ffff:ffff:ffff:ffff,GB +2a02:c7d:424:6000::,2a02:c7d:424:6fff:ffff:ffff:ffff:ffff,US +2a02:c7d:424:7000::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:c80::,2a02:c80:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a02:c88::,2a02:c88:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:c90::,2a02:c90:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -21138,7 +21516,8 @@ 2a02:1770::,2a02:1770:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:1778::,2a02:1778:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:1780::,2a02:1780:ffff:ffff:ffff:ffff:ffff:ffff,SE -2a02:1788::,2a02:1788:4ff:7fff:ffff:ffff:ffff:ffff,GB +2a02:1788::,2a02:1788:4fe:ffff:ffff:ffff:ffff:ffff,GB +2a02:1788:4ff::,2a02:1788:4ff:7fff:ffff:ffff:ffff:ffff,RO 2a02:1788:4ff:8000::,2a02:1788:4ff:ffff:ffff:ffff:ffff:ffff,US 2a02:1788:500::,2a02:1788:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:1790::,2a02:1790:ffff:ffff:ffff:ffff:ffff:ffff,FI @@ -21155,7 +21534,9 @@ 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:1800::,2a02:1811:8511:ffff:ffff:ffff:ffff:ffff,BE +2a02:1811:8512::,2a02:1811:8512:7fff:ffff:ffff:ffff:ffff,NL +2a02:1811:8512:8000::,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:2017:ffff:ffff:ffff:ffff:ffff:ffff,TR @@ -21575,6 +21956,7 @@ 2a02:4360::,2a02:4360:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:4380::,2a02:4380:ffff:ffff:ffff:ffff:ffff:ffff,AZ 2a02:43a0::,2a02:43a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ +2a02:43c0::,2a02:43c0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:43e0::,2a02:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:4400::,2a02:4400:ffff:ffff:ffff:ffff:ffff:ffff,KZ 2a02:4420::,2a02:4420:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -21664,6 +22046,7 @@ 2a02:4f20::,2a02:4f20:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:4f40::,2a02:4f40:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:4f60::,2a02:4f67:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:4f80::,2a02:4f80:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:4fa0::,2a02:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a02:4fc0::,2a02:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a02:4fe0::,2a02:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -22067,9 +22450,7 @@ 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:a44f:7982:ffff:ffff:ffff:ffff:ffff,NL -2a02:a44f:7983::,2a02:a44f:7983:7fff:ffff:ffff:ffff:ffff,DE -2a02:a44f:7983:8000::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:a400::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:a800::,2a02:a83f:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:aa00::,2a02:aa1f:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:ab00::,2a02:ab07:ffff:ffff:ffff:ffff:ffff:ffff,SK @@ -22343,6 +22724,8 @@ 2a02:f9c0::,2a02:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:fa00::,2a02:fa07:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a02:fa40::,2a02:fa47:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a02:fa80::,2a02:fa80:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a02:faa0::,2a02:faa0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:fb00::,2a02:fb07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:fb40::,2a02:fb47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:fb80::,2a02:fb87:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -22630,7 +23013,6 @@ 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 @@ -22670,6 +23052,7 @@ 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,FR 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 @@ -22677,6 +23060,7 @@ 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,RU 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 @@ -22723,6 +23107,7 @@ 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,BE 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 @@ -22992,7 +23377,8 @@ 2a03:4a80:8::,2a03:4a80:8:ffff:ffff:ffff:ffff:ffff,TR 2a03:4a80:9::,2a03:4a80:9:ffff:ffff:ffff:ffff:ffff,UA 2a03:4a80:a::,2a03:4a80:a:ffff:ffff:ffff:ffff:ffff,MX -2a03:4a80:b::,2a03:4a80:fffe:ffff:ffff:ffff:ffff:ffff,NL +2a03:4a80:b::,2a03:4a80:b:ffff:ffff:ffff:ffff:ffff,AE +2a03:4a80:c::,2a03:4a80:fffe:ffff:ffff:ffff:ffff:ffff,NL 2a03:4a80:ffff::,2a03:4a80:ffff:7fff:ffff:ffff:ffff:ffff,US 2a03:4a80:ffff:8000::,2a03:4a80:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4aa0::,2a03:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -23695,10 +24081,15 @@ 2a03:a380::,2a03:a380:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:a3a0::,2a03:a3a0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:a3c0::,2a03:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a03:a3e0::,2a03:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,LB 2a03:a400::,2a03:a400:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:a420::,2a03:a420:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:a440::,2a03:a440:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:a460::,2a03:a460:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:a480::,2a03:a480:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a03:a4a0::,2a03:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:a4c0::,2a03:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:a4e0::,2a03:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:a500::,2a03:a500:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a03:a540::,2a03:a540:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:a580::,2a03:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -23726,6 +24117,7 @@ 2a03:ab00::,2a03:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:ab40::,2a03:ab40:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a03:ab80::,2a03:ab80:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a03:abc0::,2a03:abc0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:ac00::,2a03:ac00:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:ac40::,2a03:ac40:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:ac80::,2a03:ac80:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -23914,6 +24306,7 @@ 2a03:d900::,2a03:d900:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:d940::,2a03:d940:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:d980::,2a03:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:d9c0::,2a03:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a03:da00::,2a03:da00:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a03:da40::,2a03:da40:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:da80::,2a03:da80:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -24240,7 +24633,6 @@ 2a04:2b00::,2a04:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:2b40::,2a04:2b47:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a04:2b80::,2a04:2b87:ffff:ffff:ffff:ffff:ffff:ffff,RO -2a04:2bc0::,2a04:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a04:2c00::,2a04:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a04:2c40:7::,2a04:2c40:7:7fff:ffff:ffff:ffff:ffff,FR 2a04:2c80::,2a04:2c87:ffff:ffff:ffff:ffff:ffff:ffff,UA @@ -24578,6 +24970,7 @@ 2a04:7ec0::,2a04:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a04:7f00::,2a04:7f07:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a04:7f40::,2a04:7f47:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a04:7f80::,2a04:7f87:ffff:ffff:ffff:ffff:ffff:ffff,QA 2a04:7fc0::,2a04:7fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:8000::,2a04:8007:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a04:8040::,2a04:8047:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -24857,6 +25250,7 @@ 2a04:c600::,2a04:c607:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:c640::,2a04:c647:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:c680::,2a04:c687:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a04:c6c0::,2a04:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a04:c700::,2a04:c707:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:c740::,2a04:c747:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a04:c780::,2a04:c787:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -24915,6 +25309,7 @@ 2a04:d4c0::,2a04:d4c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:d500::,2a04:d507:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a04:d540::,2a04:d547:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a04:d580::,2a04:d587:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a04:d5c0::,2a04:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a04:d600::,2a04:d607:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:d640::,2a04:d647:ffff:ffff:ffff:ffff:ffff:ffff,IE @@ -24972,6 +25367,7 @@ 2a04:e340::,2a04:e347:ffff:ffff:ffff:ffff:ffff:ffff,AE 2a04:e380::,2a04:e387:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:e3c0::,2a04:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a04:e400::,2a04:e407:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:e440::,2a04:e447:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a04:e480::,2a04:e487:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:e4c0:10::,2a04:e4c0:10:ffff:ffff:ffff:ffff:ffff,GB @@ -25009,6 +25405,7 @@ 2a04:eac0::,2a04:eac7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a04:eb00::,2a04:eb07:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a04:eb40::,2a04:eb47:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a04:eb80::,2a04:eb87:ffff:ffff:ffff:ffff:ffff:ffff,RS 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 @@ -25055,6 +25452,8 @@ 2a04:f5c0::,2a04:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a04:f600::,2a04:f607:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a04:f680::,2a04:f687:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a04:f6c0::,2a04:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a04:f700::,2a04:f707:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a04:f740::,2a04:f747:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a04:f780::,2a04:f787:ffff:ffff:ffff:ffff:ffff:ffff,IN 2a04:f7c0::,2a04:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -25092,6 +25491,7 @@ 2a04:ff80::,2a04:ff87:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a04:ffc0::,2a04:ffc7:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a05::,2a05:7:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a05:40::,2a05:47:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a05:80::,2a05:87:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a05:c0::,2a05:c7:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a05:100::,2a05:107:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -25104,7 +25504,6 @@ 2a05:300::,2a05:307:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a05:340::,2a05:347:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:380::,2a05:387:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a05:3c0::,2a05:3c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:400::,2a05:407:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:440::,2a05:447:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a05:480::,2a05:487:ffff:ffff:ffff:ffff:ffff:ffff,UA @@ -25138,10 +25537,12 @@ 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,NL 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,CH 2a05:d40::,2a05:d47:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:d80::,2a05:d87:ffff:ffff:ffff:ffff:ffff:ffff,FR 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 @@ -25201,12 +25602,15 @@ 2a05:1d80::,2a05:1d87:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a05:1dc0::,2a05:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a05:1e00::,2a05:1e07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a05:1e40::,2a05:1e47:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a05:1e80::,2a05:1e87:ffff:ffff:ffff:ffff:ffff:ffff,NL 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,ES 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 @@ -25232,12 +25636,14 @@ 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,KW 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,IT 2a05:27c0::,2a05:27c7:ffff:ffff:ffff:ffff:ffff:ffff,KZ 2a05:2800::,2a05:2807:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a05:2840::,2a05:2847:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -25282,6 +25688,7 @@ 2a05:3200::,2a05:3207:ffff:ffff:ffff:ffff:ffff:ffff,NL 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,DE 2a05:3300::,2a05:3307:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:3380::,2a05:3387:ffff:ffff:ffff:ffff:ffff:ffff,YE 2a05:33c0::,2a05:33c7:ffff:ffff:ffff:ffff:ffff:ffff,SI @@ -25373,6 +25780,7 @@ 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,CZ 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 @@ -25449,6 +25857,7 @@ 2a05:5c80::,2a05:5c87:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:5cc0::,2a05:5cc7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:5d00::,2a05:5d07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a05:5d40::,2a05:5d47:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a05:5d80::,2a05:5d87:ffff:ffff:ffff:ffff:ffff:ffff,MK 2a05:5dc0::,2a05:5dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a05:5e00::,2a05:5e07:ffff:ffff:ffff:ffff:ffff:ffff,AE @@ -25526,6 +25935,7 @@ 2a05:7000::,2a05:7007:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a05:7040::,2a05:7047:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:7080::,2a05:7087:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a05:70c0::,2a05:70c7:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a05:7100::,2a05:7107:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a05:7140::,2a05:7147:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a05:7180::,2a05:7187:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -25781,7 +26191,9 @@ 2a05:b000::,2a05:b007:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a05:b040::,2a05:b047:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a05:b080::,2a05:b087:ffff:ffff:ffff:ffff:ffff:ffff,FI -2a05:b0c0::,2a05:b0c6:6ff:ffff:ffff:ffff:ffff:ffff,GB +2a05:b0c0::,2a05:b0c6:25f:ffff:ffff:ffff:ffff:ffff,GB +2a05:b0c6:260::,2a05:b0c6:260:7fff:ffff:ffff:ffff:ffff,US +2a05:b0c6:260:8000::,2a05:b0c6:6ff:ffff:ffff:ffff:ffff:ffff,GB 2a05:b0c6:700::,2a05:b0c6:7ff:ffff:ffff:ffff:ffff:ffff,AT 2a05:b0c6:800::,2a05:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a05:b100::,2a05:b107:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -25998,6 +26410,7 @@ 2a05:e700::,2a05:e707:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:e740::,2a05:e747:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:e780::,2a05:e787:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a05:e7c0::,2a05:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a05:e800::,2a05:e807:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a05:e840::,2a05:e847:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a05:e880::,2a05:e887:ffff:ffff:ffff:ffff:ffff:ffff,NO @@ -26077,6 +26490,7 @@ 2a05:fb00::,2a05:fb07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a05:fb80::,2a05:fb87:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:fbc0::,2a05:fbc3:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a05:fbe0::,2a05:fbe3:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a05:fc00::,2a05:fc07:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a05:fc40::,2a05:fc47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:fc80::,2a05:fc87:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -26295,6 +26709,7 @@ 2a06:30c0::,2a06:30c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:3100::,2a06:3107:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:3180::,2a06:3187:ffff:ffff:ffff:ffff:ffff:ffff,SA +2a06:31c0::,2a06:31c7:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:3200::,2a06:3207:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:3240::,2a06:3247:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:3280::,2a06:3287:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -26417,6 +26832,8 @@ 2a06:50c0::,2a06:50c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:5100::,2a06:5107:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a06:5140::,2a06:5147:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:5180::,2a06:5187:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a06:51c0::,2a06:51c7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a06:5200::,2a06:5207:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a06:5240::,2a06:5247:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:5280::,2a06:5287:ffff:ffff:ffff:ffff:ffff:ffff,RO @@ -26862,7 +27279,6 @@ 2a06:bd00::,2a06:bd07:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:bd40::,2a06:bd47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:bd80::,2a06:bd87:ffff:ffff:ffff:ffff:ffff:ffff,IS -2a06:bdc0::,2a06:bdc7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a06:be00::,2a06:be07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a06:be40::,2a06:be47:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a06:be80::,2a06:be87:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -27025,6 +27441,97 @@ 2a06:e5c0::,2a06:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a06:e600::,2a06:e607:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a06:e640::,2a06:e647:ffff:ffff:ffff:ffff:ffff:ffff,PT +2a06:e680::,2a06:e687:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:e6c0::,2a06:e6c7:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a06:e700::,2a06:e707:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:e740::,2a06:e747:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a06:e780::,2a06:e787:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a06:e7c0::,2a06:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a06:e800::,2a06:e807:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a06:e840::,2a06:e847:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a06:e880::,2a06:e887:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a06:e8c0::,2a06:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,LV +2a06:e900::,2a06:e907:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a06:e940::,2a06:e947:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a06:e980::,2a06:e987:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a06:e9c0::,2a06:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:ea00::,2a06:ea07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:ea40::,2a06:ea47:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a06:ea80::,2a06:ea87:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:eac0::,2a06:eac7:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a06:eb00::,2a06:eb07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:eb40::,2a06:eb47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:eb80::,2a06:eb87:ffff:ffff:ffff:ffff:ffff:ffff,LB +2a06:ebc0::,2a06:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a06:ec00::,2a06:ec07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:ec40::,2a06:ec47:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:ec80::,2a06:ec87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:ecc0::,2a06:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a06:ed00::,2a06:ed07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:ed40::,2a06:ed47:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a06:ed80::,2a06:ed87:ffff:ffff:ffff:ffff:ffff:ffff,TJ +2a06:edc0::,2a06:edc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:ee00::,2a06:ee07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:ee40::,2a06:ee47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:ee80::,2a06:ee87:ffff:ffff:ffff:ffff:ffff:ffff,IQ +2a06:eec0::,2a06:eec7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:ef00::,2a06:ef07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a06:ef40::,2a06:ef47:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:ef80::,2a06:ef87:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a06:efc0::,2a06:efc7:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a06:f000::,2a06:f007:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a06:f040::,2a06:f047:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a06:f080::,2a06:f087:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a06:f0c0::,2a06:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a06:f100::,2a06:f107:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a06:f140::,2a06:f147:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:f180::,2a06:f187:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a06:f1c0::,2a06:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a06:f200::,2a06:f207:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a06:f240::,2a06:f247:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a06:f280::,2a06:f287:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:f2c0::,2a06:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:f300::,2a06:f307:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:f340::,2a06:f347:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:f380::,2a06:f387:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a06:f3c0::,2a06:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a06:f400::,2a06:f407:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a06:f440::,2a06:f447:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a06:f480::,2a06:f487:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a06:f4c0::,2a06:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a06:f500::,2a06:f507:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a06:f540::,2a06:f547:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a06:f580::,2a06:f587:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a06:f5c0::,2a06:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:f600::,2a06:f607:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a06:f640::,2a06:f647:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:f680::,2a06:f687:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a06:f6c0::,2a06:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a06:f700::,2a06:f707:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:f740::,2a06:f747:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a06:f780::,2a06:f787:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:f7c0::,2a06:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a06:f800::,2a06:f807:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a06:f840::,2a06:f847:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a06:f880::,2a06:f887:ffff:ffff:ffff:ffff:ffff:ffff,US +2a06:f8c0::,2a06:f8c7:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a06:f900::,2a06:f907:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:f940::,2a06:f947:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a06:f980::,2a06:f987:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a06:f9c0::,2a06:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:fa00::,2a06:fa07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a06:fa40::,2a06:fa47:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a06:fa80::,2a06:fa87:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a06:fac0::,2a06:fac7:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a06:fb00::,2a06:fb07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a06:fb40::,2a06:fb47:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a06:fb80::,2a06:fb87:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a06:fbc0::,2a06:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a06:fc00::,2a06:fc07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a06:fc40::,2a06:fc47:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a06:fc80::,2a06:fc87:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a06:fcc0::,2a06:fcc7:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a06:fd00::,2a06:fd07:ffff:ffff:ffff:ffff:ffff:ffff,BE 2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG 2c0e:2000::,2c0e:2fff:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0e:4000::,2c0e:40ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA @@ -27075,6 +27582,9 @@ 2c0f:f560::,2c0f:f560:ffff:ffff:ffff:ffff:ffff:ffff,KM 2c0f:f568::,2c0f:f568:ffff:ffff:ffff:ffff:ffff:ffff,CG 2c0f:f570::,2c0f:f570:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f578::,2c0f:f578:ffff:ffff:ffff:ffff:ffff:ffff,TG +2c0f:f580::,2c0f:f580:ffff:ffff:ffff:ffff:ffff:ffff,KE +2c0f:f588::,2c0f:f588:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f600::,2c0f:f600:ffff:ffff:ffff:ffff:ffff:ffff,GN 2c0f:f608::,2c0f:f608:ffff:ffff:ffff:ffff:ffff:ffff,RE 2c0f:f610::,2c0f:f610:ffff:ffff:ffff:ffff:ffff:ffff,ZA diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 719d27caa9..daf0b2af0b 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1778,7 +1778,7 @@ pick_tor2web_rendezvous_node(router_crn_flags_t flags, router_add_running_nodes_to_smartlist(all_live_nodes, allow_invalid, 0, 0, 0, - need_desc); + need_desc, 0); /* Filter all_live_nodes to only add live *and* whitelisted RPs to * the list whitelisted_live_rps. */ @@ -2144,7 +2144,9 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state) const node_t *choice; smartlist_t *excluded; const or_options_t *options = get_options(); - router_crn_flags_t flags = CRN_NEED_GUARD|CRN_NEED_DESC; + /* If possible, choose an entry server with a preferred address, + * otherwise, choose one with an allowed address */ + router_crn_flags_t flags = CRN_NEED_GUARD|CRN_NEED_DESC|CRN_PREF_ADDR; const node_t *node; if (state && options->UseEntryGuards && @@ -2161,14 +2163,6 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state) * family. */ nodelist_add_node_and_family(excluded, node); } - if (firewall_is_fascist_or()) { - /* Exclude all ORs that we can't reach through our firewall */ - smartlist_t *nodes = nodelist_get_list(); - SMARTLIST_FOREACH(nodes, const node_t *, node, { - if (!fascist_firewall_allows_node(node)) - smartlist_add(excluded, (void*)node); - }); - } /* and exclude current entry guards and their families, * unless we're in a test network, and excluding guards * would exclude all nodes (i.e. we're in an incredibly small tor network, @@ -2247,9 +2241,11 @@ onion_extend_cpath(origin_circuit_t *circ) if (r) { /* If we're a client, use the preferred address rather than the primary address, for potentially connecting to an IPv6 OR - port. */ - info = extend_info_from_node(r, server_mode(get_options()) == 0); - tor_assert(info); + port. Servers always want the primary (IPv4) address. */ + int client = (server_mode(get_options()) == 0); + info = extend_info_from_node(r, client); + /* Clients can fail to find an allowed address */ + tor_assert(info || client); } } else { const node_t *r = @@ -2324,33 +2320,43 @@ extend_info_new(const char *nickname, const char *digest, * <b>for_direct_connect</b> is true, in which case the preferred * address is used instead. May return NULL if there is not enough * info about <b>node</b> to extend to it--for example, if there is no - * routerinfo_t or microdesc_t. + * routerinfo_t or microdesc_t, or if for_direct_connect is true and none of + * the node's addresses are allowed by tor's firewall and IP version config. **/ extend_info_t * extend_info_from_node(const node_t *node, int for_direct_connect) { tor_addr_port_t ap; + int valid_addr = 0; if (node->ri == NULL && (node->rs == NULL || node->md == NULL)) return NULL; + /* Choose a preferred address first, but fall back to an allowed address. + * choose_address returns 1 on success, but get_prim_orport returns 0. */ if (for_direct_connect) - node_get_pref_orport(node, &ap); + valid_addr = fascist_firewall_choose_address_node(node, + FIREWALL_OR_CONNECTION, + 0, &ap); else - node_get_prim_orport(node, &ap); + valid_addr = !node_get_prim_orport(node, &ap); - log_debug(LD_CIRC, "using %s for %s", - fmt_addrport(&ap.addr, ap.port), - node->ri ? node->ri->nickname : node->rs->nickname); + if (valid_addr) + log_debug(LD_CIRC, "using %s for %s", + fmt_addrport(&ap.addr, ap.port), + node->ri ? node->ri->nickname : node->rs->nickname); + else + log_warn(LD_CIRC, "Could not choose valid address for %s", + node->ri ? node->ri->nickname : node->rs->nickname); - if (node->ri) + if (valid_addr && node->ri) return extend_info_new(node->ri->nickname, node->identity, node->ri->onion_pkey, node->ri->onion_curve25519_pkey, &ap.addr, ap.port); - else if (node->rs && node->md) + else if (valid_addr && node->rs && node->md) return extend_info_new(node->rs->nickname, node->identity, node->md->onion_pkey, diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index dcbeb1e2bb..ade371d39f 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -53,6 +53,7 @@ static void cpath_ref_decref(crypt_path_reference_t *cpath_ref); //static void circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ, // const uint8_t *token); static void circuit_clear_rend_token(or_circuit_t *circ); +static void circuit_about_to_free_atexit(circuit_t *circ); static void circuit_about_to_free(circuit_t *circ); /********* END VARIABLES ************/ @@ -901,6 +902,7 @@ circuit_free_all(void) } } tmp->global_circuitlist_idx = -1; + circuit_about_to_free_atexit(tmp); circuit_free(tmp); SMARTLIST_DEL_CURRENT(lst, tmp); } SMARTLIST_FOREACH_END(tmp); @@ -1744,6 +1746,32 @@ circuit_mark_for_close_, (circuit_t *circ, int reason, int line, smartlist_add(circuits_pending_close, circ); } +/** Called immediately before freeing a marked circuit <b>circ</b> from + * circuit_free_all() while shutting down Tor; this is a safe-at-shutdown + * version of circuit_about_to_free(). It's important that it at least + * do circuitmux_detach_circuit() when appropriate. + */ +static void +circuit_about_to_free_atexit(circuit_t *circ) +{ + + if (circ->n_chan) { + circuit_clear_cell_queue(circ, circ->n_chan); + circuitmux_detach_circuit(circ->n_chan->cmux, circ); + circuit_set_n_circid_chan(circ, 0, NULL); + } + + if (! CIRCUIT_IS_ORIGIN(circ)) { + or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); + + if (or_circ->p_chan) { + circuit_clear_cell_queue(circ, or_circ->p_chan); + circuitmux_detach_circuit(or_circ->p_chan->cmux, circ); + circuit_set_p_circid_chan(or_circ, 0, NULL); + } + } +} + /** Called immediately before freeing a marked circuit <b>circ</b>. * Disconnects the circuit from other data structures, launches events * as appropriate, and performs other housekeeping. diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 05201a5473..5ffd1f68c7 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -2006,8 +2006,13 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn, if (r && node_has_descriptor(r)) { /* We might want to connect to an IPv6 bridge for loading descriptors so we use the preferred address rather than - the primary. */ + the primary. */ extend_info = extend_info_from_node(r, conn->want_onehop ? 1 : 0); + if (!extend_info) { + log_warn(LD_CIRC,"Could not make a one-hop connection to %s. " + "Discarding this circuit.", conn->chosen_exit_name); + return -1; + } } else { log_debug(LD_DIR, "considering %d, %s", want_onehop, conn->chosen_exit_name); diff --git a/src/or/config.c b/src/or/config.c index d2d88159df..d71cf6dec7 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -190,10 +190,12 @@ static config_var_t option_vars_[] = { V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/ V(ClientDNSRejectInternalAddresses, BOOL,"1"), V(ClientOnly, BOOL, "0"), - V(ClientPreferIPv6ORPort, BOOL, "0"), + V(ClientPreferIPv6ORPort, AUTOBOOL, "auto"), + V(ClientPreferIPv6DirPort, AUTOBOOL, "auto"), V(ClientRejectInternalAddresses, BOOL, "1"), V(ClientTransportPlugin, LINELIST, NULL), V(ClientUseIPv6, BOOL, "0"), + V(ClientUseIPv4, BOOL, "1"), V(ConsensusParams, STRING, NULL), V(ConnLimit, UINT, "1000"), V(ConnDirectionStatistics, BOOL, "0"), @@ -3078,6 +3080,8 @@ options_validate(or_options_t *old_options, or_options_t *options, } } + /* Terminate Reachable*Addresses with reject * + */ for (i=0; i<3; i++) { config_line_t **linep = (i==0) ? &options->ReachableAddresses : @@ -3087,8 +3091,6 @@ options_validate(or_options_t *old_options, or_options_t *options, continue; /* We need to end with a reject *:*, not an implicit accept *:* */ for (;;) { - if (!strcmp((*linep)->value, "reject *:*")) /* already there */ - break; linep = &((*linep)->next); if (!*linep) { *linep = tor_malloc_zero(sizeof(config_line_t)); @@ -3104,11 +3106,29 @@ options_validate(or_options_t *old_options, or_options_t *options, if ((options->ReachableAddresses || options->ReachableORAddresses || - options->ReachableDirAddresses) && + options->ReachableDirAddresses || + options->ClientUseIPv4 == 0) && server_mode(options)) REJECT("Servers must be able to freely connect to the rest " "of the Internet, so they must not set Reachable*Addresses " - "or FascistFirewall."); + "or FascistFirewall or FirewallPorts or ClientUseIPv4 0."); + + /* We check if Reachable*Addresses blocks all addresses in + * parse_reachable_addresses(). */ + +#define WARN_PLEASE_USE_IPV6_LOG_MSG \ + "ClientPreferIPv6%sPort 1 is ignored unless tor is using IPv6. " \ + "Please set ClientUseIPv6 1, ClientUseIPv4 0, or configure bridges." + + if (!fascist_firewall_use_ipv6(options) + && options->ClientPreferIPv6ORPort == 1) + log_warn(LD_CONFIG, WARN_PLEASE_USE_IPV6_LOG_MSG, "OR"); + + if (!fascist_firewall_use_ipv6(options) + && options->ClientPreferIPv6DirPort == 1) + log_warn(LD_CONFIG, WARN_PLEASE_USE_IPV6_LOG_MSG, "Dir"); + +#undef WARN_PLEASE_USE_IPV6_LOG_MSG if (options->UseBridges && server_mode(options)) diff --git a/src/or/connection.c b/src/or/connection.c index 123c33a876..a1e9850dc0 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -19,6 +19,7 @@ */ #define TOR_CHANNEL_INTERNAL_ #define CONNECTION_PRIVATE +#include "backtrace.h" #include "channel.h" #include "channeltls.h" #include "circuitbuild.h" @@ -37,6 +38,7 @@ #include "ext_orport.h" #include "geoip.h" #include "main.h" +#include "nodelist.h" #include "policies.h" #include "reasons.h" #include "relay.h" @@ -44,6 +46,7 @@ #include "rendcommon.h" #include "rephist.h" #include "router.h" +#include "routerlist.h" #include "transports.h" #include "routerparse.h" #include "transports.h" @@ -1111,7 +1114,6 @@ connection_listener_new(const struct sockaddr *listensockaddr, start_reading = 1; tor_addr_from_sockaddr(&addr, listensockaddr, &usePort); - log_notice(LD_NET, "Opening %s on %s", conn_type_to_string(type), fmt_addrport(&addr, usePort)); @@ -1715,6 +1717,67 @@ connection_connect_sockaddr,(connection_t *conn, return inprogress ? 0 : 1; } +/* Log a message if connection attempt is made when IPv4 or IPv6 is disabled. + * Log a less severe message if we couldn't conform to ClientPreferIPv6ORPort + * or ClientPreferIPv6ORPort. */ +static void +connection_connect_log_client_use_ip_version(const connection_t *conn) +{ + const or_options_t *options = get_options(); + + /* Only clients care about ClientUseIPv4/6, bail out early on servers, and + * on connections we don't care about */ + if (server_mode(options) || !conn || conn->type == CONN_TYPE_EXIT) { + return; + } + + /* We're only prepared to log OR and DIR connections here */ + if (conn->type != CONN_TYPE_OR && conn->type != CONN_TYPE_DIR) { + return; + } + + const int must_ipv4 = !fascist_firewall_use_ipv6(options); + const int must_ipv6 = (options->ClientUseIPv4 == 0); + const int pref_ipv6 = (conn->type == CONN_TYPE_OR + ? fascist_firewall_prefer_ipv6_orport(options) + : fascist_firewall_prefer_ipv6_dirport(options)); + tor_addr_t real_addr; + tor_addr_make_null(&real_addr, AF_UNSPEC); + + /* OR conns keep the original address in real_addr, as addr gets overwritten + * with the descriptor address */ + if (conn->type == CONN_TYPE_OR) { + const or_connection_t *or_conn = TO_OR_CONN((connection_t *)conn); + tor_addr_copy(&real_addr, &or_conn->real_addr); + } else if (conn->type == CONN_TYPE_DIR) { + tor_addr_copy(&real_addr, &conn->addr); + } + + /* Check if we broke a mandatory address family restriction */ + if ((must_ipv4 && tor_addr_family(&real_addr) == AF_INET6) + || (must_ipv6 && tor_addr_family(&real_addr) == AF_INET)) { + log_warn(LD_BUG, "%s connection to %s violated ClientUseIPv%s 0.", + conn->type == CONN_TYPE_OR ? "OR" : "Dir", + fmt_addr(&real_addr), + options->ClientUseIPv4 == 0 ? "4" : "6"); + log_backtrace(LOG_WARN, LD_BUG, "Address came from"); + } + + /* Check if we couldn't satisfy an address family preference */ + if ((!pref_ipv6 && tor_addr_family(&real_addr) == AF_INET6) + || (pref_ipv6 && tor_addr_family(&real_addr) == AF_INET)) { + log_info(LD_NET, "Connection to %s doesn't satisfy ClientPreferIPv6%sPort " + "%d, with ClientUseIPv4 %d, and fascist_firewall_use_ipv6 %d " + "(ClientUseIPv6 %d and UseBridges %d).", + fmt_addr(&real_addr), + conn->type == CONN_TYPE_OR ? "OR" : "Dir", + conn->type == CONN_TYPE_OR ? options->ClientPreferIPv6ORPort + : options->ClientPreferIPv6DirPort, + options->ClientUseIPv4, fascist_firewall_use_ipv6(options), + options->ClientUseIPv6, options->UseBridges); + } +} + /** Take conn, make a nonblocking socket; try to connect to * addr:port (port arrives in *host order*). If fail, return -1 and if * applicable put your best guess about errno into *<b>socket_error</b>. @@ -1739,6 +1802,10 @@ connection_connect(connection_t *conn, const char *address, const or_options_t *options = get_options(); int protocol_family; + /* Log if we didn't stick to ClientUseIPv4/6 or ClientPreferIPv6OR/DirPort + */ + connection_connect_log_client_use_ip_version(conn); + if (tor_addr_family(addr) == AF_INET6) protocol_family = PF_INET6; else @@ -2398,7 +2465,8 @@ retry_listener_ports(smartlist_t *old_conns, /* We don't need to be root to create a UNIX socket, so defer until after * setuid. */ const or_options_t *options = get_options(); - if (port->is_unix_addr && !geteuid() && strcmp(options->User, "root")) + if (port->is_unix_addr && !geteuid() && (options->User) && + strcmp(options->User, "root")) continue; #endif @@ -4246,10 +4314,10 @@ connection_write_to_buf_impl_,(const char *string, size_t len, /** Return a connection with given type, address, port, and purpose; * or NULL if no such connection exists (or if all such connections are marked * for close). */ -connection_t * -connection_get_by_type_addr_port_purpose(int type, +MOCK_IMPL(connection_t *, +connection_get_by_type_addr_port_purpose,(int type, const tor_addr_t *addr, uint16_t port, - int purpose) + int purpose)) { CONN_GET_TEMPLATE(conn, (conn->type == type && diff --git a/src/or/connection.h b/src/or/connection.h index 59ea6d898e..ec5c3945ec 100644 --- a/src/or/connection.h +++ b/src/or/connection.h @@ -186,9 +186,9 @@ connection_get_outbuf_len(connection_t *conn) connection_t *connection_get_by_global_id(uint64_t id); connection_t *connection_get_by_type(int type); -connection_t *connection_get_by_type_addr_port_purpose(int type, - const tor_addr_t *addr, - uint16_t port, int purpose); +MOCK_DECL(connection_t *,connection_get_by_type_addr_port_purpose,(int type, + const tor_addr_t *addr, + uint16_t port, int purpose)); connection_t *connection_get_by_type_state(int type, int state); connection_t *connection_get_by_type_state_rendquery(int type, int state, const char *rendquery); diff --git a/src/or/control.c b/src/or/control.c index 66182fe2a4..2c0209ed85 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -2864,12 +2864,26 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len, } /* now circ refers to something that is ready to be extended */ + int first_node = zero_circ; SMARTLIST_FOREACH(nodes, const node_t *, node, { - extend_info_t *info = extend_info_from_node(node, 0); - tor_assert(info); /* True, since node_has_descriptor(node) == true */ + extend_info_t *info = extend_info_from_node(node, first_node); + if (first_node && !info) { + log_warn(LD_CONTROL, + "controller tried to connect to a node that doesn't have any " + "addresses that are allowed by the firewall configuration; " + "circuit marked for closing."); + circuit_mark_for_close(TO_CIRCUIT(circ), -END_CIRC_REASON_CONNECTFAILED); + connection_write_str_to_buf("551 Couldn't start circuit\r\n", conn); + goto done; + } else { + /* True, since node_has_descriptor(node) == true and we are extending + * to the node's primary address */ + tor_assert(info); + } circuit_append_new_exit(circ, info); extend_info_free(info); + first_node = 0; }); /* now that we've populated the cpath, start extending */ diff --git a/src/or/directory.c b/src/or/directory.c index c1fa37f242..fc610d05c4 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -4,6 +4,7 @@ /* See LICENSE for licensing information */ #include "or.h" +#include "backtrace.h" #include "buffers.h" #include "circuitbuild.h" #include "config.h" @@ -82,18 +83,18 @@ static void dir_microdesc_download_failed(smartlist_t *failed, static void note_client_request(int purpose, int compressed, size_t bytes); static int client_likes_consensus(networkstatus_t *v, const char *want_url); -static void directory_initiate_command_rend(const tor_addr_t *addr, - uint16_t or_port, - uint16_t dir_port, - const char *digest, - uint8_t dir_purpose, - uint8_t router_purpose, - dir_indirection_t indirection, - const char *resource, - const char *payload, - size_t payload_len, - time_t if_modified_since, - const rend_data_t *rend_query); +static void directory_initiate_command_rend( + const tor_addr_port_t *or_addr_port, + const tor_addr_port_t *dir_addr_port, + const char *digest, + uint8_t dir_purpose, + uint8_t router_purpose, + dir_indirection_t indirection, + const char *resource, + const char *payload, + size_t payload_len, + time_t if_modified_since, + const rend_data_t *rend_query); /********* START VARIABLES **********/ @@ -313,7 +314,6 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, SMARTLIST_FOREACH_BEGIN(dirservers, dir_server_t *, ds) { routerstatus_t *rs = &(ds->fake_status); size_t upload_len = payload_len; - tor_addr_t ds_addr; if ((type & ds->type) == 0) continue; @@ -344,11 +344,12 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, log_info(LD_DIR, "Uploading an extrainfo too (length %d)", (int) extrainfo_len); } - tor_addr_from_ipv4h(&ds_addr, ds->addr); if (purpose_needs_anonymity(dir_purpose, router_purpose)) { indirection = DIRIND_ANONYMOUS; - } else if (!fascist_firewall_allows_address_dir(&ds_addr,ds->dir_port)) { - if (fascist_firewall_allows_address_or(&ds_addr,ds->or_port)) + } else if (!fascist_firewall_allows_dir_server(ds, + FIREWALL_DIR_CONNECTION, + 0)) { + if (fascist_firewall_allows_dir_server(ds, FIREWALL_OR_CONNECTION, 0)) indirection = DIRIND_ONEHOP; else indirection = DIRIND_ANONYMOUS; @@ -496,11 +497,14 @@ MOCK_IMPL(void, directory_get_from_dirserver, ( const node_t *node = choose_random_dirguard(type); if (node && node->ri) { /* every bridge has a routerinfo. */ - tor_addr_t addr; routerinfo_t *ri = node->ri; - node_get_addr(node, &addr); - directory_initiate_command(&addr, - ri->or_port, 0/*no dirport*/, + /* clients always make OR connections to bridges */ + tor_addr_port_t or_ap; + /* we are willing to use a non-preferred address if we need to */ + fascist_firewall_choose_address_node(node, FIREWALL_OR_CONNECTION, 0, + &or_ap); + directory_initiate_command(&or_ap.addr, or_ap.port, + NULL, 0, /*no dirport*/ ri->cache_info.identity_digest, dir_purpose, router_purpose, @@ -609,6 +613,80 @@ dirind_is_anon(dir_indirection_t ind) return ind == DIRIND_ANON_DIRPORT || ind == DIRIND_ANONYMOUS; } +/* Choose reachable OR and Dir addresses and ports from status, copying them + * into use_or_ap and use_dir_ap. If indirection is anonymous, then we're + * connecting via another relay, so choose the primary IPv4 address and ports. + * + * status should have at least one reachable address, if we can't choose a + * reachable address, warn and return -1. Otherwise, return 0. + */ +static int +directory_choose_address_routerstatus(const routerstatus_t *status, + dir_indirection_t indirection, + tor_addr_port_t *use_or_ap, + tor_addr_port_t *use_dir_ap) +{ + tor_assert(status != NULL); + tor_assert(use_or_ap != NULL); + tor_assert(use_dir_ap != NULL); + + const int anonymized_connection = dirind_is_anon(indirection); + int have_or = 0, have_dir = 0; + + /* We expect status to have at least one reachable address if we're + * connecting to it directly. + * + * Therefore, we can simply use the other address if the one we want isn't + * allowed by the firewall. + * + * (When Tor uploads and downloads a hidden service descriptor, it uses + * DIRIND_ANONYMOUS, except for Tor2Web, which uses DIRIND_ONEHOP. + * So this code will only modify the address for Tor2Web's HS descriptor + * fetches. Even Single Onion Servers (NYI) use DIRIND_ANONYMOUS, to avoid + * HSDirs denying service by rejecting descriptors.) + */ + + /* Initialise the OR / Dir addresses */ + tor_addr_make_null(&use_or_ap->addr, AF_UNSPEC); + use_or_ap->port = 0; + tor_addr_make_null(&use_dir_ap->addr, AF_UNSPEC); + use_dir_ap->port = 0; + + if (anonymized_connection) { + /* Use the primary (IPv4) OR address if we're making an indirect + * connection. */ + tor_addr_from_ipv4h(&use_or_ap->addr, status->addr); + use_or_ap->port = status->or_port; + have_or = 1; + } else { + /* We use an IPv6 address if we have one and we prefer it. + * Use the preferred address and port if they are reachable, otherwise, + * use the alternate address and port (if any). + */ + have_or = fascist_firewall_choose_address_rs(status, + FIREWALL_OR_CONNECTION, 0, + use_or_ap); + } + + have_dir = fascist_firewall_choose_address_rs(status, + FIREWALL_DIR_CONNECTION, 0, + use_dir_ap); + + /* We rejected both addresses. This isn't great. */ + if (!have_or && !have_dir) { + log_warn(LD_BUG, "Rejected all OR and Dir addresses from %s when " + "launching a directory connection to: IPv4 %s OR %d Dir %d " + "IPv6 %s OR %d Dir %d", routerstatus_describe(status), + fmt_addr32(status->addr), status->or_port, + status->dir_port, fmt_addr(&status->ipv6_addr), + status->ipv6_orport, status->dir_port); + log_backtrace(LOG_WARN, LD_BUG, "Addresses came from"); + return -1; + } + + return 0; +} + /** Same as directory_initiate_command_routerstatus(), but accepts * rendezvous data to fetch a hidden service descriptor. */ void @@ -624,8 +702,11 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status, { const or_options_t *options = get_options(); const node_t *node; - tor_addr_t addr; + tor_addr_port_t use_or_ap, use_dir_ap; const int anonymized_connection = dirind_is_anon(indirection); + + tor_assert(status != NULL); + node = node_get_by_id(status->identity_digest); if (!node && anonymized_connection) { @@ -634,7 +715,6 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status, routerstatus_describe(status)); return; } - tor_addr_from_ipv4h(&addr, status->addr); if (options->ExcludeNodes && options->StrictNodes && routerset_contains_routerstatus(options->ExcludeNodes, status, -1)) { @@ -646,13 +726,30 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status, return; } - directory_initiate_command_rend(&addr, - status->or_port, status->dir_port, - status->identity_digest, - dir_purpose, router_purpose, - indirection, resource, - payload, payload_len, if_modified_since, - rend_query); + /* At this point, if we are a clients making a direct connection to a + * directory server, we have selected a server that has at least one address + * allowed by ClientUseIPv4/6 and Reachable{"",OR,Dir}Addresses. This + * selection uses the preference in ClientPreferIPv6{OR,Dir}Port, if + * possible. (If UseBridges is set, clients always use IPv6, and prefer it + * by default.) + * + * Now choose an address that we can use to connect to the directory server. + */ + if (directory_choose_address_routerstatus(status, indirection, &use_or_ap, + &use_dir_ap) < 0) { + return; + } + + /* We don't retry the alternate OR/Dir address for the same directory if + * the address we choose fails (#6772). + * Instead, we'll retry another directory on failure. */ + + directory_initiate_command_rend(&use_or_ap, &use_dir_ap, + status->identity_digest, + dir_purpose, router_purpose, + indirection, resource, + payload, payload_len, if_modified_since, + rend_query); } /** Launch a new connection to the directory server <b>status</b> to @@ -874,27 +971,52 @@ directory_command_should_use_begindir(const or_options_t *options, if (indirection == DIRIND_DIRECT_CONN || indirection == DIRIND_ANON_DIRPORT) return 0; if (indirection == DIRIND_ONEHOP) - if (!fascist_firewall_allows_address_or(addr, or_port) || + if (!fascist_firewall_allows_address_addr(addr, or_port, + FIREWALL_OR_CONNECTION, 0) || directory_fetches_from_authorities(options)) return 0; /* We're firewalled or are acting like a relay -- also no. */ return 1; } -/** Helper for directory_initiate_command_routerstatus: send the - * command to a server whose address is <b>address</b>, whose IP is - * <b>addr</b>, whose directory port is <b>dir_port</b>, whose tor version - * <b>supports_begindir</b>, and whose identity key digest is - * <b>digest</b>. */ +/** Helper for directory_initiate_command_rend: send the + * command to a server whose OR address/port is <b>or_addr</b>/<b>or_port</b>, + * whose directory address/port is <b>dir_addr</b>/<b>dir_port</b>, whose + * identity key digest is <b>digest</b>, with purposes <b>dir_purpose</b> and + * <b>router_purpose</b>, making an (in)direct connection as specified in + * <b>indirection</b>, with command <b>resource</b>, <b>payload</b> of + * <b>payload_len</b>, and asking for a result only <b>if_modified_since</b>. + */ void -directory_initiate_command(const tor_addr_t *_addr, - uint16_t or_port, uint16_t dir_port, +directory_initiate_command(const tor_addr_t *or_addr, uint16_t or_port, + const tor_addr_t *dir_addr, uint16_t dir_port, const char *digest, uint8_t dir_purpose, uint8_t router_purpose, dir_indirection_t indirection, const char *resource, const char *payload, size_t payload_len, time_t if_modified_since) { - directory_initiate_command_rend(_addr, or_port, dir_port, + tor_addr_port_t or_ap, dir_ap; + + /* Use the null tor_addr and 0 port if the address or port isn't valid. */ + if (tor_addr_port_is_valid(or_addr, or_port, 0)) { + tor_addr_copy(&or_ap.addr, or_addr); + or_ap.port = or_port; + } else { + /* the family doesn't matter here, so make it IPv4 */ + tor_addr_make_null(&or_ap.addr, AF_INET); + or_port = 0; + } + + if (tor_addr_port_is_valid(dir_addr, dir_port, 0)) { + tor_addr_copy(&dir_ap.addr, dir_addr); + dir_ap.port = dir_port; + } else { + /* the family doesn't matter here, so make it IPv4 */ + tor_addr_make_null(&dir_ap.addr, AF_INET); + dir_port = 0; + } + + directory_initiate_command_rend(&or_ap, &dir_ap, digest, dir_purpose, router_purpose, indirection, resource, payload, payload_len, @@ -914,10 +1036,11 @@ is_sensitive_dir_purpose(uint8_t dir_purpose) } /** Same as directory_initiate_command(), but accepts rendezvous data to - * fetch a hidden service descriptor. */ + * fetch a hidden service descriptor, and takes its address & port arguments + * as tor_addr_port_t. */ static void -directory_initiate_command_rend(const tor_addr_t *_addr, - uint16_t or_port, uint16_t dir_port, +directory_initiate_command_rend(const tor_addr_port_t *or_addr_port, + const tor_addr_port_t *dir_addr_port, const char *digest, uint8_t dir_purpose, uint8_t router_purpose, dir_indirection_t indirection, @@ -926,29 +1049,34 @@ directory_initiate_command_rend(const tor_addr_t *_addr, time_t if_modified_since, const rend_data_t *rend_query) { + tor_assert(or_addr_port); + tor_assert(dir_addr_port); + tor_assert(or_addr_port->port || dir_addr_port->port); + tor_assert(digest); + dir_connection_t *conn; const or_options_t *options = get_options(); int socket_error = 0; - int use_begindir = directory_command_should_use_begindir(options, _addr, - or_port, router_purpose, indirection); + const int use_begindir = directory_command_should_use_begindir(options, + &or_addr_port->addr, or_addr_port->port, + router_purpose, indirection); const int anonymized_connection = dirind_is_anon(indirection); - tor_addr_t addr; - - tor_assert(_addr); - tor_assert(or_port || dir_port); - tor_assert(digest); + const int or_connection = use_begindir || anonymized_connection; - tor_addr_copy(&addr, _addr); + tor_addr_t addr; + tor_addr_copy(&addr, &(or_connection ? or_addr_port : dir_addr_port)->addr); + uint16_t port = (or_connection ? or_addr_port : dir_addr_port)->port; + uint16_t dir_port = dir_addr_port->port; log_debug(LD_DIR, "anonymized %d, use_begindir %d.", anonymized_connection, use_begindir); if (!dir_port && !use_begindir) { char ipaddr[TOR_ADDR_BUF_LEN]; - tor_addr_to_str(ipaddr, _addr, TOR_ADDR_BUF_LEN, 0); + tor_addr_to_str(ipaddr, &addr, TOR_ADDR_BUF_LEN, 0); log_warn(LD_BUG, "Cannot use directory server without dirport or " - "begindir! Address: %s, ORPort: %d, DirPort: %d", - escaped_safe_str_client(ipaddr), or_port, dir_port); + "begindir! Address: %s, DirPort: %d, Connection Port: %d", + escaped_safe_str_client(ipaddr), dir_port, port); return; } @@ -963,13 +1091,26 @@ directory_initiate_command_rend(const tor_addr_t *_addr, /* ensure that we don't make direct connections when a SOCKS server is * configured. */ - if (!anonymized_connection && !use_begindir && !options->HTTPProxy && + if (!or_connection && !options->HTTPProxy && (options->Socks4Proxy || options->Socks5Proxy)) { log_warn(LD_DIR, "Cannot connect to a directory server through a " "SOCKS proxy!"); return; } + if (or_connection && (!or_addr_port->port + || tor_addr_is_null(&or_addr_port->addr))) { + log_warn(LD_DIR, "Cannot make an OR connection without an OR port."); + log_backtrace(LOG_WARN, LD_BUG, "Address came from"); + return; + } else if (!or_connection && (!dir_addr_port->port + || tor_addr_is_null(&dir_addr_port->addr))) { + log_warn(LD_DIR, "Cannot make a Dir connection without a Dir port."); + log_backtrace(LOG_WARN, LD_BUG, "Address came from"); + + return; + } + /* ensure we don't make excess connections when we're already downloading * a consensus during bootstrap */ if (connection_dir_avoid_extra_connection_for_purpose(dir_purpose)) { @@ -980,7 +1121,7 @@ directory_initiate_command_rend(const tor_addr_t *_addr, /* set up conn so it's got all the data we need to remember */ tor_addr_copy(&conn->base_.addr, &addr); - conn->base_.port = use_begindir ? or_port : dir_port; + conn->base_.port = port; conn->base_.address = tor_dup_addr(&addr); memcpy(conn->identity_digest, digest, DIGEST_LEN); @@ -998,7 +1139,7 @@ directory_initiate_command_rend(const tor_addr_t *_addr, if (rend_query) conn->rend_data = rend_data_dup(rend_query); - if (!anonymized_connection && !use_begindir) { + if (!or_connection) { /* then we want to connect to dirport directly */ if (options->HTTPProxy) { @@ -1159,6 +1300,23 @@ directory_get_consensus_url(const char *resource) return url; } +/** + * Copies the ipv6 from source to destination, subject to buffer size limit + * size. If decorate is true, makes sure the copied address is decorated. + */ +static void +copy_ipv6_address(char* destination, const char* source, size_t len, + int decorate) { + tor_assert(destination); + tor_assert(source); + + if (decorate && source[0] != '[') { + tor_snprintf(destination, len, "[%s]", source); + } else { + strlcpy(destination, source, len); + } +} + /** Queue an appropriate HTTP command on conn-\>outbuf. The other args * are as in directory_initiate_command(). */ @@ -1170,6 +1328,9 @@ directory_send_command(dir_connection_t *conn, { char proxystring[256]; char hoststring[128]; + /* NEEDS to be the same size hoststring. + Will be decorated with brackets around it if it is ipv6. */ + char decorated_address[128]; smartlist_t *headers = smartlist_new(); char *url; char request[8192]; @@ -1182,12 +1343,20 @@ directory_send_command(dir_connection_t *conn, if (resource) conn->requested_resource = tor_strdup(resource); + /* decorate the ip address if it is ipv6 */ + if (strchr(conn->base_.address, ':')) { + copy_ipv6_address(decorated_address, conn->base_.address, + sizeof(decorated_address), 1); + } else { + strlcpy(decorated_address, conn->base_.address, sizeof(decorated_address)); + } + /* come up with a string for which Host: we want */ if (conn->base_.port == 80) { - strlcpy(hoststring, conn->base_.address, sizeof(hoststring)); + strlcpy(hoststring, decorated_address, sizeof(hoststring)); } else { - tor_snprintf(hoststring, sizeof(hoststring),"%s:%d", - conn->base_.address, conn->base_.port); + tor_snprintf(hoststring, sizeof(hoststring), "%s:%d", + decorated_address, conn->base_.port); } /* Format if-modified-since */ diff --git a/src/or/directory.h b/src/or/directory.h index c5b5a5afe1..2630705fdb 100644 --- a/src/or/directory.h +++ b/src/or/directory.h @@ -68,8 +68,8 @@ int connection_dir_process_inbuf(dir_connection_t *conn); int connection_dir_finished_flushing(dir_connection_t *conn); int connection_dir_finished_connecting(dir_connection_t *conn); void connection_dir_about_to_close(dir_connection_t *dir_conn); -void directory_initiate_command(const tor_addr_t *addr, - uint16_t or_port, uint16_t dir_port, +void directory_initiate_command(const tor_addr_t *or_addr, uint16_t or_port, + const tor_addr_t *dir_addr, uint16_t dir_port, const char *digest, uint8_t dir_purpose, uint8_t router_purpose, dir_indirection_t indirection, diff --git a/src/or/dirserv.c b/src/or/dirserv.c index 491557e9cd..3771818457 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -3103,7 +3103,7 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key, DSR_HEX|DSR_SORT_UNIQ); SMARTLIST_FOREACH_BEGIN(digests, const char *, d) { if (router_digest_is_me(d)) { - /* make sure desc_routerinfo exists */ + /* calling router_get_my_routerinfo() to make sure it exists */ const routerinfo_t *ri = router_get_my_routerinfo(); if (ri) smartlist_add(descs_out, (void*) &(ri->cache_info)); diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c index 789c53da17..95d9fecfe4 100644 --- a/src/or/entrynodes.c +++ b/src/or/entrynodes.c @@ -87,7 +87,7 @@ get_entry_guards(void) /** Check whether the entry guard <b>e</b> is usable, given the directory * authorities' opinion about the router (stored in <b>ri</b>) and the user's - * configuration (in <b>options</b>). Set <b>e</b>->bad_since + * configuration (in <b>options</b>). Set <b>e</b>->bad_since * accordingly. Return true iff the entry guard's status changes. * * If it's not usable, set *<b>reason</b> to a static string explaining why. @@ -117,6 +117,9 @@ entry_guard_set_status(entry_guard_t *e, const node_t *node, *reason = "not recommended as a guard"; else if (routerset_contains_node(options->ExcludeNodes, node)) *reason = "excluded"; + /* We only care about OR connection connectivity for entry guards. */ + else if (!fascist_firewall_allows_node(node, FIREWALL_OR_CONNECTION, 0)) + *reason = "unreachable by config"; else if (e->path_bias_disabled) *reason = "path-biased"; @@ -268,7 +271,7 @@ entry_is_live(const entry_guard_t *e, entry_is_live_flags_t flags, *msg = "not fast/stable"; return NULL; } - if (!fascist_firewall_allows_node(node)) { + if (!fascist_firewall_allows_node(node, FIREWALL_OR_CONNECTION, 0)) { *msg = "unreachable by config"; return NULL; } @@ -918,7 +921,8 @@ entry_guards_set_from_config(const or_options_t *options) } else if (routerset_contains_node(options->ExcludeNodes, node)) { SMARTLIST_DEL_CURRENT(entry_nodes, node); continue; - } else if (!fascist_firewall_allows_node(node)) { + } else if (!fascist_firewall_allows_node(node, FIREWALL_OR_CONNECTION, + 0)) { SMARTLIST_DEL_CURRENT(entry_nodes, node); continue; } else if (! node->is_possible_guard) { @@ -2116,8 +2120,18 @@ launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge) return; } - directory_initiate_command(&bridge->addr, - bridge->port, 0/*no dirport*/, + /* Until we get a descriptor for the bridge, we only know one address for + * it. If we */ + if (!fascist_firewall_allows_address_addr(&bridge->addr, bridge->port, + FIREWALL_OR_CONNECTION, 0)) { + log_notice(LD_CONFIG, "Tried to fetch a descriptor directly from a " + "bridge, but that bridge is not reachable through our " + "firewall."); + return; + } + + directory_initiate_command(&bridge->addr, bridge->port, + NULL, 0, /*no dirport*/ bridge->identity, DIR_PURPOSE_FETCH_SERVERDESC, ROUTER_PURPOSE_BRIDGE, @@ -2178,7 +2192,8 @@ fetch_bridge_descriptors(const or_options_t *options, time_t now) !options->UpdateBridgesFromAuthority, !num_bridge_auths); if (ask_bridge_directly && - !fascist_firewall_allows_address_or(&bridge->addr, bridge->port)) { + !fascist_firewall_allows_address_addr(&bridge->addr, bridge->port, + FIREWALL_OR_CONNECTION, 0)) { log_notice(LD_DIR, "Bridge at '%s' isn't reachable by our " "firewall policy. %s.", fmt_addrport(&bridge->addr, bridge->port), @@ -2226,6 +2241,7 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node) * does so through an address from any source other than node_get_addr(). */ tor_addr_t addr; + const or_options_t *options = get_options(); if (node->ri) { routerinfo_t *ri = node->ri; @@ -2258,9 +2274,15 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node) } } - /* Mark which address to use based on which bridge_t we got. */ - node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 && - !tor_addr_is_null(&node->ri->ipv6_addr)); + if (options->ClientPreferIPv6ORPort == -1) { + /* Mark which address to use based on which bridge_t we got. */ + node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 && + !tor_addr_is_null(&node->ri->ipv6_addr)); + } else { + /* Mark which address to use based on user preference */ + node->ipv6_preferred = (fascist_firewall_prefer_ipv6_orport(options) && + !tor_addr_is_null(&node->ri->ipv6_addr)); + } /* XXXipv6 we lack support for falling back to another address for the same relay, warn the user */ @@ -2269,10 +2291,13 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node) node_get_pref_orport(node, &ap); log_notice(LD_CONFIG, "Bridge '%s' has both an IPv4 and an IPv6 address. " - "Will prefer using its %s address (%s).", + "Will prefer using its %s address (%s) based on %s.", ri->nickname, - tor_addr_family(&ap.addr) == AF_INET6 ? "IPv6" : "IPv4", - fmt_addrport(&ap.addr, ap.port)); + node->ipv6_preferred ? "IPv6" : "IPv4", + fmt_addrport(&ap.addr, ap.port), + options->ClientPreferIPv6ORPort == -1 ? + "the configured Bridge address" : + "ClientPreferIPv6ORPort"); } } if (node->rs) { diff --git a/src/or/main.c b/src/or/main.c index bd4f7eaa71..408f2447c1 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -191,32 +191,6 @@ int quiet_level = 0; * ****************************************************************************/ -#if 0 && defined(USE_BUFFEREVENTS) -static void -free_old_inbuf(connection_t *conn) -{ - if (! conn->inbuf) - return; - - tor_assert(conn->outbuf); - tor_assert(buf_datalen(conn->inbuf) == 0); - tor_assert(buf_datalen(conn->outbuf) == 0); - buf_free(conn->inbuf); - buf_free(conn->outbuf); - conn->inbuf = conn->outbuf = NULL; - - if (conn->read_event) { - event_del(conn->read_event); - tor_event_free(conn->read_event); - } - if (conn->write_event) { - event_del(conn->read_event); - tor_event_free(conn->write_event); - } - conn->read_event = conn->write_event = NULL; -} -#endif - #if defined(_WIN32) && defined(USE_BUFFEREVENTS) /** Remove the kernel-space send and receive buffers for <b>s</b>. For use * with IOCP only. */ @@ -946,18 +920,6 @@ conn_close_if_marked(int i) * would make much more sense to react in * connection_handle_read_impl, or to just stop reading in * mark_and_flush */ -#if 0 -#define MARKED_READING_RATE 180 - static ratelim_t marked_read_lim = RATELIM_INIT(MARKED_READING_RATE); - char *m; - if ((m = rate_limit_log(&marked_read_lim, now))) { - log_warn(LD_BUG, "Marked connection (fd %d, type %s, state %s) " - "is still reading; that shouldn't happen.%s", - (int)conn->s, conn_type_to_string(conn->type), - conn_state_to_string(conn->type, conn->state), m); - tor_free(m); - } -#endif conn->read_blocked_on_bw = 1; connection_stop_reading(conn); } @@ -1414,11 +1376,23 @@ reschedule_directory_downloads(void) periodic_event_reschedule(launch_descriptor_fetches_event); } +#define LONGEST_TIMER_PERIOD (30 * 86400) +/** Helper: Return the number of seconds between <b>now</b> and <b>next</b>, + * clipped to the range [1 second, LONGEST_TIMER_PERIOD]. */ static inline int safe_timer_diff(time_t now, time_t next) { if (next > now) { - tor_assert(next - now <= INT_MAX); + /* There were no computers at signed TIME_MIN (1902 on 32-bit systems), + * and nothing that could run Tor. It's a bug if 'next' is around then. + * On 64-bit systems with signed TIME_MIN, TIME_MIN is before the Big + * Bang. We cannot extrapolate past a singularity, but there was probably + * nothing that could run Tor then, either. + **/ + tor_assert(next > TIME_MIN + LONGEST_TIMER_PERIOD); + + if (next - LONGEST_TIMER_PERIOD > now) + return LONGEST_TIMER_PERIOD; return (int)(next - now); } else { return 1; @@ -2195,7 +2169,10 @@ got_libevent_error(void) void ip_address_changed(int at_interface) { - int server = server_mode(get_options()); + const or_options_t *options = get_options(); + int server = server_mode(options); + int exit_reject_private = (server && options->ExitRelay + && options->ExitPolicyRejectPrivate); if (at_interface) { if (! server) { @@ -2209,10 +2186,15 @@ ip_address_changed(int at_interface) reset_bandwidth_test(); stats_n_seconds_working = 0; router_reset_reachability(); - mark_my_descriptor_dirty("IP address changed"); } } + /* Exit relays incorporate interface addresses in their exit policies when + * ExitPolicyRejectPrivate is set */ + if (exit_reject_private || (server && !at_interface)) { + mark_my_descriptor_dirty("IP address changed"); + } + dns_servers_relaunch_checks(); } diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 056d5e8cb9..23e9b0e176 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -224,7 +224,6 @@ nodelist_set_consensus(networkstatus_t *ns) { const or_options_t *options = get_options(); int authdir = authdir_mode_v3(options); - int client = !server_mode(options); init_nodelist(); if (ns->flavor == FLAV_MICRODESC) @@ -261,7 +260,7 @@ nodelist_set_consensus(networkstatus_t *ns) node->is_bad_exit = rs->is_bad_exit; node->is_hs_dir = rs->is_hs_dir; node->ipv6_preferred = 0; - if (client && options->ClientPreferIPv6ORPort == 1 && + if (fascist_firewall_prefer_ipv6_orport(options) && (tor_addr_is_null(&rs->ipv6_addr) == 0 || (node->md && tor_addr_is_null(&node->md->ipv6_addr) == 0))) node->ipv6_preferred = 1; @@ -761,6 +760,40 @@ node_exit_policy_is_exact(const node_t *node, sa_family_t family) return 1; } +/* Check if the "addr" and port_field fields from r are a valid non-listening + * address/port. If so, set valid to true and add a newly allocated + * tor_addr_port_t containing "addr" and port_field to sl. + * "addr" is an IPv4 host-order address and port_field is a uint16_t. + * r is typically a routerinfo_t or routerstatus_t. + */ +#define SL_ADD_NEW_IPV4_AP(r, port_field, sl, valid) \ + STMT_BEGIN \ + if (tor_addr_port_is_valid_ipv4h((r)->addr, (r)->port_field, 0)) { \ + valid = 1; \ + tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); \ + tor_addr_from_ipv4h(&ap->addr, (r)->addr); \ + ap->port = (r)->port_field; \ + smartlist_add((sl), ap); \ + } \ + STMT_END + +/* Check if the "addr" and port_field fields from r are a valid non-listening + * address/port. If so, set valid to true and add a newly allocated + * tor_addr_port_t containing "addr" and port_field to sl. + * "addr" is a tor_addr_t and port_field is a uint16_t. + * r is typically a routerinfo_t or routerstatus_t. + */ +#define SL_ADD_NEW_IPV6_AP(r, port_field, sl, valid) \ + STMT_BEGIN \ + if (tor_addr_port_is_valid(&(r)->ipv6_addr, (r)->port_field, 0)) { \ + valid = 1; \ + tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); \ + tor_addr_copy(&ap->addr, &(r)->ipv6_addr); \ + ap->port = (r)->port_field; \ + smartlist_add((sl), ap); \ + } \ + STMT_END + /** Return list of tor_addr_port_t with all OR ports (in the sense IP * addr + TCP port) for <b>node</b>. Caller must free all elements * using tor_free() and free the list using smartlist_free(). @@ -773,30 +806,38 @@ smartlist_t * node_get_all_orports(const node_t *node) { smartlist_t *sl = smartlist_new(); + int valid = 0; + /* Find a valid IPv4 address and port */ if (node->ri != NULL) { - if (node->ri->addr != 0) { - tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); - tor_addr_from_ipv4h(&ap->addr, node->ri->addr); - ap->port = node->ri->or_port; - smartlist_add(sl, ap); - } - if (!tor_addr_is_null(&node->ri->ipv6_addr)) { - tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); - tor_addr_copy(&ap->addr, &node->ri->ipv6_addr); - ap->port = node->ri->or_port; - smartlist_add(sl, ap); - } - } else if (node->rs != NULL) { - tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); - tor_addr_from_ipv4h(&ap->addr, node->rs->addr); - ap->port = node->rs->or_port; - smartlist_add(sl, ap); + SL_ADD_NEW_IPV4_AP(node->ri, or_port, sl, valid); + } + + /* If we didn't find a valid address/port in the ri, try the rs */ + if (!valid && node->rs != NULL) { + SL_ADD_NEW_IPV4_AP(node->rs, or_port, sl, valid); + } + + /* Find a valid IPv6 address and port */ + valid = 0; + if (node->ri != NULL) { + SL_ADD_NEW_IPV6_AP(node->ri, ipv6_orport, sl, valid); + } + + if (!valid && node->rs != NULL) { + SL_ADD_NEW_IPV6_AP(node->rs, ipv6_orport, sl, valid); + } + + if (!valid && node->md != NULL) { + SL_ADD_NEW_IPV6_AP(node->md, ipv6_orport, sl, valid); } return sl; } +#undef SL_ADD_NEW_IPV4_AP +#undef SL_ADD_NEW_IPV6_AP + /** Wrapper around node_get_prim_orport for backward compatibility. */ void @@ -812,9 +853,13 @@ node_get_addr(const node_t *node, tor_addr_t *addr_out) uint32_t node_get_prim_addr_ipv4h(const node_t *node) { - if (node->ri) { + /* Don't check the ORPort or DirPort, as this function isn't port-specific, + * and the node might have a valid IPv4 address, yet have a zero + * ORPort or DirPort. + */ + if (node->ri && tor_addr_is_valid_ipv4h(node->ri->addr, 0)) { return node->ri->addr; - } else if (node->rs) { + } else if (node->rs && tor_addr_is_valid_ipv4h(node->rs->addr, 0)) { return node->rs->addr; } return 0; @@ -825,13 +870,13 @@ node_get_prim_addr_ipv4h(const node_t *node) void node_get_address_string(const node_t *node, char *buf, size_t len) { - if (node->ri) { - strlcpy(buf, fmt_addr32(node->ri->addr), len); - } else if (node->rs) { + uint32_t ipv4_addr = node_get_prim_addr_ipv4h(node); + + if (tor_addr_is_valid_ipv4h(ipv4_addr, 0)) { tor_addr_t addr; - tor_addr_from_ipv4h(&addr, node->rs->addr); + tor_addr_from_ipv4h(&addr, ipv4_addr); tor_addr_to_str(buf, &addr, len, 0); - } else { + } else if (len > 0) { buf[0] = '\0'; } } @@ -890,30 +935,80 @@ node_get_declared_family(const node_t *node) return NULL; } +/* Does this node have a valid IPv6 address? + * Prefer node_has_ipv6_orport() or node_has_ipv6_dirport() for + * checking specific ports. */ +int +node_has_ipv6_addr(const node_t *node) +{ + /* Don't check the ORPort or DirPort, as this function isn't port-specific, + * and the node might have a valid IPv6 address, yet have a zero + * ORPort or DirPort. + */ + if (node->ri && tor_addr_is_valid(&node->ri->ipv6_addr, 0)) + return 1; + if (node->rs && tor_addr_is_valid(&node->rs->ipv6_addr, 0)) + return 1; + if (node->md && tor_addr_is_valid(&node->md->ipv6_addr, 0)) + return 1; + + return 0; +} + +/* Does this node have a valid IPv6 ORPort? */ +int +node_has_ipv6_orport(const node_t *node) +{ + tor_addr_port_t ipv6_orport; + node_get_pref_ipv6_orport(node, &ipv6_orport); + return tor_addr_port_is_valid_ap(&ipv6_orport, 0); +} + +/* Does this node have a valid IPv6 DirPort? */ +int +node_has_ipv6_dirport(const node_t *node) +{ + tor_addr_port_t ipv6_dirport; + node_get_pref_ipv6_dirport(node, &ipv6_dirport); + return tor_addr_port_is_valid_ap(&ipv6_dirport, 0); +} + /** Return 1 if we prefer the IPv6 address and OR TCP port of * <b>node</b>, else 0. * - * We prefer the IPv6 address if the router has an IPv6 address and + * We prefer the IPv6 address if the router has an IPv6 address, + * and we can use IPv6 addresses, and: * i) the node_t says that it prefers IPv6 * or - * ii) the router has no IPv4 address. */ + * ii) the router has no IPv4 OR address. + */ int -node_ipv6_preferred(const node_t *node) +node_ipv6_or_preferred(const node_t *node) { + const or_options_t *options = get_options(); tor_addr_port_t ipv4_addr; node_assert_ok(node); - if (node->ipv6_preferred || node_get_prim_orport(node, &ipv4_addr)) { - if (node->ri) - return !tor_addr_is_null(&node->ri->ipv6_addr); - if (node->md) - return !tor_addr_is_null(&node->md->ipv6_addr); - if (node->rs) - return !tor_addr_is_null(&node->rs->ipv6_addr); + /* XX/teor - node->ipv6_preferred is set from + * fascist_firewall_prefer_ipv6_orport() each time the consensus is loaded. + */ + if (!fascist_firewall_use_ipv6(options)) { + return 0; + } else if (node->ipv6_preferred || node_get_prim_orport(node, &ipv4_addr)) { + return node_has_ipv6_orport(node); } return 0; } +#define RETURN_IPV4_AP(r, port_field, ap_out) \ + STMT_BEGIN \ + if (r && tor_addr_port_is_valid_ipv4h((r)->addr, (r)->port_field, 0)) { \ + tor_addr_from_ipv4h(&(ap_out)->addr, (r)->addr); \ + (ap_out)->port = (r)->port_field; \ + return 0; \ + } \ + STMT_END + /** Copy the primary (IPv4) OR port (IP address and TCP port) for * <b>node</b> into *<b>ap_out</b>. Return 0 if a valid address and * port was copied, else return non-zero.*/ @@ -923,20 +1018,10 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out) node_assert_ok(node); tor_assert(ap_out); - if (node->ri) { - if (node->ri->addr == 0 || node->ri->or_port == 0) - return -1; - tor_addr_from_ipv4h(&ap_out->addr, node->ri->addr); - ap_out->port = node->ri->or_port; - return 0; - } - if (node->rs) { - if (node->rs->addr == 0 || node->rs->or_port == 0) - return -1; - tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr); - ap_out->port = node->rs->or_port; - return 0; - } + RETURN_IPV4_AP(node->ri, or_port, ap_out); + RETURN_IPV4_AP(node->rs, or_port, ap_out); + /* Microdescriptors only have an IPv6 address */ + return -1; } @@ -945,21 +1030,12 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out) void node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out) { - const or_options_t *options = get_options(); tor_assert(ap_out); - /* Cheap implementation of config option ClientUseIPv6 -- simply - don't prefer IPv6 when ClientUseIPv6 is not set and we're not a - client running with bridges. See #4455 for more on this subject. - - Note that this filter is too strict since we're hindering not - only clients! Erring on the safe side shouldn't be a problem - though. XXX move this check to where outgoing connections are - made? -LN */ - if ((options->ClientUseIPv6 || options->UseBridges) && - node_ipv6_preferred(node)) { + if (node_ipv6_or_preferred(node)) { node_get_pref_ipv6_orport(node, ap_out); } else { + /* the primary ORPort is always on IPv4 */ node_get_prim_orport(node, ap_out); } } @@ -972,20 +1048,113 @@ node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out) node_assert_ok(node); tor_assert(ap_out); - /* We prefer the microdesc over a potential routerstatus here. They - are not being synchronised atm so there might be a chance that - they differ at some point, f.ex. when flipping - UseMicrodescriptors? -LN */ + /* Prefer routerstatus over microdesc for consistency with the + * fascist_firewall_* functions. Also check if the address or port are valid, + * and try another alternative if they are not. */ - if (node->ri) { + if (node->ri && tor_addr_port_is_valid(&node->ri->ipv6_addr, + node->ri->ipv6_orport, 0)) { tor_addr_copy(&ap_out->addr, &node->ri->ipv6_addr); ap_out->port = node->ri->ipv6_orport; - } else if (node->md) { + } else if (node->rs && tor_addr_port_is_valid(&node->rs->ipv6_addr, + node->rs->ipv6_orport, 0)) { + tor_addr_copy(&ap_out->addr, &node->rs->ipv6_addr); + ap_out->port = node->rs->ipv6_orport; + } else if (node->md && tor_addr_port_is_valid(&node->md->ipv6_addr, + node->md->ipv6_orport, 0)) { tor_addr_copy(&ap_out->addr, &node->md->ipv6_addr); ap_out->port = node->md->ipv6_orport; - } else if (node->rs) { + } else { + tor_addr_make_null(&ap_out->addr, AF_INET6); + ap_out->port = 0; + } +} + +/** Return 1 if we prefer the IPv6 address and Dir TCP port of + * <b>node</b>, else 0. + * + * We prefer the IPv6 address if the router has an IPv6 address, + * and we can use IPv6 addresses, and: + * i) the router has no IPv4 Dir address. + * or + * ii) our preference is for IPv6 Dir addresses. + */ +int +node_ipv6_dir_preferred(const node_t *node) +{ + const or_options_t *options = get_options(); + tor_addr_port_t ipv4_addr; + node_assert_ok(node); + + /* node->ipv6_preferred is set from fascist_firewall_prefer_ipv6_orport(), + * so we can't use it to determine DirPort IPv6 preference. + * This means that bridge clients will use IPv4 DirPorts by default. + */ + if (!fascist_firewall_use_ipv6(options)) { + return 0; + } else if (node_get_prim_dirport(node, &ipv4_addr) + || fascist_firewall_prefer_ipv6_dirport(get_options())) { + return node_has_ipv6_dirport(node); + } + return 0; +} + +/** Copy the primary (IPv4) Dir port (IP address and TCP port) for + * <b>node</b> into *<b>ap_out</b>. Return 0 if a valid address and + * port was copied, else return non-zero.*/ +int +node_get_prim_dirport(const node_t *node, tor_addr_port_t *ap_out) +{ + node_assert_ok(node); + tor_assert(ap_out); + + RETURN_IPV4_AP(node->ri, dir_port, ap_out); + RETURN_IPV4_AP(node->rs, dir_port, ap_out); + /* Microdescriptors only have an IPv6 address */ + + return -1; +} + +#undef RETURN_IPV4_AP + +/** Copy the preferred Dir port (IP address and TCP port) for + * <b>node</b> into *<b>ap_out</b>. */ +void +node_get_pref_dirport(const node_t *node, tor_addr_port_t *ap_out) +{ + tor_assert(ap_out); + + if (node_ipv6_dir_preferred(node)) { + node_get_pref_ipv6_dirport(node, ap_out); + } else { + /* the primary DirPort is always on IPv4 */ + node_get_prim_dirport(node, ap_out); + } +} + +/** Copy the preferred IPv6 Dir port (IP address and TCP port) for + * <b>node</b> into *<b>ap_out</b>. */ +void +node_get_pref_ipv6_dirport(const node_t *node, tor_addr_port_t *ap_out) +{ + node_assert_ok(node); + tor_assert(ap_out); + + /* Check if the address or port are valid, and try another alternative if + * they are not. Note that microdescriptors have no dir_port. */ + + /* Assume IPv4 and IPv6 dirports are the same */ + if (node->ri && tor_addr_port_is_valid(&node->ri->ipv6_addr, + node->ri->dir_port, 0)) { + tor_addr_copy(&ap_out->addr, &node->ri->ipv6_addr); + ap_out->port = node->ri->dir_port; + } else if (node->rs && tor_addr_port_is_valid(&node->rs->ipv6_addr, + node->rs->dir_port, 0)) { tor_addr_copy(&ap_out->addr, &node->rs->ipv6_addr); - ap_out->port = node->rs->ipv6_orport; + ap_out->port = node->rs->dir_port; + } else { + tor_addr_make_null(&ap_out->addr, AF_INET6); + ap_out->port = 0; } } diff --git a/src/or/nodelist.h b/src/or/nodelist.h index a131e0dd4e..8271e7532a 100644 --- a/src/or/nodelist.h +++ b/src/or/nodelist.h @@ -55,10 +55,20 @@ void node_get_address_string(const node_t *node, char *cp, size_t len); long node_get_declared_uptime(const node_t *node); time_t node_get_published_on(const node_t *node); const smartlist_t *node_get_declared_family(const node_t *node); -int node_ipv6_preferred(const node_t *node); + +int node_has_ipv6_addr(const node_t *node); +int node_has_ipv6_orport(const node_t *node); +int node_has_ipv6_dirport(const node_t *node); +/* Deprecated - use node_ipv6_or_preferred or node_ipv6_dir_preferred */ +#define node_ipv6_preferred(node) node_ipv6_or_preferred(node) +int node_ipv6_or_preferred(const node_t *node); int node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out); void node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out); void node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out); +int node_ipv6_dir_preferred(const node_t *node); +int node_get_prim_dirport(const node_t *node, tor_addr_port_t *ap_out); +void node_get_pref_dirport(const node_t *node, tor_addr_port_t *ap_out); +void node_get_pref_ipv6_dirport(const node_t *node, tor_addr_port_t *ap_out); int node_has_curve25519_onion_key(const node_t *node); MOCK_DECL(smartlist_t *, nodelist_get_list, (void)); diff --git a/src/or/or.h b/src/or/or.h index 6faeb34d56..f438212b31 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2414,7 +2414,8 @@ typedef struct node_t { /* Local info: derived. */ - /** True if the IPv6 OR port is preferred over the IPv4 OR port. */ + /** True if the IPv6 OR port is preferred over the IPv4 OR port. + * XX/teor - can this become out of date if the torrc changes? */ unsigned int ipv6_preferred:1; /** According to the geoip db what country is this router in? */ @@ -4081,12 +4082,24 @@ typedef struct { * over randomly chosen exits. */ int ClientRejectInternalAddresses; - /** If true, clients may connect over IPv6. XXX we don't really - enforce this -- clients _may_ set up outgoing IPv6 connections - even when this option is not set. */ + /** If true, clients may connect over IPv4. If false, they will avoid + * connecting over IPv4. We enforce this for OR and Dir connections. */ + int ClientUseIPv4; + /** If true, clients may connect over IPv6. If false, they will avoid + * connecting over IPv4. We enforce this for OR and Dir connections. + * Use fascist_firewall_use_ipv6() instead of accessing this value + * directly. */ int ClientUseIPv6; - /** If true, prefer an IPv6 OR port over an IPv4 one. */ + /** If true, prefer an IPv6 OR port over an IPv4 one for entry node + * connections. If auto, bridge clients prefer IPv6, and other clients + * prefer IPv4. Use fascist_firewall_prefer_ipv6_orport() instead of + * accessing this value directly. */ int ClientPreferIPv6ORPort; + /** If true, prefer an IPv6 directory port over an IPv4 one for direct + * directory connections. If auto, bridge clients prefer IPv6, and other + * clients prefer IPv4. Use fascist_firewall_prefer_ipv6_dirport() instead of + * accessing this value directly. */ + int ClientPreferIPv6DirPort; /** The length of time that we think a consensus should be fresh. */ int V3AuthVotingInterval; @@ -5145,6 +5158,8 @@ typedef struct dir_server_t { char *description; char *nickname; char *address; /**< Hostname. */ + /* XX/teor - why do we duplicate the address and port fields here and in + * fake_status? Surely we could just use fake_status (#17867). */ tor_addr_t ipv6_addr; /**< IPv6 address if present; AF_UNSPEC if not */ uint32_t addr; /**< IPv4 address. */ uint16_t dir_port; /**< Directory port. */ @@ -5230,7 +5245,9 @@ typedef enum { CRN_ALLOW_INVALID = 1<<3, /* XXXX not used, apparently. */ CRN_WEIGHT_AS_EXIT = 1<<5, - CRN_NEED_DESC = 1<<6 + CRN_NEED_DESC = 1<<6, + /* On clients, only provide nodes that satisfy ClientPreferIPv6OR */ + CRN_PREF_ADDR = 1<<7 } router_crn_flags_t; /** Return value for router_add_to_routerlist() and dirserv_add_descriptor() */ diff --git a/src/or/policies.c b/src/or/policies.c index 4706a9da72..984ab6acf9 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -13,6 +13,7 @@ #include "or.h" #include "config.h" #include "dirserv.h" +#include "networkstatus.h" #include "nodelist.h" #include "policies.h" #include "router.h" @@ -270,16 +271,76 @@ parse_reachable_addresses(void) "Error parsing ReachableDirAddresses entry; ignoring."); ret = -1; } + + /* We ignore ReachableAddresses for relays */ + if (!server_mode(options)) { + if ((reachable_or_addr_policy + && policy_is_reject_star(reachable_or_addr_policy, AF_UNSPEC)) + || (reachable_dir_addr_policy + && policy_is_reject_star(reachable_dir_addr_policy, AF_UNSPEC))) { + log_warn(LD_CONFIG, "Tor cannot connect to the Internet if " + "ReachableAddresses, ReachableORAddresses, or " + "ReachableDirAddresses reject all addresses. Please accept " + "some addresses in these options."); + } else if (options->ClientUseIPv4 == 1 + && ((reachable_or_addr_policy + && policy_is_reject_star(reachable_or_addr_policy, AF_INET)) + || (reachable_dir_addr_policy + && policy_is_reject_star(reachable_dir_addr_policy, AF_INET)))) { + log_warn(LD_CONFIG, "You have set ClientUseIPv4 1, but " + "ReachableAddresses, ReachableORAddresses, or " + "ReachableDirAddresses reject all IPv4 addresses. " + "Tor will not connect using IPv4."); + } else if (fascist_firewall_use_ipv6(options) + && ((reachable_or_addr_policy + && policy_is_reject_star(reachable_or_addr_policy, AF_INET6)) + || (reachable_dir_addr_policy + && policy_is_reject_star(reachable_dir_addr_policy, AF_INET6)))) { + log_warn(LD_CONFIG, "You have configured tor to use IPv6 " + "(ClientUseIPv6 1 or UseBridges 1), but " + "ReachableAddresses, ReachableORAddresses, or " + "ReachableDirAddresses reject all IPv6 addresses. " + "Tor will not connect using IPv6."); + } + } + return ret; } -/** Return true iff the firewall options might block any address:port - * combination. +/* Return true iff ClientUseIPv4 0 or ClientUseIPv6 0 might block any OR or Dir + * address:port combination. */ +static int +firewall_is_fascist_impl(void) +{ + const or_options_t *options = get_options(); + /* Assume every non-bridge relay has an IPv4 address. + * Clients which use bridges may only know the IPv6 address of their + * bridge. */ + return (options->ClientUseIPv4 == 0 + || (!fascist_firewall_use_ipv6(options) + && options->UseBridges == 1)); +} + +/** Return true iff the firewall options, including ClientUseIPv4 0 and + * ClientUseIPv6 0, might block any OR address:port combination. + * Address preferences may still change which address is selected even if + * this function returns false. */ int firewall_is_fascist_or(void) { - return reachable_or_addr_policy != NULL; + return (reachable_or_addr_policy != NULL || firewall_is_fascist_impl()); +} + +/** Return true iff the firewall options, including ClientUseIPv4 0 and + * ClientUseIPv6 0, might block any Dir address:port combination. + * Address preferences may still change which address is selected even if + * this function returns false. + */ +int +firewall_is_fascist_dir(void) +{ + return (reachable_dir_addr_policy != NULL || firewall_is_fascist_impl()); } /** Return true iff <b>policy</b> (possibly NULL) will allow a @@ -317,49 +378,626 @@ addr_policy_permits_address(uint32_t addr, uint16_t port, return addr_policy_permits_tor_addr(&a, port, policy); } -/** Return true iff we think our firewall will let us make an OR connection to - * addr:port. */ -int -fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port) +/** Return true iff we think our firewall will let us make a connection to + * addr:port. + * + * If we are configured as a server, ignore any address family preference and + * just use IPv4. + * Otherwise: + * - return false for all IPv4 addresses: + * - if ClientUseIPv4 is 0, or + * if pref_only and pref_ipv6 are both true; + * - return false for all IPv6 addresses: + * - if fascist_firewall_use_ipv6() is 0, or + * - if pref_only is true and pref_ipv6 is false. + * + * Return false if addr is NULL or tor_addr_is_null(), or if port is 0. */ +STATIC int +fascist_firewall_allows_address(const tor_addr_t *addr, + uint16_t port, + smartlist_t *firewall_policy, + int pref_only, int pref_ipv6) { + const or_options_t *options = get_options(); + + if (!addr || tor_addr_is_null(addr) || !port) { + return 0; + } + + if (!server_mode(options)) { + if (tor_addr_family(addr) == AF_INET && + (!options->ClientUseIPv4 || (pref_only && pref_ipv6))) + return 0; + + /* Bridges can always use IPv6 */ + if (tor_addr_family(addr) == AF_INET6 && + (!fascist_firewall_use_ipv6(options) || (pref_only && !pref_ipv6))) + return 0; + } + return addr_policy_permits_tor_addr(addr, port, - reachable_or_addr_policy); + firewall_policy); } -/** Return true iff we think our firewall will let us make an OR connection to - * <b>ri</b>. */ +/** Is this client configured to use IPv6? + */ int -fascist_firewall_allows_or(const routerinfo_t *ri) +fascist_firewall_use_ipv6(const or_options_t *options) { - /* XXXX proposal 118 */ - tor_addr_t addr; - tor_addr_from_ipv4h(&addr, ri->addr); - return fascist_firewall_allows_address_or(&addr, ri->or_port); + /* Clients use IPv6 if it's set, or they use bridges, or they don't use + * IPv4 */ + return (options->ClientUseIPv6 == 1 || options->UseBridges == 1 + || options->ClientUseIPv4 == 0); } -/** Return true iff we think our firewall will let us make an OR connection to - * <b>node</b>. */ +/** Do we prefer to connect to IPv6, ignoring ClientPreferIPv6ORPort and + * ClientPreferIPv6DirPort? + * If we're unsure, return -1, otherwise, return 1 for IPv6 and 0 for IPv4. + */ +static int +fascist_firewall_prefer_ipv6_impl(const or_options_t *options) +{ + /* + Cheap implementation of config options ClientUseIPv4 & ClientUseIPv6 -- + If we're a server or IPv6 is disabled, use IPv4. + If IPv4 is disabled, use IPv6. + */ + + if (server_mode(options) || !fascist_firewall_use_ipv6(options)) { + return 0; + } + + if (!options->ClientUseIPv4) { + return 1; + } + + return -1; +} + +/** Do we prefer to connect to IPv6 ORPorts? + */ int -fascist_firewall_allows_node(const node_t *node) +fascist_firewall_prefer_ipv6_orport(const or_options_t *options) +{ + /* node->ipv6_preferred is set from fascist_firewall_prefer_ipv6_orport() + * each time the consensus is loaded. + * If our preferences change, we will only reset ipv6_preferred on the node + * when the next consensus is loaded. But the consensus is realoded when the + * configuration changes after a HUP. So as long as the result of this + * function only depends on Tor's options, everything should work ok. + */ + int pref_ipv6 = fascist_firewall_prefer_ipv6_impl(options); + + if (pref_ipv6 >= 0) { + return pref_ipv6; + } + + /* We can use both IPv4 and IPv6 - which do we prefer? */ + if (options->ClientPreferIPv6ORPort == 1) { + return 1; + } + + return 0; +} + +/** Do we prefer to connect to IPv6 DirPorts? + */ +int +fascist_firewall_prefer_ipv6_dirport(const or_options_t *options) { - if (node->ri) { - return fascist_firewall_allows_or(node->ri); - } else if (node->rs) { - tor_addr_t addr; - tor_addr_from_ipv4h(&addr, node->rs->addr); - return fascist_firewall_allows_address_or(&addr, node->rs->or_port); + int pref_ipv6 = fascist_firewall_prefer_ipv6_impl(options); + + if (pref_ipv6 >= 0) { + return pref_ipv6; + } + + /* We can use both IPv4 and IPv6 - which do we prefer? */ + if (options->ClientPreferIPv6DirPort == 1) { + return 1; + } + + return 0; +} + +/** Return true iff we think our firewall will let us make a connection to + * addr:port. Uses ReachableORAddresses or ReachableDirAddresses based on + * fw_connection. + * If pref_only, return false if addr is not in the client's preferred address + * family. + */ +int +fascist_firewall_allows_address_addr(const tor_addr_t *addr, uint16_t port, + firewall_connection_t fw_connection, + int pref_only) +{ + const or_options_t *options = get_options(); + + if (fw_connection == FIREWALL_OR_CONNECTION) { + return fascist_firewall_allows_address(addr, port, + reachable_or_addr_policy, + pref_only, + fascist_firewall_prefer_ipv6_orport(options)); + } else if (fw_connection == FIREWALL_DIR_CONNECTION) { + return fascist_firewall_allows_address(addr, port, + reachable_dir_addr_policy, + pref_only, + fascist_firewall_prefer_ipv6_dirport(options)); + } else { + log_warn(LD_BUG, "Bad firewall_connection_t value %d.", + fw_connection); + return 0; + } +} + +/** Return true iff we think our firewall will let us make a connection to + * addr:port (ap). Uses ReachableORAddresses or ReachableDirAddresses based on + * fw_connection. + * If pref_only, return false if addr is not in the client's preferred address + * family. + */ +int +fascist_firewall_allows_address_ap(const tor_addr_port_t *ap, + firewall_connection_t fw_connection, + int pref_only) +{ + tor_assert(ap); + return fascist_firewall_allows_address_addr(&ap->addr, ap->port, + fw_connection, pref_only); +} + +/* Return true iff we think our firewall will let us make a connection to + * ipv4h_or_addr:ipv4_or_port. ipv4h_or_addr is interpreted in host order. + * Uses ReachableORAddresses or ReachableDirAddresses based on + * fw_connection. + * If pref_only, return false if addr is not in the client's preferred address + * family. */ +int +fascist_firewall_allows_address_ipv4h(uint32_t ipv4h_or_addr, + uint16_t ipv4_or_port, + firewall_connection_t fw_connection, + int pref_only) +{ + tor_addr_t ipv4_or_addr; + tor_addr_from_ipv4h(&ipv4_or_addr, ipv4h_or_addr); + return fascist_firewall_allows_address_addr(&ipv4_or_addr, ipv4_or_port, + fw_connection, pref_only); +} + +/** Return true iff we think our firewall will let us make a connection to + * ipv4h_addr/ipv6_addr. Uses ipv4_orport/ipv6_orport/ReachableORAddresses or + * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and + * <b>fw_connection</b>. + * If pref_only, return false if addr is not in the client's preferred address + * family. */ +static int +fascist_firewall_allows_base(uint32_t ipv4h_addr, uint16_t ipv4_orport, + uint16_t ipv4_dirport, + const tor_addr_t *ipv6_addr, uint16_t ipv6_orport, + uint16_t ipv6_dirport, + firewall_connection_t fw_connection, + int pref_only) +{ + if (fascist_firewall_allows_address_ipv4h(ipv4h_addr, + (fw_connection == FIREWALL_OR_CONNECTION + ? ipv4_orport + : ipv4_dirport), + fw_connection, + pref_only)) { + return 1; + } + + if (fascist_firewall_allows_address_addr(ipv6_addr, + (fw_connection == FIREWALL_OR_CONNECTION + ? ipv6_orport + : ipv6_dirport), + fw_connection, + pref_only)) { + return 1; + } + + return 0; +} + +/** Like fascist_firewall_allows_ri, but doesn't consult the node. */ +static int +fascist_firewall_allows_ri_impl(const routerinfo_t *ri, + firewall_connection_t fw_connection, + int pref_only) +{ + if (!ri) { + return 0; + } + + /* Assume IPv4 and IPv6 DirPorts are the same */ + return fascist_firewall_allows_base(ri->addr, ri->or_port, ri->dir_port, + &ri->ipv6_addr, ri->ipv6_orport, + ri->dir_port, fw_connection, pref_only); +} + +/** Like fascist_firewall_allows_rs, but doesn't consult the node. */ +static int +fascist_firewall_allows_rs_impl(const routerstatus_t *rs, + firewall_connection_t fw_connection, + int pref_only) +{ + if (!rs) { + return 0; + } + + /* Assume IPv4 and IPv6 DirPorts are the same */ + return fascist_firewall_allows_base(rs->addr, rs->or_port, rs->dir_port, + &rs->ipv6_addr, rs->ipv6_orport, + rs->dir_port, fw_connection, pref_only); +} + +/** Return true iff we think our firewall will let us make a connection to + * <b>rs</b> on either its IPv4 or IPv6 address. Uses + * or_port/ipv6_orport/ReachableORAddresses or dir_port/ReachableDirAddresses + * based on IPv4/IPv6 and <b>fw_connection</b>. + * If pref_only, return false if addr is not in the client's preferred address + * family. + * Consults the corresponding node if the addresses in rs are not permitted. */ +int +fascist_firewall_allows_rs(const routerstatus_t *rs, + firewall_connection_t fw_connection, int pref_only) +{ + if (!rs) { + return 0; + } + + /* Assume IPv4 and IPv6 DirPorts are the same */ + if (fascist_firewall_allows_rs_impl(rs, fw_connection, pref_only)) { + return 1; } else { + const node_t *node = node_get_by_id(rs->identity_digest); + return fascist_firewall_allows_node(node, fw_connection, pref_only); + } +} + +/** Like fascist_firewall_allows_md, but doesn't consult the node. */ +static int +fascist_firewall_allows_md_impl(const microdesc_t *md, + firewall_connection_t fw_connection, + int pref_only) +{ + if (!md) { + return 0; + } + + /* Can't check dirport, it doesn't have one */ + if (fw_connection == FIREWALL_DIR_CONNECTION) { + return 0; + } + + /* Also can't check IPv4, doesn't have that either */ + return fascist_firewall_allows_address_addr(&md->ipv6_addr, md->ipv6_orport, + fw_connection, pref_only); +} + +/** Return true iff we think our firewall will let us make a connection to + * <b>node</b>: + * - if <b>preferred</b> is true, on its preferred address, + * - if not, on either its IPv4 or IPv6 address. + * Uses or_port/ipv6_orport/ReachableORAddresses or + * dir_port/ReachableDirAddresses based on IPv4/IPv6 and <b>fw_connection</b>. + * If pref_only, return false if addr is not in the client's preferred address + * family. */ +int +fascist_firewall_allows_node(const node_t *node, + firewall_connection_t fw_connection, + int pref_only) +{ + if (!node) { + return 0; + } + + node_assert_ok(node); + + /* Sometimes, the rs is missing the IPv6 address info, and we need to go + * all the way to the md */ + if (node->ri && fascist_firewall_allows_ri_impl(node->ri, fw_connection, + pref_only)) { + return 1; + } else if (node->rs && fascist_firewall_allows_rs_impl(node->rs, + fw_connection, + pref_only)) { return 1; + } else if (node->md && fascist_firewall_allows_md_impl(node->md, + fw_connection, + pref_only)) { + return 1; + } else { + /* If we know nothing, assume it's unreachable, we'll never get an address + * to connect to. */ + return 0; } } -/** Return true iff we think our firewall will let us make a directory - * connection to addr:port. */ +/** Return true iff we think our firewall will let us make a connection to + * <b>ds</b> on either its IPv4 or IPv6 address. Uses ReachableORAddresses or + * ReachableDirAddresses based on <b>fw_connection</b> (some directory + * connections are tunneled over ORPorts). + * If pref_only, return false if addr is not in the client's preferred address + * family. */ int -fascist_firewall_allows_address_dir(const tor_addr_t *addr, uint16_t port) +fascist_firewall_allows_dir_server(const dir_server_t *ds, + firewall_connection_t fw_connection, + int pref_only) { - return addr_policy_permits_tor_addr(addr, port, - reachable_dir_addr_policy); + if (!ds) { + return 0; + } + + /* A dir_server_t always has a fake_status. As long as it has the same + * addresses/ports in both fake_status and dir_server_t, this works fine. + * (See #17867.) + * This function relies on fascist_firewall_allows_rs looking up the node on + * failure, because it will get the latest info for the relay. */ + return fascist_firewall_allows_rs(&ds->fake_status, fw_connection, + pref_only); +} + +/** If a and b are both valid and allowed by fw_connection, + * choose one based on want_a and return it. + * Otherwise, return whichever is allowed. + * Otherwise, return NULL. + * If pref_only, only return an address if it's in the client's preferred + * address family. */ +static const tor_addr_port_t * +fascist_firewall_choose_address_impl(const tor_addr_port_t *a, + const tor_addr_port_t *b, + int want_a, + firewall_connection_t fw_connection, + int pref_only) +{ + const tor_addr_port_t *use_a = NULL; + const tor_addr_port_t *use_b = NULL; + + if (fascist_firewall_allows_address_ap(a, fw_connection, pref_only)) { + use_a = a; + } + + if (fascist_firewall_allows_address_ap(b, fw_connection, pref_only)) { + use_b = b; + } + + /* If both are allowed */ + if (use_a && use_b) { + /* Choose a if we want it */ + return (want_a ? use_a : use_b); + } else { + /* Choose a if we have it */ + return (use_a ? use_a : use_b); + } +} + +/** If a and b are both valid and preferred by fw_connection, + * choose one based on want_a and return it. + * Otherwise, return whichever is preferred. + * If neither are preferred, and pref_only is false: + * - If a and b are both allowed by fw_connection, + * choose one based on want_a and return it. + * - Otherwise, return whichever is preferred. + * Otherwise, return NULL. */ +const tor_addr_port_t * +fascist_firewall_choose_address(const tor_addr_port_t *a, + const tor_addr_port_t *b, + int want_a, + firewall_connection_t fw_connection, + int pref_only) +{ + const tor_addr_port_t *pref = fascist_firewall_choose_address_impl( + a, b, want_a, + fw_connection, + 1); + if (pref_only || pref) { + /* If there is a preferred address, use it. If we can only use preferred + * addresses, and neither address is preferred, pref will be NULL, and we + * want to return NULL, so return it. */ + return pref; + } else { + /* If there's no preferred address, and we can return addresses that are + * not preferred, use an address that's allowed */ + return fascist_firewall_choose_address_impl(a, b, want_a, fw_connection, + 0); + } +} + +/** Copy an address and port into <b>ap</b> that we think our firewall will + * let us connect to. Uses ipv4_addr/ipv6_addr and + * ipv4_orport/ipv6_orport/ReachableORAddresses or + * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and + * <b>fw_connection</b>. + * If pref_only, only choose preferred addresses. In either case, choose + * a preferred address before an address that's not preferred. + * If neither address is chosen, return 0, else return 1. */ +static int +fascist_firewall_choose_address_base(const tor_addr_t *ipv4_addr, + uint16_t ipv4_orport, + uint16_t ipv4_dirport, + const tor_addr_t *ipv6_addr, + uint16_t ipv6_orport, + uint16_t ipv6_dirport, + firewall_connection_t fw_connection, + int pref_only, + tor_addr_port_t* ap) +{ + const tor_addr_port_t *result = NULL; + /* This argument is ignored as long as the address pair is IPv4/IPv6, + * because we always have a preference in a client. + * For bridge clients, this selects the preferred address, which was + * previously IPv6 (if a bridge has both), so we keep that behaviour. */ + const int bridge_client_prefer_ipv4 = 0; + + tor_assert(ipv6_addr); + tor_assert(ap); + + tor_addr_port_t ipv4_ap; + tor_addr_copy(&ipv4_ap.addr, ipv4_addr); + ipv4_ap.port = (fw_connection == FIREWALL_OR_CONNECTION + ? ipv4_orport + : ipv4_dirport); + + tor_addr_port_t ipv6_ap; + tor_addr_copy(&ipv6_ap.addr, ipv6_addr); + ipv6_ap.port = (fw_connection == FIREWALL_OR_CONNECTION + ? ipv6_orport + : ipv6_dirport); + + result = fascist_firewall_choose_address(&ipv4_ap, &ipv6_ap, + bridge_client_prefer_ipv4, + fw_connection, pref_only); + + if (result) { + tor_addr_copy(&ap->addr, &result->addr); + ap->port = result->port; + return 1; + } else { + return 0; + } +} + +/** Like fascist_firewall_choose_address_base, but takes a host-order IPv4 + * address as the first parameter. */ +static int +fascist_firewall_choose_address_ipv4h(uint32_t ipv4h_addr, + uint16_t ipv4_orport, + uint16_t ipv4_dirport, + const tor_addr_t *ipv6_addr, + uint16_t ipv6_orport, + uint16_t ipv6_dirport, + firewall_connection_t fw_connection, + int pref_only, + tor_addr_port_t* ap) +{ + tor_addr_t ipv4_addr; + tor_addr_from_ipv4h(&ipv4_addr, ipv4h_addr); + return fascist_firewall_choose_address_base(&ipv4_addr, ipv4_orport, + ipv4_dirport, ipv6_addr, + ipv6_orport, ipv6_dirport, + fw_connection, pref_only, ap); +} + +#define IPV6_OR_LOOKUP(r, identity_digest, ipv6_or_ap) \ + STMT_BEGIN \ + if (!(r)->ipv6_orport || tor_addr_is_null(&(r)->ipv6_addr)) { \ + const node_t *node = node_get_by_id((identity_digest)); \ + if (node) { \ + node_get_pref_ipv6_orport(node, &(ipv6_or_ap)); \ + } else { \ + tor_addr_make_null(&(ipv6_or_ap).addr, AF_INET6); \ + (ipv6_or_ap).port = 0; \ + } \ + } else { \ + tor_addr_copy(&(ipv6_or_ap).addr, &(r)->ipv6_addr); \ + (ipv6_or_ap).port = (r)->ipv6_orport; \ + } \ + STMT_END + +/** Copy an address and port from <b>rs</b> into <b>ap</b> that we think our + * firewall will let us connect to. Uses ipv4h_addr/ipv6_addr and + * ipv4_orport/ipv6_orport/ReachableORAddresses or + * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and + * <b>fw_connection</b>. + * If pref_only, only choose preferred addresses. In either case, choose + * a preferred address before an address that's not preferred. + * If neither address is chosen, return 0, else return 1. + * Consults the corresponding node if the addresses in rs are not valid. */ +int +fascist_firewall_choose_address_rs(const routerstatus_t *rs, + firewall_connection_t fw_connection, + int pref_only, tor_addr_port_t* ap) +{ + if (!rs) { + return 0; + } + + tor_assert(ap); + + /* Don't do the lookup if the IPv6 address/port in rs is OK. + * If it's OK, assume the dir_port is also OK. */ + tor_addr_port_t ipv6_or_ap; + IPV6_OR_LOOKUP(rs, rs->identity_digest, ipv6_or_ap); + + /* Assume IPv4 and IPv6 DirPorts are the same. + * Assume the IPv6 OR and Dir addresses are the same. */ + return fascist_firewall_choose_address_ipv4h(rs->addr, + rs->or_port, + rs->dir_port, + &ipv6_or_ap.addr, + ipv6_or_ap.port, + rs->dir_port, + fw_connection, + pref_only, + ap); +} + +/** Copy an address and port from <b>node</b> into <b>ap</b> that we think our + * firewall will let us connect to. Uses ipv4h_addr/ipv6_addr and + * ipv4_orport/ipv6_orport/ReachableORAddresses or + * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and + * <b>fw_connection</b>. + * If pref_only, only choose preferred addresses. In either case, choose + * a preferred address before an address that's not preferred. + * If neither address is chosen, return 0, else return 1. */ +int +fascist_firewall_choose_address_node(const node_t *node, + firewall_connection_t fw_connection, + int pref_only, tor_addr_port_t *ap) +{ + if (!node) { + return 0; + } + + node_assert_ok(node); + + tor_addr_port_t ipv4_or_ap; + node_get_prim_orport(node, &ipv4_or_ap); + tor_addr_port_t ipv4_dir_ap; + node_get_prim_dirport(node, &ipv4_dir_ap); + + tor_addr_port_t ipv6_or_ap; + node_get_pref_ipv6_orport(node, &ipv6_or_ap); + tor_addr_port_t ipv6_dir_ap; + node_get_pref_ipv6_dirport(node, &ipv6_dir_ap); + + /* Assume the IPv6 OR and Dir addresses are the same. */ + return fascist_firewall_choose_address_base(&ipv4_or_ap.addr, + ipv4_or_ap.port, + ipv4_dir_ap.port, + &ipv6_or_ap.addr, + ipv6_or_ap.port, + ipv6_dir_ap.port, + fw_connection, + pref_only, + ap); +} + +/** Copy an address and port from <b>ds</b> into <b>ap</b> that we think our + * firewall will let us connect to. Uses ipv4h_addr/ipv6_addr and + * ipv4_orport/ipv6_orport/ReachableORAddresses or + * ipv4_dirport/ipv6_dirport/ReachableDirAddresses based on IPv4/IPv6 and + * <b>fw_connection</b>. + * If pref_only, only choose preferred addresses. In either case, choose + * a preferred address before an address that's not preferred. + * If neither address is chosen, return 0, else return 1. */ +int +fascist_firewall_choose_address_dir_server(const dir_server_t *ds, + firewall_connection_t fw_connection, + int pref_only, tor_addr_port_t *ap) +{ + if (!ds) { + return 0; + } + + /* A dir_server_t always has a fake_status. As long as it has the same + * addresses/ports in both fake_status and dir_server_t, this works fine. + * (See #17867.) + * This function relies on fascist_firewall_choose_address_rs looking up the + * addresses from the node if it can, because that will get the latest info + * for the relay. */ + return fascist_firewall_choose_address_rs(&ds->fake_status, fw_connection, + pref_only, ap); } /** Return 1 if <b>addr</b> is permitted to connect to our dir port, diff --git a/src/or/policies.h b/src/or/policies.h index 007f494482..65f10e2ed7 100644 --- a/src/or/policies.h +++ b/src/or/policies.h @@ -22,13 +22,55 @@ #define EXIT_POLICY_REJECT_PRIVATE (1 << 1) #define EXIT_POLICY_ADD_DEFAULT (1 << 2) +typedef enum firewall_connection_t { + FIREWALL_OR_CONNECTION = 0, + FIREWALL_DIR_CONNECTION = 1 +} firewall_connection_t; + typedef int exit_policy_parser_cfg_t; int firewall_is_fascist_or(void); -int fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port); -int fascist_firewall_allows_or(const routerinfo_t *ri); -int fascist_firewall_allows_node(const node_t *node); -int fascist_firewall_allows_address_dir(const tor_addr_t *addr, uint16_t port); +int firewall_is_fascist_dir(void); +int fascist_firewall_use_ipv6(const or_options_t *options); +int fascist_firewall_prefer_ipv6_orport(const or_options_t *options); +int fascist_firewall_prefer_ipv6_dirport(const or_options_t *options); + +int fascist_firewall_allows_address_addr(const tor_addr_t *addr, uint16_t port, + firewall_connection_t fw_connection, + int pref_only); +int fascist_firewall_allows_address_ap(const tor_addr_port_t *ap, + firewall_connection_t fw_connection, + int pref_only); +int fascist_firewall_allows_address_ipv4h(uint32_t ipv4h_or_addr, + uint16_t ipv4_or_port, + firewall_connection_t fw_connection, + int pref_only); +int fascist_firewall_allows_rs(const routerstatus_t *rs, + firewall_connection_t fw_connection, + int pref_only); +int fascist_firewall_allows_node(const node_t *node, + firewall_connection_t fw_connection, + int pref_only); +int fascist_firewall_allows_dir_server(const dir_server_t *ds, + firewall_connection_t fw_connection, + int pref_only); + +const tor_addr_port_t * fascist_firewall_choose_address( + const tor_addr_port_t *a, + const tor_addr_port_t *b, + int want_a, + firewall_connection_t fw_connection, + int pref_only); +int fascist_firewall_choose_address_rs(const routerstatus_t *rs, + firewall_connection_t fw_connection, + int pref_only, tor_addr_port_t* ap); +int fascist_firewall_choose_address_node(const node_t *node, + firewall_connection_t fw_connection, + int pref_only, tor_addr_port_t* ap); +int fascist_firewall_choose_address_dir_server(const dir_server_t *ds, + firewall_connection_t fw_connection, + int pref_only, tor_addr_port_t* ap); + int dir_policy_permits_address(const tor_addr_t *addr); int socks_policy_permits_address(const tor_addr_t *addr); int authdir_policy_permits_address(uint32_t addr, uint16_t port); @@ -94,6 +136,10 @@ addr_policy_result_t compare_tor_addr_to_short_policy( #ifdef POLICIES_PRIVATE STATIC void append_exit_policy_string(smartlist_t **policy, const char *more); +STATIC int fascist_firewall_allows_address(const tor_addr_t *addr, + uint16_t port, + smartlist_t *firewall_policy, + int pref_only, int pref_ipv6); #endif #endif diff --git a/src/or/relay.c b/src/or/relay.c index aea51a165b..9d44428c09 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -148,20 +148,15 @@ relay_digest_matches(crypto_digest_t *digest, cell_t *cell) * * If <b>encrypt_mode</b> is 1 then encrypt, else decrypt. * - * Return -1 if the crypto fails, else return 0. + * Returns 0. */ static int relay_crypt_one_payload(crypto_cipher_t *cipher, uint8_t *in, int encrypt_mode) { - int r; (void)encrypt_mode; - r = crypto_cipher_crypt_inplace(cipher, (char*) in, CELL_PAYLOAD_SIZE); + crypto_cipher_crypt_inplace(cipher, (char*) in, CELL_PAYLOAD_SIZE); - if (r) { - log_warn(LD_BUG,"Error during relay encryption"); - return -1; - } return 0; } diff --git a/src/or/rendclient.c b/src/or/rendclient.c index e812a06ce6..b822295832 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -1367,11 +1367,19 @@ rend_client_get_random_intro_impl(const rend_cache_entry_t *entry, smartlist_del(usable_nodes, i); goto again; } +#ifdef ENABLE_TOR2WEB_MODE + new_extend_info = extend_info_from_node(node, options->Tor2webMode); +#else new_extend_info = extend_info_from_node(node, 0); +#endif if (!new_extend_info) { + const char *alternate_reason = ""; +#ifdef ENABLE_TOR2WEB_MODE + alternate_reason = ", or we cannot connect directly to it"; +#endif log_info(LD_REND, "We don't have a descriptor for the intro-point relay " - "'%s'; trying another.", - extend_info_describe(intro->extend_info)); + "'%s'%s; trying another.", + extend_info_describe(intro->extend_info), alternate_reason); smartlist_del(usable_nodes, i); goto again; } else { diff --git a/src/or/router.c b/src/or/router.c index 741e1edb22..3b03c09f2b 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -1293,14 +1293,15 @@ consider_testing_reachability(int test_or, int test_dir) extend_info_free(ei); } + /* XXX IPv6 self testing */ tor_addr_from_ipv4h(&addr, me->addr); if (test_dir && !check_whether_dirport_reachable() && !connection_get_by_type_addr_port_purpose( CONN_TYPE_DIR, &addr, me->dir_port, DIR_PURPOSE_FETCH_SERVERDESC)) { /* ask myself, via tor, for my server descriptor. */ - directory_initiate_command(&addr, - me->or_port, me->dir_port, + directory_initiate_command(&addr, me->or_port, + &addr, me->dir_port, me->cache_info.identity_digest, DIR_PURPOSE_FETCH_SERVERDESC, ROUTER_PURPOSE_GENERAL, @@ -1739,7 +1740,8 @@ router_upload_dir_desc_to_dirservers(int force) int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port) { - if (!router_get_my_routerinfo()) /* make sure desc_routerinfo exists */ + const routerinfo_t *me = router_get_my_routerinfo(); + if (!me) /* make sure routerinfo exists */ return -1; /* make sure it's resolved to something. this way we can't get a @@ -1747,20 +1749,21 @@ router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port) if (tor_addr_is_null(addr)) return -1; - /* look at desc_routerinfo->exit_policy for both the v4 and the v6 - * policies. The exit_policy field in desc_routerinfo is a bit unusual, - * in that it contains IPv6 and IPv6 entries. We don't want to look - * at desc_routerinfio->ipv6_exit_policy, since that's a port summary. */ + /* look at router_get_my_routerinfo()->exit_policy for both the v4 and the + * v6 policies. The exit_policy field in router_get_my_routerinfo() is a + * bit unusual, in that it contains IPv6 and IPv6 entries. We don't want to + * look at router_get_my_routerinfo()->ipv6_exit_policy, since that's a port + * summary. */ if ((tor_addr_family(addr) == AF_INET || tor_addr_family(addr) == AF_INET6)) { return compare_tor_addr_to_addr_policy(addr, port, - desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED; + me->exit_policy) != ADDR_POLICY_ACCEPTED; #if 0 } else if (tor_addr_family(addr) == AF_INET6) { return get_options()->IPv6Exit && desc_routerinfo->ipv6_exit_policy && compare_tor_addr_to_short_policy(addr, port, - desc_routerinfo->ipv6_exit_policy) != ADDR_POLICY_ACCEPTED; + me->ipv6_exit_policy) != ADDR_POLICY_ACCEPTED; #endif } else { return -1; @@ -1772,10 +1775,10 @@ router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port) MOCK_IMPL(int, router_my_exit_policy_is_reject_star,(void)) { - if (!router_get_my_routerinfo()) /* make sure desc_routerinfo exists */ + if (!router_get_my_routerinfo()) /* make sure routerinfo exists */ return -1; - return desc_routerinfo->policy_is_reject_star; + return router_get_my_routerinfo()->policy_is_reject_star; } /** Return true iff I'm a server and <b>digest</b> is equal to @@ -1834,12 +1837,13 @@ const char * router_get_my_descriptor(void) { const char *body; - if (!router_get_my_routerinfo()) + const routerinfo_t *me = router_get_my_routerinfo(); + if (! me) return NULL; - tor_assert(desc_routerinfo->cache_info.saved_location == SAVED_NOWHERE); - body = signed_descriptor_get_body(&desc_routerinfo->cache_info); + tor_assert(me->cache_info.saved_location == SAVED_NOWHERE); + body = signed_descriptor_get_body(&me->cache_info); /* Make sure this is nul-terminated. */ - tor_assert(!body[desc_routerinfo->cache_info.signed_descriptor_len]); + tor_assert(!body[me->cache_info.signed_descriptor_len]); log_debug(LD_GENERAL,"my desc is '%s'", body); return body; } @@ -2242,10 +2246,10 @@ check_descriptor_bandwidth_changed(time_t now) { static time_t last_changed = 0; uint64_t prev, cur; - if (!desc_routerinfo) + if (!router_get_my_routerinfo()) return; - prev = desc_routerinfo->bandwidthcapacity; + prev = router_get_my_routerinfo()->bandwidthcapacity; cur = we_are_hibernating() ? 0 : rep_hist_bandwidth_assess(); if ((prev != cur && (!prev || !cur)) || cur > prev*2 || @@ -2299,11 +2303,11 @@ check_descriptor_ipaddress_changed(time_t now) (void) now; - if (!desc_routerinfo) + if (router_get_my_routerinfo() == NULL) return; /* XXXX ipv6 */ - prev = desc_routerinfo->addr; + prev = router_get_my_routerinfo()->addr; if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname) < 0) { log_info(LD_CONFIG,"options->Address didn't resolve into an IP."); return; @@ -3410,28 +3414,16 @@ router_free_all(void) /** Return a smartlist of tor_addr_port_t's with all the OR ports of <b>ri</b>. Note that freeing of the items in the list as well as - the smartlist itself is the callers responsibility. - - XXX duplicating code from node_get_all_orports(). */ + the smartlist itself is the callers responsibility. */ smartlist_t * router_get_all_orports(const routerinfo_t *ri) { - smartlist_t *sl = smartlist_new(); tor_assert(ri); - - if (ri->addr != 0) { - tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); - tor_addr_from_ipv4h(&ap->addr, ri->addr); - ap->port = ri->or_port; - smartlist_add(sl, ap); - } - if (!tor_addr_is_null(&ri->ipv6_addr)) { - tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t)); - tor_addr_copy(&ap->addr, &ri->ipv6_addr); - ap->port = ri->or_port; - smartlist_add(sl, ap); - } - - return sl; + node_t fake_node; + memset(&fake_node, 0, sizeof(fake_node)); + /* we don't modify ri, fake_node is passed as a const node_t * + */ + fake_node.ri = (routerinfo_t *)ri; + return node_get_all_orports(&fake_node); } diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 139a2924fc..f6662705dc 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -13,6 +13,7 @@ #define ROUTERLIST_PRIVATE #include "or.h" +#include "backtrace.h" #include "crypto_ed25519.h" #include "circuitstats.h" #include "config.h" @@ -1460,9 +1461,190 @@ router_pick_dirserver_generic(smartlist_t *sourcelist, return router_pick_trusteddirserver_impl(sourcelist, type, flags, NULL); } +/* Check if we already have a directory fetch from ap, for serverdesc + * (including extrainfo) or microdesc documents. + * If so, return 1, if not, return 0. + * Also returns 0 if addr is NULL, tor_addr_is_null(addr), or dir_port is 0. + */ +STATIC int +router_is_already_dir_fetching(const tor_addr_port_t *ap, int serverdesc, + int microdesc) +{ + if (!ap || tor_addr_is_null(&ap->addr) || !ap->port) { + return 0; + } + + /* XX/teor - we're not checking tunnel connections here, see #17848 + */ + if (serverdesc && ( + connection_get_by_type_addr_port_purpose( + CONN_TYPE_DIR, &ap->addr, ap->port, DIR_PURPOSE_FETCH_SERVERDESC) + || connection_get_by_type_addr_port_purpose( + CONN_TYPE_DIR, &ap->addr, ap->port, DIR_PURPOSE_FETCH_EXTRAINFO))) { + return 1; + } + + if (microdesc && ( + connection_get_by_type_addr_port_purpose( + CONN_TYPE_DIR, &ap->addr, ap->port, DIR_PURPOSE_FETCH_MICRODESC))) { + return 1; + } + + return 0; +} + +/* Check if we already have a directory fetch from ds, for serverdesc + * (including extrainfo) or microdesc documents. + * If so, return 1, if not, return 0. + */ +static int +router_is_already_dir_fetching_ds(const dir_server_t *ds, + int serverdesc, + int microdesc) +{ + tor_addr_port_t ipv4_dir_ap, ipv6_dir_ap; + + /* Assume IPv6 DirPort is the same as IPv4 DirPort */ + tor_addr_from_ipv4h(&ipv4_dir_ap.addr, ds->addr); + ipv4_dir_ap.port = ds->dir_port; + tor_addr_copy(&ipv6_dir_ap.addr, &ds->ipv6_addr); + ipv6_dir_ap.port = ds->dir_port; + + return (router_is_already_dir_fetching(&ipv4_dir_ap, serverdesc, microdesc) + || router_is_already_dir_fetching(&ipv6_dir_ap, serverdesc, microdesc)); +} + +/* Check if we already have a directory fetch from rs, for serverdesc + * (including extrainfo) or microdesc documents. + * If so, return 1, if not, return 0. + */ +static int +router_is_already_dir_fetching_rs(const routerstatus_t *rs, + int serverdesc, + int microdesc) +{ + tor_addr_port_t ipv4_dir_ap, ipv6_dir_ap; + + /* Assume IPv6 DirPort is the same as IPv4 DirPort */ + tor_addr_from_ipv4h(&ipv4_dir_ap.addr, rs->addr); + ipv4_dir_ap.port = rs->dir_port; + tor_addr_copy(&ipv6_dir_ap.addr, &rs->ipv6_addr); + ipv6_dir_ap.port = rs->dir_port; + + return (router_is_already_dir_fetching(&ipv4_dir_ap, serverdesc, microdesc) + || router_is_already_dir_fetching(&ipv6_dir_ap, serverdesc, microdesc)); +} + +#ifndef LOG_FALSE_POSITIVES_DURING_BOOTSTRAP +#define LOG_FALSE_POSITIVES_DURING_BOOTSTRAP 0 +#endif + +/* Log a message if rs is not found or not a preferred address */ +static void +router_picked_poor_directory_log(const routerstatus_t *rs) +{ + const networkstatus_t *usable_consensus; + usable_consensus = networkstatus_get_reasonably_live_consensus(time(NULL), + usable_consensus_flavor()); + +#if !LOG_FALSE_POSITIVES_DURING_BOOTSTRAP + /* Don't log early in the bootstrap process, it's normal to pick from a + * small pool of nodes. Of course, this won't help if we're trying to + * diagnose bootstrap issues. */ + if (!smartlist_len(nodelist_get_list()) || !usable_consensus + || !router_have_minimum_dir_info()) { + return; + } +#endif + + /* We couldn't find a node, or the one we have doesn't fit our preferences. + * This might be a bug. */ + if (!rs) { + log_warn(LD_BUG, "Firewall denied all OR and Dir addresses for all relays " + "when searching for a directory."); + log_backtrace(LOG_WARN, LD_BUG, "Node search initiated by"); + } else if (!fascist_firewall_allows_rs(rs, FIREWALL_OR_CONNECTION, 1) + && !fascist_firewall_allows_rs(rs, FIREWALL_DIR_CONNECTION, 1) + ) { + log_warn(LD_BUG, "Selected a directory %s with non-preferred OR and Dir " + "addresses for launching a connection: " + "IPv4 %s OR %d Dir %d IPv6 %s OR %d Dir %d", + routerstatus_describe(rs), + fmt_addr32(rs->addr), rs->or_port, + rs->dir_port, fmt_addr(&rs->ipv6_addr), + rs->ipv6_orport, rs->dir_port); + log_backtrace(LOG_WARN, LD_BUG, "Node search initiated by"); + } +} + +#undef LOG_FALSE_POSITIVES_DURING_BOOTSTRAP + /** How long do we avoid using a directory server after it's given us a 503? */ #define DIR_503_TIMEOUT (60*60) +/* Common retry code for router_pick_directory_server_impl and + * router_pick_trusteddirserver_impl. Retry with the non-preferred IP version. + * Must be called before RETRY_WITHOUT_EXCLUDE(). + * + * If we got no result, and we are applying IP preferences, and we are a + * client that could use an alternate IP version, try again with the + * opposite preferences. */ +#define RETRY_ALTERNATE_IP_VERSION(retry_label) \ + STMT_BEGIN \ + if (result == NULL && try_ip_pref && options->ClientUseIPv4 \ + && fascist_firewall_use_ipv6(options) && !server_mode(options) \ + && n_not_preferred && !n_busy) { \ + n_excluded = 0; \ + n_busy = 0; \ + try_ip_pref = 0; \ + n_not_preferred = 0; \ + goto retry_label; \ + } \ + STMT_END \ + +/* Common retry code for router_pick_directory_server_impl and + * router_pick_trusteddirserver_impl. Retry without excluding nodes, but with + * the preferred IP version. Must be called after RETRY_ALTERNATE_IP_VERSION(). + * + * If we got no result, and we are excluding nodes, and StrictNodes is + * not set, try again without excluding nodes. */ +#define RETRY_WITHOUT_EXCLUDE(retry_label) \ + STMT_BEGIN \ + if (result == NULL && try_excluding && !options->StrictNodes \ + && n_excluded && !n_busy) { \ + try_excluding = 0; \ + n_excluded = 0; \ + n_busy = 0; \ + try_ip_pref = 1; \ + n_not_preferred = 0; \ + goto retry_label; \ + } \ + STMT_END + +/* When iterating through the routerlist, can OR address/port preference + * and reachability checks be skipped? + */ +static int +router_skip_or_reachability(const or_options_t *options, int try_ip_pref) +{ + /* Servers always have and prefer IPv4. + * And if clients are checking against the firewall for reachability only, + * but there's no firewall, don't bother checking */ + return server_mode(options) || (!try_ip_pref && !firewall_is_fascist_or()); +} + +/* When iterating through the routerlist, can Dir address/port preference + * and reachability checks be skipped? + */ +static int +router_skip_dir_reachability(const or_options_t *options, int try_ip_pref) +{ + /* Servers always have and prefer IPv4. + * And if clients are checking against the firewall for reachability only, + * but there's no firewall, don't bother checking */ + return server_mode(options) || (!try_ip_pref && !firewall_is_fascist_dir()); +} + /** Pick a random running valid directory server/mirror from our * routerlist. Arguments are as for router_pick_directory_server(), except: * @@ -1487,11 +1669,12 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags, const int no_microdesc_fetching = (flags & PDS_NO_EXISTING_MICRODESC_FETCH); const int for_guard = (flags & PDS_FOR_GUARD); int try_excluding = 1, n_excluded = 0, n_busy = 0; + int try_ip_pref = 1, n_not_preferred = 0; if (!consensus) return NULL; - retry_without_exclude: + retry_search: direct = smartlist_new(); tunnel = smartlist_new(); @@ -1500,11 +1683,13 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags, overloaded_direct = smartlist_new(); overloaded_tunnel = smartlist_new(); + const int skip_or = router_skip_or_reachability(options, try_ip_pref); + const int skip_dir = router_skip_dir_reachability(options, try_ip_pref); + /* Find all the running dirservers we know about. */ SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) { int is_trusted, is_trusted_extrainfo; int is_overloaded; - tor_addr_t addr; const routerstatus_t *status = node->rs; const country_t country = node->country; if (!status) @@ -1535,36 +1720,34 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags, continue; } - /* XXXX IP6 proposal 118 */ - tor_addr_from_ipv4h(&addr, status->addr); - - if (no_serverdesc_fetching && ( - connection_get_by_type_addr_port_purpose( - CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_SERVERDESC) - || connection_get_by_type_addr_port_purpose( - CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_EXTRAINFO) - )) { - ++n_busy; - continue; - } - - if (no_microdesc_fetching && connection_get_by_type_addr_port_purpose( - CONN_TYPE_DIR, &addr, status->dir_port, DIR_PURPOSE_FETCH_MICRODESC) - ) { + if (router_is_already_dir_fetching_rs(status, + no_serverdesc_fetching, + no_microdesc_fetching)) { ++n_busy; continue; } is_overloaded = status->last_dir_503_at + DIR_503_TIMEOUT > now; - if ((!fascistfirewall || - fascist_firewall_allows_address_or(&addr, status->or_port))) + /* Clients use IPv6 addresses if the server has one and the client + * prefers IPv6. + * Add the router if its preferred address and port are reachable. + * If we don't get any routers, we'll try again with the non-preferred + * address for each router (if any). (To ensure correct load-balancing + * we try routers that only have one address both times.) + */ + if (!fascistfirewall || skip_or || + fascist_firewall_allows_rs(status, FIREWALL_OR_CONNECTION, + try_ip_pref)) smartlist_add(is_trusted ? trusted_tunnel : is_overloaded ? overloaded_tunnel : tunnel, (void*)node); - else if (!fascistfirewall || - fascist_firewall_allows_address_dir(&addr, status->dir_port)) + else if (skip_dir || + fascist_firewall_allows_rs(status, FIREWALL_DIR_CONNECTION, + try_ip_pref)) smartlist_add(is_trusted ? trusted_direct : is_overloaded ? overloaded_direct : direct, (void*)node); + else if (!tor_addr_is_null(&status->ipv6_addr)) + ++n_not_preferred; } SMARTLIST_FOREACH_END(node); if (smartlist_len(tunnel)) { @@ -1593,19 +1776,15 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags, smartlist_free(overloaded_direct); smartlist_free(overloaded_tunnel); - if (result == NULL && try_excluding && !options->StrictNodes && n_excluded - && !n_busy) { - /* If we got no result, and we are excluding nodes, and StrictNodes is - * not set, try again without excluding nodes. */ - try_excluding = 0; - n_excluded = 0; - n_busy = 0; - goto retry_without_exclude; - } + RETRY_ALTERNATE_IP_VERSION(retry_search); + + RETRY_WITHOUT_EXCLUDE(retry_search); if (n_busy_out) *n_busy_out = n_busy; + router_picked_poor_directory_log(result ? result->rs : NULL); + return result ? result->rs : NULL; } @@ -1656,22 +1835,25 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist, smartlist_t *pick_from; int n_busy = 0; int try_excluding = 1, n_excluded = 0; + int try_ip_pref = 1, n_not_preferred = 0; if (!sourcelist) return NULL; - retry_without_exclude: + retry_search: direct = smartlist_new(); tunnel = smartlist_new(); overloaded_direct = smartlist_new(); overloaded_tunnel = smartlist_new(); + const int skip_or = router_skip_or_reachability(options, try_ip_pref); + const int skip_dir = router_skip_dir_reachability(options, try_ip_pref); + SMARTLIST_FOREACH_BEGIN(sourcelist, const dir_server_t *, d) { int is_overloaded = d->fake_status.last_dir_503_at + DIR_503_TIMEOUT > now; - tor_addr_t addr; if (!d->is_running) continue; if ((type & d->type) == 0) continue; @@ -1687,35 +1869,29 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist, continue; } - /* XXXX IP6 proposal 118 */ - tor_addr_from_ipv4h(&addr, d->addr); - - if (no_serverdesc_fetching) { - if (connection_get_by_type_addr_port_purpose( - CONN_TYPE_DIR, &addr, d->dir_port, DIR_PURPOSE_FETCH_SERVERDESC) - || connection_get_by_type_addr_port_purpose( - CONN_TYPE_DIR, &addr, d->dir_port, DIR_PURPOSE_FETCH_EXTRAINFO)) { - //log_debug(LD_DIR, "We have an existing connection to fetch " - // "descriptor from %s; delaying",d->description); - ++n_busy; - continue; - } - } - if (no_microdesc_fetching) { - if (connection_get_by_type_addr_port_purpose( - CONN_TYPE_DIR, &addr, d->dir_port, DIR_PURPOSE_FETCH_MICRODESC)) { - ++n_busy; - continue; - } + if (router_is_already_dir_fetching_ds(d, no_serverdesc_fetching, + no_microdesc_fetching)) { + ++n_busy; + continue; } - if (d->or_port && - (!fascistfirewall || - fascist_firewall_allows_address_or(&addr, d->or_port))) + /* Clients use IPv6 addresses if the server has one and the client + * prefers IPv6. + * Add the router if its preferred address and port are reachable. + * If we don't get any routers, we'll try again with the non-preferred + * address for each router (if any). (To ensure correct load-balancing + * we try routers that only have one address both times.) + */ + if (!fascistfirewall || skip_or || + fascist_firewall_allows_dir_server(d, FIREWALL_OR_CONNECTION, + try_ip_pref)) smartlist_add(is_overloaded ? overloaded_tunnel : tunnel, (void*)d); - else if (!fascistfirewall || - fascist_firewall_allows_address_dir(&addr, d->dir_port)) + else if (skip_dir || + fascist_firewall_allows_dir_server(d, FIREWALL_DIR_CONNECTION, + try_ip_pref)) smartlist_add(is_overloaded ? overloaded_direct : direct, (void*)d); + else if (!tor_addr_is_null(&d->ipv6_addr)) + ++n_not_preferred; } SMARTLIST_FOREACH_END(d); @@ -1742,19 +1918,14 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist, smartlist_free(overloaded_direct); smartlist_free(overloaded_tunnel); - if (result == NULL && try_excluding && !options->StrictNodes && n_excluded - && !n_busy) { - /* If we got no result, and we are excluding nodes, and StrictNodes is - * not set, try again without excluding nodes. */ - try_excluding = 0; - n_excluded = 0; - n_busy = 0; - goto retry_without_exclude; - } + RETRY_ALTERNATE_IP_VERSION(retry_search); + + RETRY_WITHOUT_EXCLUDE(retry_search); + + router_picked_poor_directory_log(result); if (n_busy_out) *n_busy_out = n_busy; - return result; } @@ -1824,8 +1995,12 @@ routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router) void router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid, int need_uptime, int need_capacity, - int need_guard, int need_desc) -{ /* XXXX MOVE */ + int need_guard, int need_desc, + int pref_addr) +{ + const int check_reach = !router_skip_or_reachability(get_options(), + pref_addr); + /* XXXX MOVE */ SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) { if (!node->is_running || (!node->is_valid && !allow_invalid)) @@ -1836,6 +2011,11 @@ router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid, continue; if (node_is_unreliable(node, need_uptime, need_capacity, need_guard)) continue; + /* Choose a node with an OR address that matches the firewall rules */ + if (check_reach && !fascist_firewall_allows_node(node, + FIREWALL_OR_CONNECTION, + pref_addr)) + continue; smartlist_add(sl, (void *)node); } SMARTLIST_FOREACH_END(node); @@ -2297,6 +2477,10 @@ node_sl_choose_by_bandwidth(const smartlist_t *sl, * If <b>CRN_NEED_DESC</b> is set in flags, we only consider nodes that * have a routerinfo or microdescriptor -- that is, enough info to be * used to build a circuit. + * If <b>CRN_PREF_ADDR</b> is set in flags, we only consider nodes that + * have an address that is preferred by the ClientPreferIPv6ORPort setting + * (regardless of this flag, we exclude nodes that aren't allowed by the + * firewall, including ClientUseIPv4 0 and fascist_firewall_use_ipv6() == 0). */ const node_t * router_choose_random_node(smartlist_t *excludedsmartlist, @@ -2309,6 +2493,7 @@ router_choose_random_node(smartlist_t *excludedsmartlist, const int allow_invalid = (flags & CRN_ALLOW_INVALID) != 0; const int weight_for_exit = (flags & CRN_WEIGHT_AS_EXIT) != 0; const int need_desc = (flags & CRN_NEED_DESC) != 0; + const int pref_addr = (flags & CRN_PREF_ADDR) != 0; smartlist_t *sl=smartlist_new(), *excludednodes=smartlist_new(); @@ -2334,7 +2519,7 @@ router_choose_random_node(smartlist_t *excludedsmartlist, router_add_running_nodes_to_smartlist(sl, allow_invalid, need_uptime, need_capacity, - need_guard, need_desc); + need_guard, need_desc, pref_addr); log_debug(LD_CIRC, "We found %d running nodes.", smartlist_len(sl)); @@ -2363,7 +2548,7 @@ router_choose_random_node(smartlist_t *excludedsmartlist, choice = node_sl_choose_by_bandwidth(sl, rule); smartlist_free(sl); - if (!choice && (need_uptime || need_capacity || need_guard)) { + if (!choice && (need_uptime || need_capacity || need_guard || pref_addr)) { /* try once more -- recurse but with fewer restrictions. */ log_info(LD_CIRC, "We couldn't find any live%s%s%s routers; falling back " @@ -2371,7 +2556,8 @@ router_choose_random_node(smartlist_t *excludedsmartlist, need_capacity?", fast":"", need_uptime?", stable":"", need_guard?", guard":""); - flags &= ~ (CRN_NEED_UPTIME|CRN_NEED_CAPACITY|CRN_NEED_GUARD); + flags &= ~ (CRN_NEED_UPTIME|CRN_NEED_CAPACITY|CRN_NEED_GUARD| + CRN_PREF_ADDR); choice = router_choose_random_node( excludedsmartlist, excludedset, flags); } diff --git a/src/or/routerlist.h b/src/or/routerlist.h index dd88aeb179..483dd06039 100644 --- a/src/or/routerlist.h +++ b/src/or/routerlist.h @@ -61,7 +61,8 @@ void router_reset_status_download_failures(void); int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2); void router_add_running_nodes_to_smartlist(smartlist_t *sl, int allow_invalid, int need_uptime, int need_capacity, - int need_guard, int need_desc); + int need_guard, int need_desc, + int pref_addr); const routerinfo_t *routerlist_find_my_routerinfo(void); uint32_t router_get_advertised_bandwidth(const routerinfo_t *router); @@ -245,6 +246,8 @@ MOCK_DECL(STATIC was_router_added_t, extrainfo_insert, MOCK_DECL(STATIC void, initiate_descriptor_downloads, (const routerstatus_t *source, int purpose, smartlist_t *digests, int lo, int hi, int pds_flags)); +STATIC int router_is_already_dir_fetching(const tor_addr_port_t *ap, + int serverdesc, int microdesc); #endif diff --git a/src/test/log_test_helpers.h b/src/test/log_test_helpers.h index 298237dddb..02f31a5220 100644 --- a/src/test/log_test_helpers.h +++ b/src/test/log_test_helpers.h @@ -23,6 +23,7 @@ void mock_clean_saved_logs(void); const smartlist_t *mock_saved_logs(void); int setup_capture_of_logs(int new_level); void teardown_capture_of_logs(int prev); + int mock_saved_log_has_message(const char *msg); int mock_saved_log_has_severity(int severity); int mock_saved_log_has_entry(void); diff --git a/src/test/test.c b/src/test/test.c index f12ae21ff0..d671ac896e 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -319,11 +319,7 @@ test_circuit_timeout(void *arg) int i, runs; double close_ms; (void)arg; - tor_libevent_cfg cfg; - memset(&cfg, 0, sizeof(cfg)); - - tor_libevent_initialize(&cfg); initialize_periodic_events(); circuit_build_times_init(&initial); diff --git a/src/test/test_circuitmux.c b/src/test/test_circuitmux.c index 6d93731eea..5c72fc656d 100644 --- a/src/test/test_circuitmux.c +++ b/src/test/test_circuitmux.c @@ -36,11 +36,7 @@ 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(); (void) arg; diff --git a/src/test/test_dir.c b/src/test/test_dir.c index 4824a94132..83a8b8ccc6 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -3312,7 +3312,6 @@ test_dir_download_status_schedule(void *arg) tt_assert(increment == expected_increment); tt_assert(dls_failure.next_attempt_at == TIME_MIN + expected_increment); -#if TIME_T_IS_SIGNED delay1 = INT_MAX; increment = download_status_schedule_get_delay(&dls_failure, schedule, @@ -3320,7 +3319,6 @@ test_dir_download_status_schedule(void *arg) expected_increment = delay1; tt_assert(increment == expected_increment); tt_assert(dls_failure.next_attempt_at == TIME_MAX); -#endif delay1 = 0; increment = download_status_schedule_get_delay(&dls_attempt, diff --git a/src/test/test_dns.c b/src/test/test_dns.c index 6fdbe905e0..5289ca58ff 100644 --- a/src/test/test_dns.c +++ b/src/test/test_dns.c @@ -490,7 +490,7 @@ NS(test_main)(void *arg) (void)arg; - TO_CONN(exitconn)->address = tor_strdup("127.0.0.1.in-addr.arpa"); + TO_CONN(exitconn)->address = tor_strdup("1.0.0.127.in-addr.arpa"); NS_MOCK(router_my_exit_policy_is_reject_star); diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c index 0011d3698a..fd19db095d 100644 --- a/src/test/test_entrynodes.c +++ b/src/test/test_entrynodes.c @@ -9,14 +9,16 @@ #include "or.h" #include "test.h" + +#include "config.h" #include "entrynodes.h" -#include "routerparse.h" #include "nodelist.h" -#include "util.h" +#include "policies.h" #include "routerlist.h" +#include "routerparse.h" #include "routerset.h" #include "statefile.h" -#include "config.h" +#include "util.h" #include "test_helpers.h" @@ -70,6 +72,14 @@ fake_network_setup(const struct testcase_t *testcase) return dummy_state; } +static or_options_t mocked_options; + +static const or_options_t * +mock_get_options(void) +{ + return &mocked_options; +} + /** Test choose_random_entry() with none of our routers being guard nodes. */ static void test_choose_random_entry_no_guards(void *arg) @@ -78,6 +88,14 @@ test_choose_random_entry_no_guards(void *arg) (void) arg; + MOCK(get_options, mock_get_options); + + /* Check that we get a guard if it passes preferred + * address settings */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientPreferIPv6ORPort = 0; + /* Try to pick an entry even though none of our routers are guards. */ chosen_entry = choose_random_entry(NULL); @@ -86,8 +104,55 @@ test_choose_random_entry_no_guards(void *arg) can't find a proper entry guard. */ tt_assert(chosen_entry); + /* And with the other IP version active */ + mocked_options.ClientUseIPv6 = 1; + chosen_entry = choose_random_entry(NULL); + tt_assert(chosen_entry); + + /* And with the preference on auto */ + mocked_options.ClientPreferIPv6ORPort = -1; + chosen_entry = choose_random_entry(NULL); + tt_assert(chosen_entry); + + /* Check that we don't get a guard if it doesn't pass mandatory address + * settings */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 0; + mocked_options.ClientPreferIPv6ORPort = 0; + + chosen_entry = choose_random_entry(NULL); + + /* If we don't allow IPv4 at all, we don't get a guard*/ + tt_assert(!chosen_entry); + + /* Check that we get a guard if it passes allowed but not preferred address + * settings */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientUseIPv6 = 1; + mocked_options.ClientPreferIPv6ORPort = 1; + + chosen_entry = choose_random_entry(NULL); + tt_assert(chosen_entry); + + /* Check that we get a guard if it passes preferred address settings when + * they're auto */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientPreferIPv6ORPort = -1; + + chosen_entry = choose_random_entry(NULL); + tt_assert(chosen_entry); + + /* And with IPv6 active */ + mocked_options.ClientUseIPv6 = 1; + + chosen_entry = choose_random_entry(NULL); + tt_assert(chosen_entry); + done: - ; + memset(&mocked_options, 0, sizeof(mocked_options)); + UNMOCK(get_options); } /** Test choose_random_entry() with only one of our routers being a @@ -101,17 +166,78 @@ test_choose_random_entry_one_possible_guard(void *arg) (void) arg; + MOCK(get_options, mock_get_options); + /* Set one of the nodes to be a guard. */ our_nodelist = nodelist_get_list(); the_guard = smartlist_get(our_nodelist, 4); /* chosen by fair dice roll */ the_guard->is_possible_guard = 1; + /* Check that we get the guard if it passes preferred + * address settings */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientPreferIPv6ORPort = 0; + /* Pick an entry. Make sure we pick the node we marked as guard. */ chosen_entry = choose_random_entry(NULL); tt_ptr_op(chosen_entry, OP_EQ, the_guard); + /* And with the other IP version active */ + mocked_options.ClientUseIPv6 = 1; + chosen_entry = choose_random_entry(NULL); + tt_ptr_op(chosen_entry, OP_EQ, the_guard); + + /* And with the preference on auto */ + mocked_options.ClientPreferIPv6ORPort = -1; + chosen_entry = choose_random_entry(NULL); + tt_ptr_op(chosen_entry, OP_EQ, the_guard); + + /* Check that we don't get a guard if it doesn't pass mandatory address + * settings */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 0; + mocked_options.ClientPreferIPv6ORPort = 0; + + chosen_entry = choose_random_entry(NULL); + + /* If we don't allow IPv4 at all, we don't get a guard*/ + tt_assert(!chosen_entry); + + /* Check that we get a node if it passes allowed but not preferred + * address settings */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientUseIPv6 = 1; + mocked_options.ClientPreferIPv6ORPort = 1; + + chosen_entry = choose_random_entry(NULL); + + /* We disable the guard check and the preferred address check at the same + * time, so we can't be sure we get the guard */ + tt_assert(chosen_entry); + + /* Check that we get a node if it is allowed but not preferred when settings + * are auto */ + memset(&mocked_options, 0, sizeof(mocked_options)); + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientPreferIPv6ORPort = -1; + + chosen_entry = choose_random_entry(NULL); + + /* We disable the guard check and the preferred address check at the same + * time, so we can't be sure we get the guard */ + tt_assert(chosen_entry); + + /* and with IPv6 active */ + mocked_options.ClientUseIPv6 = 1; + + chosen_entry = choose_random_entry(NULL); + tt_assert(chosen_entry); + done: - ; + memset(&mocked_options, 0, sizeof(mocked_options)); + UNMOCK(get_options); } /** Helper to conduct tests for populate_live_entry_guards(). @@ -624,6 +750,93 @@ test_entry_is_live(void *arg) ; /* XXX */ } +#define TEST_IPV4_ADDR "123.45.67.89" +#define TEST_IPV6_ADDR "[1234:5678:90ab:cdef::]" + +static void +test_node_preferred_orport(void *arg) +{ + (void)arg; + tor_addr_t ipv4_addr; + const uint16_t ipv4_port = 4444; + tor_addr_t ipv6_addr; + const uint16_t ipv6_port = 6666; + routerinfo_t node_ri; + node_t node; + tor_addr_port_t ap; + + /* Setup options */ + memset(&mocked_options, 0, sizeof(mocked_options)); + /* We don't test ClientPreferIPv6ORPort here, because it's used in + * nodelist_set_consensus to setup node.ipv6_preferred, which we set + * directly. */ + MOCK(get_options, mock_get_options); + + /* Setup IP addresses */ + tor_addr_parse(&ipv4_addr, TEST_IPV4_ADDR); + tor_addr_parse(&ipv6_addr, TEST_IPV6_ADDR); + + /* Setup node_ri */ + memset(&node_ri, 0, sizeof(node_ri)); + node_ri.addr = tor_addr_to_ipv4h(&ipv4_addr); + node_ri.or_port = ipv4_port; + tor_addr_copy(&node_ri.ipv6_addr, &ipv6_addr); + node_ri.ipv6_orport = ipv6_port; + + /* Setup node */ + memset(&node, 0, sizeof(node)); + node.ri = &node_ri; + + /* Check the preferred address is IPv4 if we're only using IPv4, regardless + * of whether we prefer it or not */ + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientUseIPv6 = 0; + node.ipv6_preferred = 0; + node_get_pref_orport(&node, &ap); + tt_assert(tor_addr_eq(&ap.addr, &ipv4_addr)); + tt_assert(ap.port == ipv4_port); + + node.ipv6_preferred = 1; + node_get_pref_orport(&node, &ap); + tt_assert(tor_addr_eq(&ap.addr, &ipv4_addr)); + tt_assert(ap.port == ipv4_port); + + /* Check the preferred address is IPv4 if we're using IPv4 and IPv6, but + * don't prefer the IPv6 address */ + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientUseIPv6 = 1; + node.ipv6_preferred = 0; + node_get_pref_orport(&node, &ap); + tt_assert(tor_addr_eq(&ap.addr, &ipv4_addr)); + tt_assert(ap.port == ipv4_port); + + /* Check the preferred address is IPv6 if we prefer it and + * ClientUseIPv6 is 1, regardless of ClientUseIPv4 */ + mocked_options.ClientUseIPv4 = 1; + mocked_options.ClientUseIPv6 = 1; + node.ipv6_preferred = 1; + node_get_pref_orport(&node, &ap); + tt_assert(tor_addr_eq(&ap.addr, &ipv6_addr)); + tt_assert(ap.port == ipv6_port); + + mocked_options.ClientUseIPv4 = 0; + node_get_pref_orport(&node, &ap); + tt_assert(tor_addr_eq(&ap.addr, &ipv6_addr)); + tt_assert(ap.port == ipv6_port); + + /* Check the preferred address is IPv6 if we don't prefer it, but + * ClientUseIPv4 is 0 */ + mocked_options.ClientUseIPv4 = 0; + mocked_options.ClientUseIPv6 = 1; + node.ipv6_preferred = fascist_firewall_prefer_ipv6_orport(&mocked_options); + node_get_pref_orport(&node, &ap); + tt_assert(tor_addr_eq(&ap.addr, &ipv6_addr)); + tt_assert(ap.port == ipv6_port); + + done: + UNMOCK(get_options); +} + static const struct testcase_setup_t fake_network = { fake_network_setup, fake_network_cleanup }; @@ -654,6 +867,9 @@ struct testcase_t entrynodes_tests[] = { { "entry_is_live", test_entry_is_live, TT_FORK, &fake_network, NULL }, + { "node_preferred_orport", + test_node_preferred_orport, + 0, NULL, NULL }, END_OF_TESTCASES }; diff --git a/src/test/test_options.c b/src/test/test_options.c index dcf97f897f..10ee1f962b 100644 --- a/src/test/test_options.c +++ b/src/test/test_options.c @@ -327,6 +327,7 @@ fixed_get_uname(void) "V3AuthVoteDelay 20\n" \ "V3AuthDistDelay 20\n" \ "V3AuthNIntervalsValid 3\n" \ + "ClientUseIPv4 1\n" \ "VirtualAddrNetworkIPv4 127.192.0.0/10\n" \ "VirtualAddrNetworkIPv6 [FE80::]/10\n" \ "SchedulerHighWaterMark__ 42\n" \ @@ -392,6 +393,14 @@ free_options_test_data(options_test_data_t *td) tor_free(td); } +#define expect_log_msg(str) \ + tt_assert_msg(mock_saved_log_has_message(str), \ + "expected log to contain " # str); + +#define expect_no_log_msg(str) \ + tt_assert_msg(!mock_saved_log_has_message(str), \ + "expected log to not contain " # str); + static void test_options_validate__uname_for_server(void *ignored) { @@ -1715,6 +1724,10 @@ test_options_validate__reachable_addresses(void *ignored) tt_str_op(tdata->opt->ReachableAddresses->value, OP_EQ, "*:82"); tor_free(msg); +#define SERVERS_REACHABLE_MSG "Servers must be able to freely connect to" \ + " the rest of the Internet, so they must not set Reachable*Addresses or" \ + " FascistFirewall or FirewallPorts or ClientUseIPv4 0." + free_options_test_data(tdata); tdata = get_options_test_data("ReachableAddresses *:82\n" "ORListenAddress 127.0.0.1:5555\n" @@ -1726,9 +1739,7 @@ test_options_validate__reachable_addresses(void *ignored) ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); tt_int_op(ret, OP_EQ, -1); - tt_str_op(msg, OP_EQ, "Servers must be able to freely connect to the rest of" - " the Internet, so they must not set Reachable*Addresses or" - " FascistFirewall."); + tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG); tor_free(msg); free_options_test_data(tdata); @@ -1742,9 +1753,7 @@ test_options_validate__reachable_addresses(void *ignored) ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); tt_int_op(ret, OP_EQ, -1); - tt_str_op(msg, OP_EQ, "Servers must be able to freely connect to the rest of" - " the Internet, so they must not set Reachable*Addresses or" - " FascistFirewall."); + tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG); tor_free(msg); free_options_test_data(tdata); @@ -1758,11 +1767,107 @@ test_options_validate__reachable_addresses(void *ignored) ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); tt_int_op(ret, OP_EQ, -1); - tt_str_op(msg, OP_EQ, "Servers must be able to freely connect to the rest of" - " the Internet, so they must not set Reachable*Addresses or" - " FascistFirewall."); + tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG); + tor_free(msg); + + free_options_test_data(tdata); + tdata = get_options_test_data("ClientUseIPv4 0\n" + "ORListenAddress 127.0.0.1:5555\n" + "ORPort 955\n" + "MaxClientCircuitsPending 1\n" + "ConnLimit 1\n" + "SchedulerHighWaterMark__ 42\n" + "SchedulerLowWaterMark__ 10\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, -1); + tt_str_op(msg, OP_EQ, SERVERS_REACHABLE_MSG); + tor_free(msg); + + /* Test IPv4-only clients setting IPv6 preferences */ + +#define WARN_PLEASE_USE_IPV6_OR_LOG_MSG \ + "ClientPreferIPv6ORPort 1 is ignored unless tor is using IPv6. " \ + "Please set ClientUseIPv6 1, ClientUseIPv4 0, or configure bridges.\n" + +#define WARN_PLEASE_USE_IPV6_DIR_LOG_MSG \ + "ClientPreferIPv6DirPort 1 is ignored unless tor is using IPv6. " \ + "Please set ClientUseIPv6 1, ClientUseIPv4 0, or configure bridges.\n" + + free_options_test_data(tdata); + tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES + "ClientUseIPv4 1\n" + "ClientUseIPv6 0\n" + "UseBridges 0\n" + "ClientPreferIPv6ORPort 1\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, 0); + expect_log_msg(WARN_PLEASE_USE_IPV6_OR_LOG_MSG); + tor_free(msg); + + free_options_test_data(tdata); + tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES + "ClientUseIPv4 1\n" + "ClientUseIPv6 0\n" + "UseBridges 0\n" + "ClientPreferIPv6DirPort 1\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, 0); + expect_log_msg(WARN_PLEASE_USE_IPV6_DIR_LOG_MSG); tor_free(msg); + /* Now test an IPv4/IPv6 client setting IPv6 preferences */ + + free_options_test_data(tdata); + tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES + "ClientUseIPv4 1\n" + "ClientUseIPv6 1\n" + "ClientPreferIPv6ORPort 1\n" + "ClientPreferIPv6DirPort 1\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, 0); + tt_ptr_op(msg, OP_EQ, NULL); + + /* Now test an IPv6 client setting IPv6 preferences */ + + free_options_test_data(tdata); + tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES + "ClientUseIPv6 1\n" + "ClientPreferIPv6ORPort 1\n" + "ClientPreferIPv6DirPort 1\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, 0); + tt_ptr_op(msg, OP_EQ, NULL); + + /* And an implicit (IPv4 disabled) IPv6 client setting IPv6 preferences */ + + free_options_test_data(tdata); + tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES + "ClientUseIPv4 0\n" + "ClientPreferIPv6ORPort 1\n" + "ClientPreferIPv6DirPort 1\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, 0); + tt_ptr_op(msg, OP_EQ, NULL); + + /* And an implicit (bridge) client setting IPv6 preferences */ + + free_options_test_data(tdata); + tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES + "UseBridges 1\n" + "Bridge 127.0.0.1:12345\n" + "ClientPreferIPv6ORPort 1\n" + "ClientPreferIPv6DirPort 1\n"); + + ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg); + tt_int_op(ret, OP_EQ, 0); + tt_ptr_op(msg, OP_EQ, NULL); + done: teardown_capture_of_logs(previous_log); free_options_test_data(tdata); @@ -1777,6 +1882,7 @@ test_options_validate__use_bridges(void *ignored) char *msg; options_test_data_t *tdata = get_options_test_data( "UseBridges 1\n" + "ClientUseIPv4 1\n" "ORListenAddress 127.0.0.1:5555\n" "ORPort 955\n" "MaxClientCircuitsPending 1\n" diff --git a/src/test/test_policy.c b/src/test/test_policy.c index 794978fc42..3688909acb 100644 --- a/src/test/test_policy.c +++ b/src/test/test_policy.c @@ -1129,6 +1129,537 @@ test_policies_getinfo_helper_policies(void *arg) #undef TEST_IPV4_ADDR #undef TEST_IPV6_ADDR +#define TEST_IPV4_ADDR_STR "1.2.3.4" +#define TEST_IPV6_ADDR_STR "[1002::4567]" +#define REJECT_IPv4_FINAL_STR "reject 0.0.0.0/0:*" +#define REJECT_IPv6_FINAL_STR "reject [::]/0:*" + +#define OTHER_IPV4_ADDR_STR "6.7.8.9" +#define OTHER_IPV6_ADDR_STR "[afff::]" + +/** Run unit tests for fascist_firewall_allows_address */ +static void +test_policies_fascist_firewall_allows_address(void *arg) +{ + (void)arg; + tor_addr_t ipv4_addr, ipv6_addr, r_ipv4_addr, r_ipv6_addr; + tor_addr_t n_ipv4_addr, n_ipv6_addr; + const uint16_t port = 1234; + smartlist_t *policy = NULL; + smartlist_t *e_policy = NULL; + addr_policy_t *item = NULL; + int malformed_list = 0; + + /* Setup the options and the items in the policies */ + memset(&mock_options, 0, sizeof(or_options_t)); + MOCK(get_options, mock_get_options); + + policy = smartlist_new(); + item = router_parse_addr_policy_item_from_string("accept " + TEST_IPV4_ADDR_STR ":*", + ADDR_POLICY_ACCEPT, + &malformed_list); + tt_assert(item); + tt_assert(!malformed_list); + smartlist_add(policy, item); + item = router_parse_addr_policy_item_from_string("accept " + TEST_IPV6_ADDR_STR, + ADDR_POLICY_ACCEPT, + &malformed_list); + tt_assert(item); + tt_assert(!malformed_list); + smartlist_add(policy, item); + /* Normally, policy_expand_unspec would do this for us */ + item = router_parse_addr_policy_item_from_string(REJECT_IPv4_FINAL_STR, + ADDR_POLICY_ACCEPT, + &malformed_list); + tt_assert(item); + tt_assert(!malformed_list); + smartlist_add(policy, item); + item = router_parse_addr_policy_item_from_string(REJECT_IPv6_FINAL_STR, + ADDR_POLICY_ACCEPT, + &malformed_list); + tt_assert(item); + tt_assert(!malformed_list); + smartlist_add(policy, item); + item = NULL; + + e_policy = smartlist_new(); + + /* + char *polstr = policy_dump_to_string(policy, 1, 1); + printf("%s\n", polstr); + tor_free(polstr); + */ + + /* Parse the addresses */ + tor_addr_parse(&ipv4_addr, TEST_IPV4_ADDR_STR); + tor_addr_parse(&ipv6_addr, TEST_IPV6_ADDR_STR); + tor_addr_parse(&r_ipv4_addr, OTHER_IPV4_ADDR_STR); + tor_addr_parse(&r_ipv6_addr, OTHER_IPV6_ADDR_STR); + tor_addr_make_null(&n_ipv4_addr, AF_INET); + tor_addr_make_null(&n_ipv6_addr, AF_INET6); + + /* Test the function's address matching with IPv4 and IPv6 on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0) + == 0); + + /* Preferring IPv4 */ + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 0) + == 0); + + /* Preferring IPv6 */ + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 1) + == 0); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 1) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 1) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 1) + == 0); + + /* Test the function's address matching with UseBridges on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 1; + + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0) + == 0); + + /* Preferring IPv4 */ + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 0) + == 0); + + /* Preferring IPv6 */ + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 1, 1) + == 0); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 1, 1) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 1, 1) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 1, 1) + == 0); + + /* bridge clients always use IPv6, regardless of ClientUseIPv6 */ + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 0; + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0) + == 0); + + /* Test the function's address matching with IPv4 on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 0; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0) + == 0); + + /* Test the function's address matching with IPv6 on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 0; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0) + == 0); + + /* Test the function's address matching with ClientUseIPv4 0. + * This means "use IPv6" regardless of the other settings. */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 0; + mock_options.ClientUseIPv6 = 0; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&r_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&r_ipv6_addr, port, policy, 0, 0) + == 0); + + /* Test the function's address matching for unusual inputs */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 1; + + /* NULL and tor_addr_is_null addresses are rejected */ + tt_assert(fascist_firewall_allows_address(NULL, port, policy, 0, 0) == 0); + tt_assert(fascist_firewall_allows_address(&n_ipv4_addr, port, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&n_ipv6_addr, port, policy, 0, 0) + == 0); + + /* zero ports are rejected */ + tt_assert(fascist_firewall_allows_address(&ipv4_addr, 0, policy, 0, 0) + == 0); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, 0, policy, 0, 0) + == 0); + + /* NULL and empty policies accept everything */ + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, NULL, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, NULL, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv4_addr, port, e_policy, 0, 0) + == 1); + tt_assert(fascist_firewall_allows_address(&ipv6_addr, port, e_policy, 0, 0) + == 1); + + done: + addr_policy_free(item); + addr_policy_list_free(policy); + addr_policy_list_free(e_policy); + UNMOCK(get_options); +} + +#undef REJECT_IPv4_FINAL_STR +#undef REJECT_IPv6_FINAL_STR +#undef OTHER_IPV4_ADDR_STR +#undef OTHER_IPV6_ADDR_STR + +#define TEST_IPV4_OR_PORT 1234 +#define TEST_IPV4_DIR_PORT 2345 +#define TEST_IPV6_OR_PORT 61234 +#define TEST_IPV6_DIR_PORT 62345 + +/** Run unit tests for fascist_firewall_choose_address */ +static void +test_policies_fascist_firewall_choose_address(void *arg) +{ + (void)arg; + tor_addr_port_t ipv4_or_ap, ipv4_dir_ap, ipv6_or_ap, ipv6_dir_ap; + tor_addr_port_t n_ipv4_ap, n_ipv6_ap; + + /* Setup the options */ + memset(&mock_options, 0, sizeof(or_options_t)); + MOCK(get_options, mock_get_options); + + /* Parse the addresses */ + tor_addr_parse(&ipv4_or_ap.addr, TEST_IPV4_ADDR_STR); + ipv4_or_ap.port = TEST_IPV4_OR_PORT; + tor_addr_parse(&ipv4_dir_ap.addr, TEST_IPV4_ADDR_STR); + ipv4_dir_ap.port = TEST_IPV4_DIR_PORT; + + tor_addr_parse(&ipv6_or_ap.addr, TEST_IPV6_ADDR_STR); + ipv6_or_ap.port = TEST_IPV6_OR_PORT; + tor_addr_parse(&ipv6_dir_ap.addr, TEST_IPV6_ADDR_STR); + ipv6_dir_ap.port = TEST_IPV6_DIR_PORT; + + tor_addr_make_null(&n_ipv4_ap.addr, AF_INET); + n_ipv4_ap.port = 0; + tor_addr_make_null(&n_ipv6_ap.addr, AF_INET6); + n_ipv6_ap.port = 0; + + /* Choose an address with IPv4 and IPv6 on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 0; + + /* Preferring IPv4 */ + mock_options.ClientPreferIPv6ORPort = 0; + mock_options.ClientPreferIPv6DirPort = 0; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Auto (Preferring IPv4) */ + mock_options.ClientPreferIPv6ORPort = -1; + mock_options.ClientPreferIPv6DirPort = -1; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Preferring IPv6 */ + mock_options.ClientPreferIPv6ORPort = 1; + mock_options.ClientPreferIPv6DirPort = 1; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv6_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv6_dir_ap); + + /* Preferring IPv4 OR / IPv6 Dir */ + mock_options.ClientPreferIPv6ORPort = 0; + mock_options.ClientPreferIPv6DirPort = 1; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv6_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv6_dir_ap); + + /* Preferring IPv6 OR / IPv4 Dir */ + mock_options.ClientPreferIPv6ORPort = 1; + mock_options.ClientPreferIPv6DirPort = 0; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Choose an address with UseBridges on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.UseBridges = 1; + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 1; + + /* Preferring IPv4 */ + mock_options.ClientPreferIPv6ORPort = 0; + mock_options.ClientPreferIPv6DirPort = 0; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Auto: + * - bridge clients prefer the configured bridge OR address, + * - other clients prefer IPv4 OR by default, + * - all clients prefer IPv4 Dir by default. + */ + mock_options.ClientPreferIPv6ORPort = -1; + mock_options.ClientPreferIPv6DirPort = -1; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Preferring IPv6 */ + mock_options.ClientPreferIPv6ORPort = 1; + mock_options.ClientPreferIPv6DirPort = 1; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv6_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv6_dir_ap); + + /* In the default configuration (Auto / IPv6 off), bridge clients should + * still use IPv6, and only prefer it for bridges configured with an IPv6 + * address, regardless of ClientUseIPv6. */ + mock_options.ClientUseIPv6 = 0; + mock_options.ClientPreferIPv6ORPort = -1; + mock_options.ClientPreferIPv6DirPort = -1; + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Choose an address with IPv4 on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 0; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv4_dir_ap); + + /* Choose an address with IPv6 on */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 0; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv6_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv6_dir_ap); + + /* Choose an address with ClientUseIPv4 0. + * This means "use IPv6" regardless of the other settings. */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 0; + mock_options.ClientUseIPv6 = 0; + mock_options.UseBridges = 0; + + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 1) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv6_dir_ap); + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 1) + == &ipv6_dir_ap); + + /* Choose from unusual inputs */ + memset(&mock_options, 0, sizeof(or_options_t)); + mock_options.ClientUseIPv4 = 1; + mock_options.ClientUseIPv6 = 1; + mock_options.UseBridges = 1; + + tt_assert(fascist_firewall_choose_address(&ipv4_or_ap, &n_ipv6_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv4_or_ap); + tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &ipv6_or_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == &ipv6_or_ap); + tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &n_ipv6_ap, 0, + FIREWALL_OR_CONNECTION, 0) + == NULL); + + tt_assert(fascist_firewall_choose_address(&ipv4_dir_ap, &n_ipv6_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv4_dir_ap); + tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &ipv6_dir_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == &ipv6_dir_ap); + tt_assert(fascist_firewall_choose_address(&n_ipv4_ap, &n_ipv6_ap, 0, + FIREWALL_DIR_CONNECTION, 0) + == NULL); + + done: + UNMOCK(get_options); +} + +#undef TEST_IPV4_ADDR_STR +#undef TEST_IPV6_ADDR_STR +#undef TEST_IPV4_OR_PORT +#undef TEST_IPV4_DIR_PORT +#undef TEST_IPV6_OR_PORT +#undef TEST_IPV6_DIR_PORT + struct testcase_t policy_tests[] = { { "router_dump_exit_policy_to_string", test_dump_exit_policy_to_string, 0, NULL, NULL }, @@ -1139,6 +1670,10 @@ struct testcase_t policy_tests[] = { { "reject_interface_address", test_policies_reject_interface_address, 0, NULL, NULL }, { "reject_port_address", test_policies_reject_port_address, 0, NULL, NULL }, + { "fascist_firewall_allows_address", + test_policies_fascist_firewall_allows_address, 0, NULL, NULL }, + { "fascist_firewall_choose_address", + test_policies_fascist_firewall_choose_address, 0, NULL, NULL }, END_OF_TESTCASES }; diff --git a/src/test/test_rendcache.c b/src/test/test_rendcache.c index 77796994b4..7e04799db2 100644 --- a/src/test/test_rendcache.c +++ b/src/test/test_rendcache.c @@ -128,8 +128,8 @@ test_rend_cache_store_v2_desc_as_client(void *data) // Test bad base32 failure // This causes an assertion failure if we're running with assertions. - // But when doing coverage, we can test it. -#ifdef TOR_COVERAGE + // But when building without asserts, we can test it. +#ifdef DISABLE_ASSERTS_IN_UNIT_TESTS ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, "!xqunszqnaolrrfmtzgaki7mxelgvkj", mock_rend_query, NULL); tt_int_op(ret, OP_EQ, RCS_BADDESC); diff --git a/src/test/test_routerlist.c b/src/test/test_routerlist.c index 8c4254ccd7..fdbd5abf3b 100644 --- a/src/test/test_routerlist.c +++ b/src/test/test_routerlist.c @@ -11,6 +11,7 @@ #define TOR_UNIT_TESTING #include "or.h" #include "config.h" +#include "connection.h" #include "container.h" #include "directory.h" #include "dirvote.h" @@ -371,6 +372,77 @@ test_router_pick_directory_server_impl(void *arg) policies_free_all(); } +connection_t *mocked_connection = NULL; + +/* Mock connection_get_by_type_addr_port_purpose by returning + * mocked_connection. */ +static connection_t * +mock_connection_get_by_type_addr_port_purpose(int type, + const tor_addr_t *addr, + uint16_t port, int purpose) +{ + (void)type; + (void)addr; + (void)port; + (void)purpose; + + return mocked_connection; +} + +#define TEST_ADDR_STR "127.0.0.1" +#define TEST_DIR_PORT 12345 + +static void +test_routerlist_router_is_already_dir_fetching(void *arg) +{ + (void)arg; + tor_addr_port_t test_ap, null_addr_ap, zero_port_ap; + + /* Setup */ + tor_addr_parse(&test_ap.addr, TEST_ADDR_STR); + test_ap.port = TEST_DIR_PORT; + tor_addr_make_null(&null_addr_ap.addr, AF_INET6); + null_addr_ap.port = TEST_DIR_PORT; + tor_addr_parse(&zero_port_ap.addr, TEST_ADDR_STR); + zero_port_ap.port = 0; + MOCK(connection_get_by_type_addr_port_purpose, + mock_connection_get_by_type_addr_port_purpose); + + /* Test that we never get 1 from a NULL connection */ + mocked_connection = NULL; + tt_assert(router_is_already_dir_fetching(&test_ap, 1, 1) == 0); + tt_assert(router_is_already_dir_fetching(&test_ap, 1, 0) == 0); + tt_assert(router_is_already_dir_fetching(&test_ap, 0, 1) == 0); + /* We always expect 0 in these cases */ + tt_assert(router_is_already_dir_fetching(&test_ap, 0, 0) == 0); + tt_assert(router_is_already_dir_fetching(NULL, 1, 1) == 0); + tt_assert(router_is_already_dir_fetching(&null_addr_ap, 1, 1) == 0); + tt_assert(router_is_already_dir_fetching(&zero_port_ap, 1, 1) == 0); + + /* Test that we get 1 with a connection in the appropriate circumstances */ + mocked_connection = connection_new(CONN_TYPE_DIR, AF_INET); + tt_assert(router_is_already_dir_fetching(&test_ap, 1, 1) == 1); + tt_assert(router_is_already_dir_fetching(&test_ap, 1, 0) == 1); + tt_assert(router_is_already_dir_fetching(&test_ap, 0, 1) == 1); + + /* Test that we get 0 even with a connection in the appropriate + * circumstances */ + tt_assert(router_is_already_dir_fetching(&test_ap, 0, 0) == 0); + tt_assert(router_is_already_dir_fetching(NULL, 1, 1) == 0); + tt_assert(router_is_already_dir_fetching(&null_addr_ap, 1, 1) == 0); + tt_assert(router_is_already_dir_fetching(&zero_port_ap, 1, 1) == 0); + + done: + /* If a connection is never set up, connection_free chokes on it. */ + buf_free(mocked_connection->inbuf); + buf_free(mocked_connection->outbuf); + tor_free(mocked_connection); + UNMOCK(connection_get_by_type_addr_port_purpose); +} + +#undef TEST_ADDR_STR +#undef TEST_DIR_PORT + #define NODE(name, flags) \ { #name, test_routerlist_##name, (flags), NULL, NULL } #define ROUTER(name,flags) \ @@ -379,6 +451,7 @@ test_router_pick_directory_server_impl(void *arg) struct testcase_t routerlist_tests[] = { NODE(initiate_descriptor_downloads, 0), NODE(launch_descriptor_downloads, 0), + NODE(router_is_already_dir_fetching, TT_FORK), ROUTER(pick_directory_server_impl, TT_FORK), END_OF_TESTCASES }; diff --git a/src/test/test_tortls.c b/src/test/test_tortls.c index 71b3863963..138485c971 100644 --- a/src/test/test_tortls.c +++ b/src/test/test_tortls.c @@ -1612,7 +1612,7 @@ test_tortls_block_renegotiation(void *ignored) tt_assert(!(tls->ssl->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)); #endif - + done: tor_free(tls->ssl->s3); tor_free(tls->ssl); diff --git a/src/test/testing_common.c b/src/test/testing_common.c index fc4e05c4e8..da9969d8d9 100644 --- a/src/test/testing_common.c +++ b/src/test/testing_common.c @@ -241,6 +241,11 @@ main(int c, const char **v) update_approx_time(time(NULL)); options = options_new(); tor_threads_init(); + + struct tor_libevent_cfg cfg; + memset(&cfg, 0, sizeof(cfg)); + tor_libevent_initialize(&cfg); + control_initialize_event_queue(); configure_backtrace_handler(get_version()); diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h index 7c6159ed5c..407ffc00fc 100644 --- a/src/win32/orconfig.h +++ b/src/win32/orconfig.h @@ -220,9 +220,6 @@ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS -/* Define to 1 if time_t is signed. */ -#define TIME_T_IS_SIGNED - /* Define to 1 iff unaligned int access is allowed */ #define UNALIGNED_INT_ACCESS_OK @@ -232,7 +229,7 @@ #define USING_TWOS_COMPLEMENT /* Version number of package */ -#define VERSION "0.2.8.1-alpha" +#define VERSION "0.2.8.1-alpha-dev" |