summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog157
-rw-r--r--Makefile.am6
-rw-r--r--ReleaseNotes55
-rw-r--r--changes/170704
-rw-r--r--changes/191423
-rw-r--r--changes/199653
-rw-r--r--changes/205113
-rw-r--r--changes/208534
-rw-r--r--changes/bug190435
-rw-r--r--changes/bug200854
-rw-r--r--changes/bug20306_0294
-rw-r--r--changes/bug204236
-rw-r--r--changes/bug205304
-rw-r--r--changes/bug205594
-rw-r--r--changes/bug205604
-rw-r--r--changes/bug205975
-rw-r--r--changes/bug206136
-rw-r--r--changes/bug206343
-rw-r--r--changes/bug206466
-rw-r--r--changes/bug206675
-rw-r--r--changes/bug208395
-rw-r--r--changes/bug208604
-rw-r--r--changes/feature1505628
-rw-r--r--changes/feature172384
-rw-r--r--changes/feature205522
-rw-r--r--changes/ticket1887310
-rw-r--r--changes/ticket207173
-rw-r--r--changes/ticket209605
-rw-r--r--changes/ticket209825
-rw-r--r--changes/ticket55003
-rw-r--r--configure.ac50
-rw-r--r--doc/HACKING/CodingStandards.md4
-rw-r--r--doc/HACKING/ReleasingTor.md16
-rw-r--r--doc/tor.1.txt33
-rwxr-xr-xscripts/codegen/run_trunnel.sh6
-rwxr-xr-xscripts/maint/checkSpace.pl134
-rw-r--r--src/common/address.c3
-rw-r--r--src/common/compat.c9
-rw-r--r--src/common/crypto.c69
-rw-r--r--src/common/crypto.h4
-rw-r--r--src/common/crypto_ed25519.c30
-rw-r--r--src/common/crypto_ed25519.h15
-rw-r--r--src/common/crypto_format.c16
-rw-r--r--src/common/crypto_format.h1
-rw-r--r--src/common/log.c4
-rw-r--r--src/common/sandbox.c5
-rw-r--r--src/common/timers.c14
-rw-r--r--src/common/timers.h2
-rw-r--r--src/common/util.c8
-rw-r--r--src/config/geoip6259
-rw-r--r--src/config/geoip61193
-rw-r--r--src/ext/trunnel/trunnel-impl.h2
-rw-r--r--src/ext/trunnel/trunnel.c2
-rw-r--r--src/ext/trunnel/trunnel.h2
-rw-r--r--src/or/bridges.c23
-rw-r--r--src/or/bridges.h3
-rw-r--r--src/or/channel.c151
-rw-r--r--src/or/channel.h40
-rw-r--r--src/or/channeltls.c18
-rw-r--r--src/or/circuitbuild.c106
-rw-r--r--src/or/circuitbuild.h11
-rw-r--r--src/or/circuitlist.c179
-rw-r--r--src/or/circuitlist.h4
-rw-r--r--src/or/circuitstats.c2
-rw-r--r--src/or/circuituse.c201
-rw-r--r--src/or/circuituse.h20
-rw-r--r--src/or/config.c47
-rw-r--r--src/or/connection.c15
-rw-r--r--src/or/connection_edge.c2
-rw-r--r--src/or/connection_or.c299
-rw-r--r--src/or/connection_or.h5
-rw-r--r--src/or/control.c2
-rw-r--r--src/or/directory.c37
-rw-r--r--src/or/dirserv.c58
-rw-r--r--src/or/dirserv.h3
-rw-r--r--src/or/dnsserv.c2
-rw-r--r--src/or/entrynodes.c4
-rw-r--r--src/or/hibernate.c6
-rw-r--r--src/or/hs_circuitmap.c328
-rw-r--r--src/or/hs_circuitmap.h70
-rw-r--r--src/or/hs_common.h6
-rw-r--r--src/or/hs_descriptor.c46
-rw-r--r--src/or/hs_descriptor.h1
-rw-r--r--src/or/hs_intropoint.c288
-rw-r--r--src/or/hs_intropoint.h42
-rw-r--r--src/or/hs_service.c177
-rw-r--r--src/or/hs_service.h32
-rw-r--r--src/or/include.am8
-rw-r--r--src/or/main.c9
-rw-r--r--src/or/networkstatus.c63
-rw-r--r--src/or/networkstatus.h4
-rw-r--r--src/or/nodelist.c79
-rw-r--r--src/or/nodelist.h8
-rw-r--r--src/or/onion.c314
-rw-r--r--src/or/onion.h2
-rw-r--r--src/or/or.h45
-rw-r--r--src/or/protover.c2
-rw-r--r--src/or/rendcommon.c3
-rw-r--r--src/or/rendmid.c32
-rw-r--r--src/or/rendmid.h4
-rw-r--r--src/or/rendservice.c560
-rw-r--r--src/or/rendservice.h19
-rw-r--r--src/or/router.c13
-rw-r--r--src/or/routerkeys.c30
-rw-r--r--src/or/routerkeys.h2
-rw-r--r--src/or/routerlist.c49
-rw-r--r--src/or/routerlist.h1
-rw-r--r--src/or/routerparse.c41
-rw-r--r--src/or/shared_random.c6
-rw-r--r--src/or/torcert.c41
-rw-r--r--src/or/torcert.h2
-rw-r--r--src/test/include.am3
-rw-r--r--src/test/test.c5
-rw-r--r--src/test/test.h3
-rw-r--r--src/test/test_cell_formats.c35
-rw-r--r--src/test/test_channel.c107
-rw-r--r--src/test/test_circuitlist.c63
-rw-r--r--src/test/test_circuituse.c304
-rw-r--r--src/test/test_config.c28
-rw-r--r--src/test/test_crypto.c49
-rw-r--r--src/test/test_dir.c7
-rw-r--r--src/test/test_dir_handle_get.c60
-rw-r--r--src/test/test_helpers.c23
-rw-r--r--src/test/test_helpers.h2
-rw-r--r--src/test/test_hs.c129
-rw-r--r--src/test/test_hs_descriptor.c10
-rw-r--r--src/test/test_hs_intropoint.c361
-rw-r--r--src/test/test_hs_service.c111
-rw-r--r--src/test/test_link_handshake.c10
-rw-r--r--src/test/test_oom.c19
-rw-r--r--src/test/test_options.c30
-rw-r--r--src/test/test_rendcache.c8
-rw-r--r--src/test/test_util.c4
-rw-r--r--src/tools/tor-resolve.c2
-rw-r--r--src/trunnel/ed25519_cert.c923
-rw-r--r--src/trunnel/ed25519_cert.h348
-rw-r--r--src/trunnel/ed25519_cert.trunnel53
-rw-r--r--src/trunnel/hs/cell_common.c8
-rw-r--r--src/trunnel/hs/cell_common.h8
-rw-r--r--src/trunnel/hs/cell_establish_intro.c8
-rw-r--r--src/trunnel/hs/cell_establish_intro.h8
-rw-r--r--src/trunnel/hs/cell_introduce1.c14
-rw-r--r--src/trunnel/hs/cell_introduce1.h14
-rw-r--r--src/trunnel/link_handshake.c16
-rw-r--r--src/trunnel/link_handshake.h16
-rw-r--r--src/trunnel/pwbox.c8
-rw-r--r--src/trunnel/pwbox.h8
147 files changed, 10493 insertions, 4118 deletions
diff --git a/ChangeLog b/ChangeLog
index a52c39dccc..30840809d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,163 @@
Changes in version 0.3.0.1-alpha - 2016-??-??
+Changes in version 0.2.9.7-rc - 2016-12-12
+ Tor 0.2.9.7-rc fixes a few small bugs remaining in Tor 0.2.9.6-rc,
+ including a few that had prevented tests from passing on
+ some platforms.
+
+ o Minor features (geoip):
+ - Update geoip and geoip6 to the December 7 2016 Maxmind GeoLite2
+ Country database.
+
+ o Minor bugfix (build):
+ - The current Git revision when building from a local repository is
+ now detected correctly when using git worktrees. Fixes bug 20492;
+ bugfix on 0.2.3.9-alpha.
+
+ o Minor bugfixes (directory authority):
+ - When computing old Tor protocol line version in protover, we were
+ looking at 0.2.7.5 twice instead of a specific case for
+ 0.2.9.1-alpha. Fixes bug 20810; bugfix on tor-0.2.9.4-alpha.
+
+ o Minor bugfixes (download scheduling):
+ - Resolve a "bug" warning when considering a download schedule whose
+ delay had approached INT_MAX. Fixes 20875; bugfix on 0.2.9.5-alpha.
+
+ o Minor bugfixes (logging):
+ - Downgrade a harmless log message about the
+ pending_entry_connections list from "warn" to "info". Mitigates
+ bug 19926.
+
+ o Minor bugfixes (memory leak):
+ - Fix a small memory leak when receiving AF_UNIX connections on a
+ SocksPort. Fixes bug 20716; bugfix on 0.2.6.3-alpha.
+ - When moving a signed descriptor object from a source to an
+ existing destination, free the allocated memory inside that
+ destination object. Fixes bug 20715; bugfix on tor-0.2.8.3-alpha.
+
+ o Minor bugfixes (memory leak, use-after-free, linux seccomp2 sandbox):
+ - Fix a memory leak and use-after-free error when removing entries
+ from the sandbox's getaddrinfo() cache. Fixes bug 20710; bugfix on
+ 0.2.5.5-alpha. Patch from "cypherpunks".
+
+ o Minor bugfixes (portability):
+ - Use the correct spelling of MAC_OS_X_VERSION_10_12 on configure.ac
+ Fixes bug 20935; bugfix on 0.2.9.6-rc.
+
+ o Minor bugfixes (unit tests):
+ - Stop expecting NetBSD unit tests to report success for ipfw. Part
+ of a fix for bug 19960; bugfix on 0.2.9.5-alpha.
+ - Fix tolerances in unit tests for monotonic time comparisons
+ between nanoseconds and microseconds. Previously, we accepted a 10
+ us difference only, which is not realistic on every platform's
+ clock_gettime(). Fixes bug 19974; bugfix on 0.2.9.1-alpha.
+ - Remove a double-free in the single onion service unit test. Stop
+ ignoring a return value. Make future changes less error-prone.
+ Fixes bug 20864; bugfix on 0.2.9.6-rc.
+
+
+Changes in version 0.2.8.11 - 2016-12-08
+ Tor 0.2.8.11 backports fixes for additional portability issues that
+ could prevent Tor from building correctly on OSX Sierra, or with
+ OpenSSL 1.1. Affected users should upgrade; others can safely stay
+ with 0.2.8.10.
+
+ o Minor bugfixes (portability):
+ - Avoid compilation errors when building on OSX Sierra. Sierra began
+ to support the getentropy() and clock_gettime() APIs, but created
+ a few problems in doing so. Tor 0.2.9 has a more thorough set of
+ workarounds; in 0.2.8, we are just using the /dev/urandom and mach
+ monotonic time interfaces. Fixes bug 20865. Bugfix
+ on 0.2.8.1-alpha.
+
+ o Minor bugfixes (portability, backport from 0.2.9.5-alpha):
+ - Fix compilation with OpenSSL 1.1 and less commonly-used CPU
+ architectures. Closes ticket 20588.
+
+
+Changes in version 0.2.8.10 - 2016-12-02
+ Tor 0.2.8.10 backports a fix for a bug that would sometimes make clients
+ unusable after they left standby mode. It also backports fixes for
+ a few portability issues and a small but problematic memory leak.
+
+ o Major bugfixes (client reliability, backport from 0.2.9.5-alpha):
+ - When Tor leaves standby because of a new application request, open
+ circuits as needed to serve that request. Previously, we would
+ potentially wait a very long time. Fixes part of bug 19969; bugfix
+ on 0.2.8.1-alpha.
+
+ o Major bugfixes (client performance, backport from 0.2.9.5-alpha):
+ - Clients now respond to new application stream requests immediately
+ when they arrive, rather than waiting up to one second before
+ starting to handle them. Fixes part of bug 19969; bugfix
+ on 0.2.8.1-alpha.
+
+ o Minor bugfixes (portability, backport from 0.2.9.6-rc):
+ - Work around a bug in the OSX 10.12 SDK that would prevent us from
+ successfully targeting earlier versions of OSX. Resolves
+ ticket 20235.
+
+ o Minor bugfixes (portability, backport from 0.2.9.5-alpha):
+ - Fix implicit conversion warnings under OpenSSL 1.1. Fixes bug
+ 20551; bugfix on 0.2.1.1-alpha.
+
+ o Minor bugfixes (relay, backport from 0.2.9.5-alpha):
+ - Work around a memory leak in OpenSSL 1.1 when encoding public
+ keys. Fixes bug 20553; bugfix on 0.0.2pre8.
+
+ o Minor features (geoip):
+ - Update geoip and geoip6 to the November 3 2016 Maxmind GeoLite2
+ Country database.
+
+Changes in version 0.2.9.6-rc - 2016-12-02
+ Tor 0.2.9.6-rc fixes a few remaining bugs found in the previous alpha
+ version. We hope that it will be ready to become stable soon, and we
+ encourage everyone to test this release. If no showstopper bugs are
+ found here, the next 0.2.9 release will be stable.
+
+ o Major bugfixes (relay, resolver, logging):
+ - For relays that don't know their own address, avoid attempting a
+ local hostname resolve for each descriptor we download. This
+ will cut down on the number of "Success: chose address 'x.x.x.x'"
+ log lines, and also avoid confusing clock jumps if the resolver
+ is slow. Fixes bugs 20423 and 20610; bugfix on 0.2.8.1-alpha.
+
+ o Minor bugfixes (client, fascistfirewall):
+ - Avoid spurious warnings when ReachableAddresses or FascistFirewall
+ is set. Fixes bug 20306; bugfix on 0.2.8.2-alpha.
+
+ o Minor bugfixes (hidden services):
+ - Stop ignoring the anonymity status of saved keys for hidden
+ services and single onion services when first starting tor.
+ Instead, refuse to start tor if any hidden service key has been
+ used in a different hidden service anonymity mode. Fixes bug
+ 20638; bugfix on 17178 in 0.2.9.3-alpha; reported by ahf.
+
+ o Minor bugfixes (portability):
+ - Work around a bug in the OSX 10.12 SDK that would prevent us from
+ successfully targeting earlier versions of OSX. Resolves
+ ticket 20235.
+ - Run correctly when built on Windows build environments that
+ require _vcsprintf(). Fixes bug 20560; bugfix on 0.2.2.11-alpha.
+
+ o Minor bugfixes (single onion services, Tor2web):
+ - Stop complaining about long-term one-hop circuits deliberately
+ created by single onion services and Tor2web. These log messages
+ are intended to diagnose issue 8387, which relates to circuits
+ hanging around forever for no reason. Fixes bug 20613; bugfix on
+ 0.2.9.1-alpha. Reported by "pastly".
+
+ o Minor bugfixes (unit tests):
+ - Stop spurious failures in the local interface address discovery
+ unit tests. Fixes bug 20634; bugfix on 0.2.8.1-alpha; patch by
+ Neel Chauhan.
+
+ o Documentation:
+ - Correct the minimum bandwidth value in torrc.sample, and queue a
+ corresponding change for torrc.minimal. Closes ticket 20085.
+
+
Changes in version 0.2.9.5-alpha - 2016-11-08
Tor 0.2.9.5-alpha fixes numerous bugs discovered in the previous alpha
version. We believe one or two probably remain, and we encourage
diff --git a/Makefile.am b/Makefile.am
index f400728bac..007a2e82bb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -82,6 +82,8 @@ doxygen:
test: all
$(top_builddir)/src/test/test
+check-local: check-spaces
+
need-chutney-path:
@if test ! -d "$$CHUTNEY_PATH"; then \
echo '$$CHUTNEY_PATH was not set.'; \
@@ -181,11 +183,13 @@ coverage-html-full: all
# Avoid strlcpy.c, strlcat.c, aes.c, OpenBSD_malloc_Linux.c, sha256.c,
# tinytest*.[ch]
check-spaces:
- $(top_srcdir)/scripts/maint/checkSpace.pl -C \
+if USE_PERL
+ $(PERL) $(top_srcdir)/scripts/maint/checkSpace.pl -C \
$(top_srcdir)/src/common/*.[ch] \
$(top_srcdir)/src/or/*.[ch] \
$(top_srcdir)/src/test/*.[ch] \
$(top_srcdir)/src/tools/*.[ch]
+endif
check-docs: all
$(PERL) $(top_builddir)/scripts/maint/checkOptionDocs.pl
diff --git a/ReleaseNotes b/ReleaseNotes
index af61a4d739..97db5af763 100644
--- a/ReleaseNotes
+++ b/ReleaseNotes
@@ -2,6 +2,61 @@ This document summarizes new features and bugfixes in each stable release
of Tor. If you want to see more detailed descriptions of the changes in
each development snapshot, see the ChangeLog file.
+
+Changes in version 0.2.8.11 - 2016-12-08
+ Tor 0.2.8.11 backports fixes for additional portability issues that
+ could prevent Tor from building correctly on OSX Sierra, or with
+ OpenSSL 1.1. Affected users should upgrade; others can safely stay
+ with 0.2.8.10.
+
+ o Minor bugfixes (portability):
+ - Avoid compilation errors when building on OSX Sierra. Sierra began
+ to support the getentropy() and clock_gettime() APIs, but created
+ a few problems in doing so. Tor 0.2.9 has a more thorough set of
+ workarounds; in 0.2.8, we are just using the /dev/urandom and mach
+ monotonic time interfaces. Fixes bug 20865. Bugfix
+ on 0.2.8.1-alpha.
+
+ o Minor bugfixes (portability, backport from 0.2.9.5-alpha):
+ - Fix compilation with OpenSSL 1.1 and less commonly-used CPU
+ architectures. Closes ticket 20588.
+
+
+Changes in version 0.2.8.10 - 2016-12-02
+ Tor 0.2.8.10 backports a fix for a bug that would sometimes make clients
+ unusable after they left standby mode. It also backports fixes for
+ a few portability issues and a small but problematic memory leak.
+
+ o Major bugfixes (client reliability, backport from 0.2.9.5-alpha):
+ - When Tor leaves standby because of a new application request, open
+ circuits as needed to serve that request. Previously, we would
+ potentially wait a very long time. Fixes part of bug 19969; bugfix
+ on 0.2.8.1-alpha.
+
+ o Major bugfixes (client performance, backport from 0.2.9.5-alpha):
+ - Clients now respond to new application stream requests immediately
+ when they arrive, rather than waiting up to one second before
+ starting to handle them. Fixes part of bug 19969; bugfix
+ on 0.2.8.1-alpha.
+
+ o Minor bugfixes (portability, backport from 0.2.9.6-rc):
+ - Work around a bug in the OSX 10.12 SDK that would prevent us from
+ successfully targeting earlier versions of OSX. Resolves
+ ticket 20235.
+
+ o Minor bugfixes (portability, backport from 0.2.9.5-alpha):
+ - Fix implicit conversion warnings under OpenSSL 1.1. Fixes bug
+ 20551; bugfix on 0.2.1.1-alpha.
+
+ o Minor bugfixes (relay, backport from 0.2.9.5-alpha):
+ - Work around a memory leak in OpenSSL 1.1 when encoding public
+ keys. Fixes bug 20553; bugfix on 0.0.2pre8.
+
+ o Minor features (geoip):
+ - Update geoip and geoip6 to the November 3 2016 Maxmind GeoLite2
+ Country database.
+
+
Changes in version 0.2.8.9 - 2016-10-17
Tor 0.2.8.9 backports a fix for a security hole in previous versions
of Tor that would allow a remote attacker to crash a Tor client,
diff --git a/changes/17070 b/changes/17070
new file mode 100644
index 0000000000..ffe616f38d
--- /dev/null
+++ b/changes/17070
@@ -0,0 +1,4 @@
+ o Documentation (SOCKS connections):
+ - Clarify that when `ClientRejectInternalAddresses` is enabled (which is the
+ default), multicast DNS hostnames for machines on the local network (of
+ the form *.local) are also rejected. Closes ticket 17070.
diff --git a/changes/19142 b/changes/19142
new file mode 100644
index 0000000000..685bbbcc26
--- /dev/null
+++ b/changes/19142
@@ -0,0 +1,3 @@
+ o Removed features:
+ - We no longer attempt to build on systems where 'environ' is not
+ declared in the C headers. Closes ticket 19142.
diff --git a/changes/19965 b/changes/19965
new file mode 100644
index 0000000000..904f5c9db0
--- /dev/null
+++ b/changes/19965
@@ -0,0 +1,3 @@
+ o Minor bugfix (configuration):
+ - Accept non-space whitespace characters after the severity level in the
+ `Log` option. Fixes bug 19965; bugfix on 0.2.1.1-alpha.
diff --git a/changes/20511 b/changes/20511
new file mode 100644
index 0000000000..d6e962eeb7
--- /dev/null
+++ b/changes/20511
@@ -0,0 +1,3 @@
+ o Minor feature:
+ - Relays and bridges will now refuse to serve the consensus they have if
+ they know it is too old for a client to use. Closes ticket 20511.
diff --git a/changes/20853 b/changes/20853
new file mode 100644
index 0000000000..84d95c41e0
--- /dev/null
+++ b/changes/20853
@@ -0,0 +1,4 @@
+ o Minor bugfix (hidden services):
+ - Change ephemeral service checks in `rendservice.c` to use the new
+ `rend_service_is_ephemeral` helper function. Fixes bug 20853; bugfix on
+ bug 20526; not in any released version of Tor.
diff --git a/changes/bug19043 b/changes/bug19043
new file mode 100644
index 0000000000..70c35dfa7b
--- /dev/null
+++ b/changes/bug19043
@@ -0,0 +1,5 @@
+ o Major features (hidden services):
+ - Relays can now handle v3 ESTABLISH_INTRO cells as specified by prop224
+ aka "Next Generation Hidden Services". Service and clients don't yet use
+ this code functionnality. It marks another step towards prop224
+ deployment. Resolves ticket 19043. Initial code by Alec Heifetz.
diff --git a/changes/bug20085 b/changes/bug20085
deleted file mode 100644
index fd10e7eeeb..0000000000
--- a/changes/bug20085
+++ /dev/null
@@ -1,4 +0,0 @@
- o Documentation:
- - Correct the minimum bandwidth value in torrc.sample, and queue a
- corresponding change for torrc.minimal. Closes ticket 20085.
-
diff --git a/changes/bug20306_029 b/changes/bug20306_029
deleted file mode 100644
index ada2676b2b..0000000000
--- a/changes/bug20306_029
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes (fascistfirewall):
- - Avoid spurious warnings when ReachableAddresses or FascistFirewall
- is set. Fixes bug 20306; bugfix on 0.2.8.2-alpha.
-
diff --git a/changes/bug20423 b/changes/bug20423
deleted file mode 100644
index 32bdc3f081..0000000000
--- a/changes/bug20423
+++ /dev/null
@@ -1,6 +0,0 @@
- o Major bugfixes:
- - For relays that don't know their own address, avoid attempting
- a local hostname resolve for each descriptor we download. Also cut
- down on the number of "Success: chose address 'x.x.x.x'" log lines.
- Fixes bugs 20423 and 20610; bugfix on 0.2.8.1-alpha.
-
diff --git a/changes/bug20530 b/changes/bug20530
index c21d5fbd34..85d1b0115b 100644
--- a/changes/bug20530
+++ b/changes/bug20530
@@ -1,4 +1,4 @@
- o Minor Fixes (Windows):
+ o Minor bugfixes (Windows):
- Check for getpagesize before using it to mmap files. This fixes
compilation in some MinGW environments. Fixes bug 20530; bugfix on
- commit bf72878 in tor-0.1.2.1-alpha, reported by "ice".
+ 0.1.2.1-alpha. Reported by "ice".
diff --git a/changes/bug20559 b/changes/bug20559
new file mode 100644
index 0000000000..f117162dde
--- /dev/null
+++ b/changes/bug20559
@@ -0,0 +1,4 @@
+ o Minor bugfixes (hidden services):
+ - Stop ignoring misconfigured hidden services. Instead, refuse to start
+ tor until the misconfigurations have been corrected.
+ Fixes bug 20559; bugfix on multiple commits in 0.2.7.1-alpha and earlier.
diff --git a/changes/bug20560 b/changes/bug20560
deleted file mode 100644
index 43d605b296..0000000000
--- a/changes/bug20560
+++ /dev/null
@@ -1,4 +0,0 @@
- o Minor bugfixes (portability):
- - Run correctly when built on Windows build environments that require
- _vcsprintf(). Fixes bug 20560; bugfix on 0.2.2.11-alpha.
-
diff --git a/changes/bug20597 b/changes/bug20597
deleted file mode 100644
index f199b63933..0000000000
--- a/changes/bug20597
+++ /dev/null
@@ -1,5 +0,0 @@
- o Minor bugfixes (test networks, exponential backoff):
- - When using exponential backoff in test networks, use a lower exponent,
- so the delays do not vary as much. This helps test networks bootstrap
- consistently. Fixes bug 20597; bugfix on 20499; not in any released
- version of tor.
diff --git a/changes/bug20613 b/changes/bug20613
deleted file mode 100644
index 19bb61f4e0..0000000000
--- a/changes/bug20613
+++ /dev/null
@@ -1,6 +0,0 @@
- o Minor bugfixes (single onion services, Tor2web):
- - Stop logging long-term one-hop circuits deliberately created by single
- onion services and Tor2web. These log messages are intended to diagnose
- issue 8387, which relates to circuits hanging around forever for no
- reason.
- Fixes bug 20613; bugfix on 0.2.9.1-alpha. Reported by "pastly".
diff --git a/changes/bug20634 b/changes/bug20634
deleted file mode 100644
index 62fc9f4787..0000000000
--- a/changes/bug20634
+++ /dev/null
@@ -1,3 +0,0 @@
- o Minor bugfixes (unit tests):
- - Stop spurious failures in the local interface address discovery unit
- tests. Fixes bug 20634; bugfix on 0.2.8.1-alpha; patch by Neel Chauhan.
diff --git a/changes/bug20646 b/changes/bug20646
index 42e319ffcb..7cff38fb80 100644
--- a/changes/bug20646
+++ b/changes/bug20646
@@ -1,5 +1,5 @@
- o Minor bugfix (util)
+ o Minor bugfix (util):
- When finishing writing a file to disk, if we were about to replace the
file with the temporary file created before and we fail to replace it,
- remove the temporary file so it doesn't stay on disk. Closes #20646;
- bugfix on tor-0.2.0.7-alpha; Patch by fk.
+ remove the temporary file so it doesn't stay on disk. Fixes bug 20646;
+ bugfix on tor-0.2.0.7-alpha. Patch by fk.
diff --git a/changes/bug20667 b/changes/bug20667
new file mode 100644
index 0000000000..93b293a4e6
--- /dev/null
+++ b/changes/bug20667
@@ -0,0 +1,5 @@
+ o Minor bugfixes (directory downloads):
+ - Download all consensus flavors, descriptors, and authority certificates
+ when FetchUselessDescriptors is set, regardless of whether tor is a
+ directory cache or not.
+ Fixes bug 20667; bugfix on all recent tor versions.
diff --git a/changes/bug20839 b/changes/bug20839
new file mode 100644
index 0000000000..c290097d80
--- /dev/null
+++ b/changes/bug20839
@@ -0,0 +1,5 @@
+ o Minor bugfixes (descriptors):
+ - Correctly recognise downloaded full descriptors as valid, even when
+ using microdescriptors as circuits. This affects clients with
+ FetchUselessDescriptors set, and may affect directory authorities.
+ Fixes bug 20839; bugfix on commit 6083276 in 0.2.3.2-alpha.
diff --git a/changes/bug20860 b/changes/bug20860
new file mode 100644
index 0000000000..81b0dd8fc0
--- /dev/null
+++ b/changes/bug20860
@@ -0,0 +1,4 @@
+ o Minor bugfixes (hidden services):
+ - Stop ignoring duplicate hidden services when validating: this could
+ lead to a crash when those services were created.
+ Fixes bug 20860; bugfix on 20559; not in any released version of tor.
diff --git a/changes/feature15056 b/changes/feature15056
new file mode 100644
index 0000000000..46226f881f
--- /dev/null
+++ b/changes/feature15056
@@ -0,0 +1,28 @@
+ o Major features (ed25519 identity keys):
+ - Relays now understand requests to extend to other relays
+ by their Ed25519 identity keys. When an Ed25519 identity key
+ is included in an EXTEND2 cell, the relay will only extend
+ the circuit if the other relay can prove ownership of that identity.
+ Implements part of ticket 15056; part of proposal 220.
+ - Clients now support including Ed25519 identity keys in the EXTEND2
+ cells they generate. By default, this is controlled by a consensus
+ parameter, currently disabled. You can turn this feature on for
+ testing by setting ExtendByEd25519ID in your configuration. This might
+ make your traffic appear different than the traffic generated by other
+ users, however.
+ Implements part of ticket 15056; part of proposal 220.
+
+ o Code simplification and refactoring:
+ - The code to generate and parse EXTEND and EXTEND2 cells has
+ been replaced with code automatically generated by the "trunnel"
+ utility.
+ - Remove data structures that were used to index or_connection objects by
+ their RSA identity digests. These structures are fully redundant with
+ the similar structures used in the channel abstraction.
+
+ o Minor features (directory authority):
+ - Add a new authority-only AuthDirTestEd25519LinkKeys option (on by
+ default) to control whether authorities should try to probe relays by
+ their Ed25519 link keys. This option will go away in a few
+ releases--unless we encounter major trouble in our ed25519 link
+ protocol rollout, in which case it will serve as a safety option.
diff --git a/changes/feature17238 b/changes/feature17238
index eba9fb794e..88dfee92cf 100644
--- a/changes/feature17238
+++ b/changes/feature17238
@@ -1,6 +1,6 @@
- o Major features (onion service)
+ o Major features (onion services):
- Tor relays now support the HSDir version 3 protocol meaning they can
store and serve v3 descriptors. This is part of the next generation
onion service work detailled in proposal 224. The tor daemon also
contains all the necessary code to encode and decode a v3 descriptor but
- it's currently only used by the directory subsystem. Closes #17238.
+ it's currently only used by the directory subsystem. Closes ticket 17238.
diff --git a/changes/feature20552 b/changes/feature20552
index 11954807a7..75fbdde56b 100644
--- a/changes/feature20552
+++ b/changes/feature20552
@@ -1,4 +1,4 @@
o Minor features (ed25519 link handshake):
- Advertise support for the ed25519 link handshake using the
subprotocol-versions mechanism, so that clients can tell which
- relays can identity themselves by Ed25519 ID.
+ relays can identity themselves by Ed25519 ID. Closes ticket 20552.
diff --git a/changes/ticket18873 b/changes/ticket18873
new file mode 100644
index 0000000000..11a867d393
--- /dev/null
+++ b/changes/ticket18873
@@ -0,0 +1,10 @@
+ o Code simplification and refactoring:
+ - Refactor circuit_predict_and_launch_new for readability and
+ testability. Closes ticket 18873.
+ - Extract magic numbers in circuituse.c into defined variables.
+ - Refactor circuit_is_available_for_use to remove unnecessary check.
+
+ o Minor features (unit tests):
+ - Extract dummy_origin_circuit_new so it can be used by other test
+ functions.
+ - Add unit tests circuit_predict_and_launch_new.
diff --git a/changes/ticket20717 b/changes/ticket20717
new file mode 100644
index 0000000000..71d3edd13e
--- /dev/null
+++ b/changes/ticket20717
@@ -0,0 +1,3 @@
+ o Code simplification and refactoring:
+ - Refactor the hashing API to return negative values for errors, as is done
+ as throughout the codebase. Closes ticket 20717.
diff --git a/changes/ticket20960 b/changes/ticket20960
new file mode 100644
index 0000000000..3c21ae680f
--- /dev/null
+++ b/changes/ticket20960
@@ -0,0 +1,5 @@
+ o Removed features:
+ - The AuthDirMaxServersPerAuthAddr option no longer exists: The same
+ limit for relays running on a single IP applies to authority IP
+ addresses as well as to non-authority IP addresses. Closes ticket
+ 20960.
diff --git a/changes/ticket20982 b/changes/ticket20982
new file mode 100644
index 0000000000..5eaab4d985
--- /dev/null
+++ b/changes/ticket20982
@@ -0,0 +1,5 @@
+ o Minor bugfixes (client):
+ - Conform to the GNU Coding Standards section 4.7.1 which states
+ that the output of the version option consists of the program name
+ and its version number without prefixes. Fixes bug 20982; bugfix
+ on 0.0.2pre24.
diff --git a/changes/ticket5500 b/changes/ticket5500
new file mode 100644
index 0000000000..0cdd8e1f1d
--- /dev/null
+++ b/changes/ticket5500
@@ -0,0 +1,3 @@
+ o Testing:
+ - Perform the coding style checks when running the tests and fail when
+ coding style violations are found. Closes ticket 5500.
diff --git a/configure.ac b/configure.ac
index 8ee34070a3..552465c77c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -195,7 +195,9 @@ AC_PROG_CPP
AC_PROG_MAKE_SET
AC_PROG_RANLIB
-AC_PATH_PROG([PERL], [perl])
+AC_ARG_VAR([PERL], [path to Perl binary])
+AC_CHECK_PROGS([PERL], [perl])
+AM_CONDITIONAL(USE_PERL, [test "x$ac_cv_prog_PERL" != "x"])
dnl autoconf 2.59 appears not to support AC_PROG_SED
AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
@@ -379,14 +381,12 @@ AC_CHECK_FUNCS(
accept4 \
backtrace \
backtrace_symbols_fd \
- clock_gettime \
eventfd \
explicit_bzero \
timingsafe_memcmp \
flock \
ftime \
getaddrinfo \
- getentropy \
getifaddrs \
getpass \
getrlimit \
@@ -424,6 +424,34 @@ AC_CHECK_FUNCS(
_vscprintf
)
+# Apple messed up when they added two functions functions in Sierra: they
+# forgot to decorate them with appropriate AVAILABLE_MAC_OS_VERSION
+# checks. So we should only probe for those functions if we are sure that we
+# are not targetting OSX 10.11 or earlier.
+AC_MSG_CHECKING([for a pre-Sierra OSX build target])
+AC_TRY_COMPILE([
+#ifdef __APPLE__
+# include <AvailabilityMacros.h>
+# ifndef MAC_OS_X_VERSION_10_12
+# define MAC_OS_X_VERSION_10_12 101200
+# endif
+# if defined(MAC_OS_X_VERSION_MIN_REQUIRED)
+# if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12
+# error "Running on Mac OSX 10.11 or earlier"
+# endif
+# endif
+#endif
+], [],
+ [on_macos_pre_10_12=no ; AC_MSG_RESULT([no])],
+ [on_macos_pre_10_12=yes; AC_MSG_RESULT([yes])])
+
+if test "$on_macos_pre_10_12" = "no"; then
+ AC_CHECK_FUNCS(
+ clock_gettime \
+ getentropy \
+ )
+fi
+
if test "$bwin32" != "true"; then
AC_CHECK_HEADERS(pthread.h)
AC_CHECK_FUNCS(pthread_create)
@@ -1507,17 +1535,6 @@ int main(int c, char **v) { puts(__FUNCTION__); }])],
tor_cv_have_FUNCTION_macro=yes,
tor_cv_have_FUNCTION_macro=no))
-AC_CACHE_CHECK([whether we have extern char **environ already declared],
- tor_cv_have_environ_declared,
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-int main(int c, char **v) { char **t = environ; }])],
- tor_cv_have_environ_declared=yes,
- tor_cv_have_environ_declared=no))
-
if test "$tor_cv_have_func_macro" = "yes"; then
AC_DEFINE(HAVE_MACRO__func__, 1, [Defined if the compiler supports __func__])
fi
@@ -1531,11 +1548,6 @@ if test "$tor_cv_have_FUNCTION_macro" = "yes"; then
[Defined if the compiler supports __FUNCTION__])
fi
-if test "$tor_cv_have_environ_declared" = "yes"; then
- AC_DEFINE(HAVE_EXTERN_ENVIRON_DECLARED, 1,
- [Defined if we have extern char **environ already declared])
-fi
-
# $prefix stores the value of the --prefix command line option, or
# NONE if the option wasn't set. In the case that it wasn't set, make
# it be the default, so that we can use it to expand directories now.
diff --git a/doc/HACKING/CodingStandards.md b/doc/HACKING/CodingStandards.md
index f1c65850a4..01212a9919 100644
--- a/doc/HACKING/CodingStandards.md
+++ b/doc/HACKING/CodingStandards.md
@@ -93,6 +93,10 @@ What needs a changes file?
rewrites. Anything about which somebody might plausibly wonder "when
did that happen, and/or why did we do that" 6 months down the line.
+What does not need a changes file?
+
+ * Bugfixes for code that hasn't shipped in any released version of Tor
+
Why use changes files instead of Git commit messages?
* Git commit messages are written for developers, not users, and they
diff --git a/doc/HACKING/ReleasingTor.md b/doc/HACKING/ReleasingTor.md
index 04d9ecc3e8..4761ca9a37 100644
--- a/doc/HACKING/ReleasingTor.md
+++ b/doc/HACKING/ReleasingTor.md
@@ -98,7 +98,7 @@ new Tor release:
to a release-0.2.x branch, manually commit the changelogs to the later
git branches too.
-3. If you're doing the first stable release in a series, you need to
+3. If you're doing the first stable release in a series, you need to
create a ReleaseNotes for the series as a whole. To get started
there, copy all of the Changelog entries from the series into a new
file, and run `./scripts/maint/sortChanges.py` on it. That will
@@ -164,12 +164,15 @@ new Tor release:
0.2.2.23-alpha" (or whatever the version is), and we select the date as
the date in the ChangeLog.
-5. Wait up to a day or two (for a development release), or until most
- packages are up (for a stable release), and mail the release blurb and
- changelog to tor-talk or tor-announce.
+5. Mail the release blurb and ChangeLog to tor-talk (development release) or
+ tor-announce (stable).
- (We might be moving to faster announcements, but don't announce until
- the website is at least updated.)
+ Post the changelog on the the blog as well. You can generate a
+ blog-formatted version of the changelog with the -B option to
+ format-changelog.
+
+ When you post, include an estimate of when the next TorBrowser releases
+ will come out that include this Tor release.
=== V. Aftermath and cleanup
@@ -182,4 +185,5 @@ new Tor release:
2. Forward-port the ChangeLog (and ReleaseNotes if appropriate).
+3. Keep an eye on the blog post, to moderate comments and answer questions.
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 670c75d214..eef74547ee 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -504,11 +504,13 @@ GENERAL OPTIONS
(Default: 1)
[[FetchUselessDescriptors]] **FetchUselessDescriptors** **0**|**1**::
- If set to 1, Tor will fetch every non-obsolete descriptor from the
- authorities that it hears about. Otherwise, it will avoid fetching useless
- descriptors, for example for routers that are not running. This option is
- useful if you're using the contributed "exitlist" script to enumerate Tor
- nodes that exit to certain addresses. (Default: 0)
+ If set to 1, Tor will fetch every consensus flavor, descriptor, and
+ certificate that it hears about. Otherwise, it will avoid fetching useless
+ descriptors: flavors that it is not using to build circuits, and authority
+ certificates it does not trust. This option is useful if you're using a
+ tor client with an external parser that uses a full consensus.
+ This option fetches all documents, **DirCache** fetches and serves
+ all documents. (Default: 0)
[[HTTPProxy]] **HTTPProxy** __host__[:__port__]::
Tor will make all its directory requests through this host:port (or host:80
@@ -717,6 +719,13 @@ GENERAL OPTIONS
127.0.0.1 or 10.0.0.1. This is mostly useful for debugging
rate-limiting. (Default: 0)
+[[ExtendByEd25519ID]] **ExtendByEd25519ID** **0**|**1**|**auto**::
+ If this option is set to 1, we always try to include a relay's Ed25519 ID
+ when telling the proceeding relay in a circuit to extend to it.
+ If this option is set to 0, we never include Ed25519 IDs when extending
+ circuits. If the option is set to "default", we obey a
+ parameter in the consensus document. (Default: auto)
+
CLIENT OPTIONS
--------------
@@ -1412,7 +1421,8 @@ The following options are useful only for clients (that is, if
If true, Tor does not try to fulfill requests to connect to an internal
address (like 127.0.0.1 or 192.168.0.1) __unless a exit node is
specifically requested__ (for example, via a .exit hostname, or a
- controller request). (Default: 1)
+ controller request). If true, multicast DNS hostnames for machines on the
+ local network (of the form *.local) are also rejected. (Default: 1)
[[DownloadExtraInfo]] **DownloadExtraInfo** **0**|**1**::
If true, Tor downloads and caches "extra-info" documents. These documents
@@ -2236,10 +2246,6 @@ on the public Tor network.
list as acceptable on a single IP address. Set this to "0" for "no limit".
(Default: 2)
-[[AuthDirMaxServersPerAuthAddr]] **AuthDirMaxServersPerAuthAddr** __NUM__::
- Authoritative directories only. Like AuthDirMaxServersPerAddr, but applies
- to addresses shared with directory authorities. (Default: 5)
-
[[AuthDirFastGuarantee]] **AuthDirFastGuarantee** __N__ **bytes**|**KBytes**|**MBytes**|**GBytes**|**TBytes**|**KBits**|**MBits**|**GBits**|**TBits**::
Authoritative directories only. If non-zero, always vote the
Fast flag for any relay advertising this amount of capacity or
@@ -2263,6 +2269,13 @@ on the public Tor network.
(default), the flag "shared-rand-participate" is added to the authority
vote indicating participation in the protocol. (Default: 1)
+[[AuthDirTestEd25519LinkKeys]] **AuthDirTestEd25519LinkKeys** **0**|**1**::
+ Authoritative directories only. If this option is set to 0, then we treat
+ relays as "Running" if their RSA key is correct when we probe them,
+ regardless of their Ed25519 key. We should only ever set this option to 0
+ if there is some major bug in Ed25519 link authentication that causes us
+ to label all the relays as not Running. (Default: 1)
+
[[BridgePassword]] **BridgePassword** __Password__::
If set, contains an HTTP authenticator that tells a bridge authority to
serve all requested bridge information. Used by the (only partially
diff --git a/scripts/codegen/run_trunnel.sh b/scripts/codegen/run_trunnel.sh
index c574ea8069..428804342a 100755
--- a/scripts/codegen/run_trunnel.sh
+++ b/scripts/codegen/run_trunnel.sh
@@ -5,11 +5,13 @@ if test "x$TRUNNEL_PATH" != "x"; then
export PYTHONPATH
fi
+OPTIONS="--require-version=1.5.1"
+
# Get all .trunnel files recursively from that directory so we can support
# multiple sub-directories.
for file in `find ./src/trunnel/ -name '*.trunnel'`; do
- python -m trunnel --require-version=1.4 $file
+ python -m trunnel ${OPTIONS} $file
done
-python -m trunnel --require-version=1.4 --write-c-files --target-dir=./src/ext/trunnel/
+python -m trunnel ${OPTIONS} --write-c-files --target-dir=./src/ext/trunnel/
diff --git a/scripts/maint/checkSpace.pl b/scripts/maint/checkSpace.pl
index e90f5b330b..6d19d6ccde 100755
--- a/scripts/maint/checkSpace.pl
+++ b/scripts/maint/checkSpace.pl
@@ -1,48 +1,59 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+my $found = 0;
+sub msg {
+ $found = 1;
+ print "$_[0]";
+}
+
+my $C = 0;
if ($ARGV[0] =~ /^-/) {
- $lang = shift @ARGV;
+ my $lang = shift @ARGV;
$C = ($lang eq '-C');
-# $TXT = ($lang eq '-txt');
}
-for $fn (@ARGV) {
+for my $fn (@ARGV) {
open(F, "$fn");
- $lastnil = 0;
- $lastline = "";
- $incomment = 0;
+ my $lastnil = 0;
+ my $lastline = "";
+ my $incomment = 0;
+ my $in_func_head = 0;
while (<F>) {
## Warn about windows-style newlines.
- # (We insist on lines that end with a single LF character, not
- # CR LF.)
+ # (We insist on lines that end with a single LF character, not
+ # CR LF.)
if (/\r/) {
- print " CR:$fn:$.\n";
+ msg " CR:$fn:$.\n";
}
## Warn about tabs.
- # (We only use spaces)
+ # (We only use spaces)
if (/\t/) {
- print " TAB:$fn:$.\n";
+ msg " TAB:$fn:$.\n";
}
## Warn about labels that don't have a space in front of them
- # (We indent every label at least one space)
+ # (We indent every label at least one space)
if (/^[a-zA-Z_][a-zA-Z_0-9]*:/) {
- print "nosplabel:$fn:$.\n";
+ msg "nosplabel:$fn:$.\n";
}
## Warn about trailing whitespace.
- # (We don't allow whitespace at the end of the line; make your
- # editor highlight it for you so you can stop adding it in.)
+ # (We don't allow whitespace at the end of the line; make your
+ # editor highlight it for you so you can stop adding it in.)
if (/ +$/) {
- print "Space\@EOL:$fn:$.\n";
+ msg "Space\@EOL:$fn:$.\n";
}
## Warn about control keywords without following space.
- # (We put a space after every 'if', 'while', 'for', 'switch', etc)
+ # (We put a space after every 'if', 'while', 'for', 'switch', etc)
if ($C && /\s(?:if|while|for|switch)\(/) {
- print " KW(:$fn:$.\n";
+ msg " KW(:$fn:$.\n";
}
## Warn about #else #if instead of #elif.
# (We only allow #elif)
if (($lastline =~ /^\# *else/) and ($_ =~ /^\# *if/)) {
- print " #else#if:$fn:$.\n";
+ msg " #else#if:$fn:$.\n";
}
## Warn about some K&R violations
# (We use K&R-style C, where open braces go on the same line as
@@ -53,23 +64,23 @@ for $fn (@ARGV) {
# other stuff;
# }
if (/^\s+\{/ and $lastline =~ /^\s*(if|while|for|else if)/ and
- $lastline !~ /\{$/) {
- print "non-K&R {:$fn:$.\n";
- }
+ $lastline !~ /\{$/) {
+ msg "non-K&R {:$fn:$.\n";
+ }
if (/^\s*else/ and $lastline =~ /\}$/) {
- print " }\\nelse:$fn:$.\n";
- }
+ msg " }\\nelse:$fn:$.\n";
+ }
$lastline = $_;
## Warn about unnecessary empty lines.
# (Don't put an empty line before a line that contains nothing
# but a closing brace.)
if ($lastnil && /^\s*}\n/) {
- print " UnnecNL:$fn:$.\n";
+ msg " UnnecNL:$fn:$.\n";
}
## Warn about multiple empty lines.
# (At most one blank line in a row.)
if ($lastnil && /^$/) {
- print " DoubleNL:$fn:$.\n";
+ msg " DoubleNL:$fn:$.\n";
} elsif (/^$/) {
$lastnil = 1;
} else {
@@ -79,7 +90,7 @@ for $fn (@ARGV) {
## accept double-line lines.
# (Don't make lines wider than 80 characters, including newline.)
if (/^.{80}/) {
- print " Wide:$fn:$.\n";
+ msg " Wide:$fn:$.\n";
}
### Juju to skip over comments and strings, since the tests
### we're about to do are okay there.
@@ -102,28 +113,28 @@ for $fn (@ARGV) {
s!"(?:[^\"]+|\\.)*"!"X"!g;
next if /^\#/;
## Warn about C++-style comments.
- # (Use C style comments only.)
+ # (Use C style comments only.)
if (m!//!) {
- # print " //:$fn:$.\n";
+ # msg " //:$fn:$.\n";
s!//.*!!;
}
## Warn about unquoted braces preceded by non-space.
- # (No character except a space should come before a {)
+ # (No character except a space should come before a {)
if (/([^\s'])\{/) {
- print " $1\{:$fn:$.\n";
+ msg " $1\{:$fn:$.\n";
}
## Warn about multiple internal spaces.
#if (/[^\s,:]\s{2,}[^\s\\=]/) {
- # print " X X:$fn:$.\n";
+ # msg " X X:$fn:$.\n";
#}
## Warn about { with stuff after.
#s/\s+$//;
#if (/\{[^\}\\]+$/) {
- # print " {X:$fn:$.\n";
+ # msg " {X:$fn:$.\n";
#}
## Warn about function calls with space before parens.
- # (Don't put a space between the name of a function and its
- # arguments.)
+ # (Don't put a space between the name of a function and its
+ # arguments.)
if (/(\w+)\s\(([A-Z]*)/) {
if ($1 ne "if" and $1 ne "while" and $1 ne "for" and
$1 ne "switch" and $1 ne "return" and $1 ne "int" and
@@ -131,19 +142,19 @@ for $fn (@ARGV) {
$1 ne "void" and $1 ne "__attribute__" and $1 ne "op" and
$1 ne "size_t" and $1 ne "double" and
$1 ne "workqueue_reply_t") {
- print " fn ():$fn:$.\n";
+ msg " fn ():$fn:$.\n";
}
}
## Warn about functions not declared at start of line.
- # (When you're declaring functions, put "static" and "const"
- # and the return type on one line, and the function name at
- # the start of a new line.)
+ # (When you're declaring functions, put "static" and "const"
+ # and the return type on one line, and the function name at
+ # the start of a new line.)
if ($in_func_head ||
($fn !~ /\.h$/ && /^[a-zA-Z0-9_]/ &&
! /^(?:const |static )*(?:typedef|struct|union)[^\(]*$/ &&
! /= *\{$/ && ! /;$/)) {
if (/.\{$/){
- print "fn() {:$fn:$.\n";
+ msg "fn() {:$fn:$.\n";
$in_func_head = 0;
} elsif (/^\S[^\(]* +\**[a-zA-Z0-9_]+\(/) {
$in_func_head = -1; # started with tp fn
@@ -151,37 +162,38 @@ for $fn (@ARGV) {
$in_func_head = 0;
} elsif (/\{/) {
if ($in_func_head == -1) {
- print "tp fn():$fn:$.\n";
+ msg "tp fn():$fn:$.\n";
}
$in_func_head = 0;
}
}
- ## Check for forbidden functions except when they are
- # explicitly permitted
- if (/\bassert\(/ && not /assert OK/) {
- print "assert :$fn:$. (use tor_assert)\n";
- }
- if (/\bmemcmp\(/ && not /memcmp OK/) {
- print "memcmp :$fn:$. (use {tor,fast}_mem{eq,neq,cmp}\n";
- }
- # always forbidden.
- if (not / OVERRIDE /) {
- if (/\bstrcat\(/ or /\bstrcpy\(/ or /\bsprintf\(/) {
- print "$& :$fn:$.\n";
- }
- if (/\bmalloc\(/ or /\bfree\(/ or /\brealloc\(/ or
- /\bstrdup\(/ or /\bstrndup\(/ or /\bcalloc\(/) {
- print "$& :$fn:$. (use tor_malloc, tor_free, etc)\n";
- }
- }
+ ## Check for forbidden functions except when they are
+ # explicitly permitted
+ if (/\bassert\(/ && not /assert OK/) {
+ msg "assert :$fn:$. (use tor_assert)\n";
+ }
+ if (/\bmemcmp\(/ && not /memcmp OK/) {
+ msg "memcmp :$fn:$. (use {tor,fast}_mem{eq,neq,cmp}\n";
+ }
+ # always forbidden.
+ if (not /\ OVERRIDE\ /) {
+ if (/\bstrcat\(/ or /\bstrcpy\(/ or /\bsprintf\(/) {
+ msg "$& :$fn:$.\n";
+ }
+ if (/\bmalloc\(/ or /\bfree\(/ or /\brealloc\(/ or
+ /\bstrdup\(/ or /\bstrndup\(/ or /\bcalloc\(/) {
+ msg "$& :$fn:$. (use tor_malloc, tor_free, etc)\n";
+ }
+ }
}
}
## Warn if the file doesn't end with a blank line.
# (End each file with a single blank line.)
if (! $lastnil) {
- print " EOL\@EOF:$fn:$.\n";
+ msg " EOL\@EOF:$fn:$.\n";
}
close(F);
}
+exit $found;
diff --git a/src/common/address.c b/src/common/address.c
index 1bb0c077d1..c89e8797c6 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -2100,7 +2100,8 @@ get_interface_address,(int severity, uint32_t *addr))
}
/** Return true if we can tell that <b>name</b> is a canonical name for the
- * loopback address. */
+ * loopback address. Return true also for *.local hostnames, which are
+ * multicast DNS names for hosts on the local network. */
int
tor_addr_hostname_is_local(const char *name)
{
diff --git a/src/common/compat.c b/src/common/compat.c
index ebf05f59e1..97d1fafbbb 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -2390,15 +2390,6 @@ make_path_absolute(char *fname)
#endif
}
-#ifndef HAVE__NSGETENVIRON
-#ifndef HAVE_EXTERN_ENVIRON_DECLARED
-/* Some platforms declare environ under some circumstances, others don't. */
-#ifndef RUNNING_DOXYGEN
-extern char **environ;
-#endif
-#endif
-#endif
-
/** Return the current environment. This is a portable replacement for
* 'environ'. */
char **
diff --git a/src/common/crypto.c b/src/common/crypto.c
index fff516cc8e..60d77fcfaa 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1506,7 +1506,7 @@ crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out)
if (crypto_pk_get_digest(pk, digest)) {
return -1;
}
- if (crypto_digest(hashed_digest, digest, DIGEST_LEN)) {
+ if (crypto_digest(hashed_digest, digest, DIGEST_LEN) < 0) {
return -1;
}
base16_encode(fp_out, FINGERPRINT_LEN + 1, hashed_digest, DIGEST_LEN);
@@ -1700,19 +1700,21 @@ crypto_cipher_decrypt_with_iv(const char *key,
/** Compute the SHA1 digest of the <b>len</b> bytes on data stored in
* <b>m</b>. Write the DIGEST_LEN byte result into <b>digest</b>.
- * Return 0 on success, 1 on failure.
+ * Return 0 on success, -1 on failure.
*/
int
crypto_digest(char *digest, const char *m, size_t len)
{
tor_assert(m);
tor_assert(digest);
- return (SHA1((const unsigned char*)m,len,(unsigned char*)digest) == NULL);
+ if (SHA1((const unsigned char*)m,len,(unsigned char*)digest) == NULL)
+ return -1;
+ return 0;
}
/** Compute a 256-bit digest of <b>len</b> bytes in data stored in <b>m</b>,
* using the algorithm <b>algorithm</b>. Write the DIGEST_LEN256-byte result
- * into <b>digest</b>. Return 0 on success, 1 on failure. */
+ * into <b>digest</b>. Return 0 on success, -1 on failure. */
int
crypto_digest256(char *digest, const char *m, size_t len,
digest_algorithm_t algorithm)
@@ -1720,16 +1722,22 @@ crypto_digest256(char *digest, const char *m, size_t len,
tor_assert(m);
tor_assert(digest);
tor_assert(algorithm == DIGEST_SHA256 || algorithm == DIGEST_SHA3_256);
+
+ int ret = 0;
if (algorithm == DIGEST_SHA256)
- return (SHA256((const uint8_t*)m,len,(uint8_t*)digest) == NULL);
+ ret = (SHA256((const uint8_t*)m,len,(uint8_t*)digest) != NULL);
else
- return (sha3_256((uint8_t *)digest, DIGEST256_LEN,(const uint8_t *)m, len)
- == -1);
+ ret = (sha3_256((uint8_t *)digest, DIGEST256_LEN,(const uint8_t *)m, len)
+ > -1);
+
+ if (!ret)
+ return -1;
+ return 0;
}
/** Compute a 512-bit digest of <b>len</b> bytes in data stored in <b>m</b>,
* using the algorithm <b>algorithm</b>. Write the DIGEST_LEN512-byte result
- * into <b>digest</b>. Return 0 on success, 1 on failure. */
+ * into <b>digest</b>. Return 0 on success, -1 on failure. */
int
crypto_digest512(char *digest, const char *m, size_t len,
digest_algorithm_t algorithm)
@@ -1737,12 +1745,18 @@ crypto_digest512(char *digest, const char *m, size_t len,
tor_assert(m);
tor_assert(digest);
tor_assert(algorithm == DIGEST_SHA512 || algorithm == DIGEST_SHA3_512);
+
+ int ret = 0;
if (algorithm == DIGEST_SHA512)
- return (SHA512((const unsigned char*)m,len,(unsigned char*)digest)
- == NULL);
+ ret = (SHA512((const unsigned char*)m,len,(unsigned char*)digest)
+ != NULL);
else
- return (sha3_512((uint8_t*)digest, DIGEST512_LEN, (const uint8_t*)m, len)
- == -1);
+ ret = (sha3_512((uint8_t*)digest, DIGEST512_LEN, (const uint8_t*)m, len)
+ > -1);
+
+ if (!ret)
+ return -1;
+ return 0;
}
/** Set the common_digests_t in <b>ds_out</b> to contain every digest on the
@@ -2109,6 +2123,35 @@ crypto_hmac_sha256(char *hmac_out,
tor_assert(rv);
}
+/** Compute a MAC using SHA3-256 of <b>msg_len</b> bytes in <b>msg</b> using a
+ * <b>key</b> of length <b>key_len</b> and a <b>salt</b> of length
+ * <b>salt_len</b>. Store the result of <b>len_out</b> bytes in in
+ * <b>mac_out</b>. This function can't fail. */
+void
+crypto_mac_sha3_256(uint8_t *mac_out, size_t len_out,
+ const uint8_t *key, size_t key_len,
+ const uint8_t *msg, size_t msg_len)
+{
+ crypto_digest_t *digest;
+
+ const uint64_t key_len_netorder = tor_htonll(key_len);
+
+ tor_assert(mac_out);
+ tor_assert(key);
+ tor_assert(msg);
+
+ digest = crypto_digest256_new(DIGEST_SHA3_256);
+
+ /* Order matters here that is any subsystem using this function should
+ * expect this very precise ordering in the MAC construction. */
+ crypto_digest_add_bytes(digest, (const char *) &key_len_netorder,
+ sizeof(key_len_netorder));
+ crypto_digest_add_bytes(digest, (const char *) key, key_len);
+ crypto_digest_add_bytes(digest, (const char *) msg, msg_len);
+ crypto_digest_get_digest(digest, (char *) mac_out, len_out);
+ crypto_digest_free(digest);
+}
+
/** Internal state for a eXtendable-Output Function (XOF). */
struct crypto_xof_t {
keccak_state s;
@@ -2628,7 +2671,7 @@ crypto_expand_key_material_TAP(const uint8_t *key_in, size_t key_in_len,
for (cp = key_out, i=0; cp < key_out+key_out_len;
++i, cp += DIGEST_LEN) {
tmp[key_in_len] = i;
- if (crypto_digest((char*)digest, (const char *)tmp, key_in_len+1))
+ if (crypto_digest((char*)digest, (const char *)tmp, key_in_len+1) < 0)
goto exit;
memcpy(cp, digest, MIN(DIGEST_LEN, key_out_len-(cp-key_out)));
}
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 116e0a62fd..bf2fa06aaa 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -255,6 +255,10 @@ void crypto_digest_assign(crypto_digest_t *into,
void crypto_hmac_sha256(char *hmac_out,
const char *key, size_t key_len,
const char *msg, size_t msg_len);
+void crypto_mac_sha3_256(uint8_t *mac_out, size_t len_out,
+ const uint8_t *key, size_t key_len,
+ const uint8_t *msg, size_t msg_len);
+
crypto_xof_t *crypto_xof_new(void);
void crypto_xof_add_bytes(crypto_xof_t *xof, const uint8_t *data, size_t len);
void crypto_xof_squeeze_bytes(crypto_xof_t *xof, uint8_t *out, size_t len);
diff --git a/src/common/crypto_ed25519.c b/src/common/crypto_ed25519.c
index 30ed772274..8977e7a325 100644
--- a/src/common/crypto_ed25519.c
+++ b/src/common/crypto_ed25519.c
@@ -211,6 +211,14 @@ ed25519_keypair_generate(ed25519_keypair_t *keypair_out, int extra_strong)
return 0;
}
+/** Return true iff 'pubkey' is set to zero (eg to indicate that it is not
+ * set). */
+int
+ed25519_public_key_is_zero(const ed25519_public_key_t *pubkey)
+{
+ return tor_mem_is_zero((char*)pubkey->pubkey, ED25519_PUBKEY_LEN);
+}
+
/* Return a heap-allocated array that contains <b>msg</b> prefixed by the
* string <b>prefix_str</b>. Set <b>final_msg_len_out</b> to the size of the
* final array. If an error occured, return NULL. It's the resonsibility of the
@@ -267,11 +275,11 @@ ed25519_sign(ed25519_signature_t *signature_out,
* Like ed25519_sign(), but also prefix <b>msg</b> with <b>prefix_str</b>
* before signing. <b>prefix_str</b> must be a NUL-terminated string.
*/
-int
-ed25519_sign_prefixed(ed25519_signature_t *signature_out,
- const uint8_t *msg, size_t msg_len,
- const char *prefix_str,
- const ed25519_keypair_t *keypair)
+MOCK_IMPL(int,
+ed25519_sign_prefixed,(ed25519_signature_t *signature_out,
+ const uint8_t *msg, size_t msg_len,
+ const char *prefix_str,
+ const ed25519_keypair_t *keypair))
{
int retval;
size_t prefixed_msg_len;
@@ -620,6 +628,18 @@ ed25519_pubkey_eq(const ed25519_public_key_t *key1,
return tor_memeq(key1->pubkey, key2->pubkey, ED25519_PUBKEY_LEN);
}
+/**
+ * Set <b>dest</b> to contain the same key as <b>src</b>.
+ */
+void
+ed25519_pubkey_copy(ed25519_public_key_t *dest,
+ const ed25519_public_key_t *src)
+{
+ tor_assert(dest);
+ tor_assert(src);
+ memcpy(dest, src, sizeof(ed25519_public_key_t));
+}
+
/** Check whether the given Ed25519 implementation seems to be working.
* If so, return 0; otherwise return -1. */
static int
diff --git a/src/common/crypto_ed25519.h b/src/common/crypto_ed25519.h
index 31afc49ccc..56782cc12e 100644
--- a/src/common/crypto_ed25519.h
+++ b/src/common/crypto_ed25519.h
@@ -55,17 +55,20 @@ int ed25519_checksig(const ed25519_signature_t *signature,
const uint8_t *msg, size_t len,
const ed25519_public_key_t *pubkey);
-int
-ed25519_sign_prefixed(ed25519_signature_t *signature_out,
- const uint8_t *msg, size_t len,
- const char *prefix_str,
- const ed25519_keypair_t *keypair);
+MOCK_DECL(int,
+ed25519_sign_prefixed,(ed25519_signature_t *signature_out,
+ const uint8_t *msg, size_t len,
+ const char *prefix_str,
+ const ed25519_keypair_t *keypair));
+
int
ed25519_checksig_prefixed(const ed25519_signature_t *signature,
const uint8_t *msg, size_t len,
const char *prefix_str,
const ed25519_public_key_t *pubkey);
+int ed25519_public_key_is_zero(const ed25519_public_key_t *pubkey);
+
/**
* A collection of information necessary to check an Ed25519 signature. Used
* for batch verification.
@@ -118,6 +121,8 @@ void ed25519_keypair_free(ed25519_keypair_t *kp);
int ed25519_pubkey_eq(const ed25519_public_key_t *key1,
const ed25519_public_key_t *key2);
+void ed25519_pubkey_copy(ed25519_public_key_t *dest,
+ const ed25519_public_key_t *src);
void ed25519_set_impl_params(int use_donna);
void ed25519_init(void);
diff --git a/src/common/crypto_format.c b/src/common/crypto_format.c
index 2f6d847c83..483013ee68 100644
--- a/src/common/crypto_format.c
+++ b/src/common/crypto_format.c
@@ -161,6 +161,22 @@ curve25519_public_from_base64(curve25519_public_key_t *pkey,
}
}
+/** For convenience: Convert <b>pkey</b> to a statically allocated base64
+ * string and return it. Not threadsafe. Subsequent calls invalidate
+ * previous returns. */
+const char *
+ed25519_fmt(const ed25519_public_key_t *pkey)
+{
+ static char formatted[ED25519_BASE64_LEN+1];
+ if (pkey) {
+ int r = ed25519_public_to_base64(formatted, pkey);
+ tor_assert(!r);
+ } else {
+ strlcpy(formatted, "<null>", sizeof(formatted));
+ }
+ return formatted;
+}
+
/** Try to decode the string <b>input</b> into an ed25519 public key. On
* success, store the value in <b>pkey</b> and return 0. Otherwise return
* -1. */
diff --git a/src/common/crypto_format.h b/src/common/crypto_format.h
index 012e228cc4..86c29d319c 100644
--- a/src/common/crypto_format.h
+++ b/src/common/crypto_format.h
@@ -28,6 +28,7 @@ int ed25519_public_from_base64(ed25519_public_key_t *pkey,
const char *input);
int ed25519_public_to_base64(char *output,
const ed25519_public_key_t *pkey);
+const char *ed25519_fmt(const ed25519_public_key_t *pkey);
/* XXXX move these to crypto_format.h */
#define ED25519_SIG_BASE64_LEN 86
diff --git a/src/common/log.c b/src/common/log.c
index d031364c63..5f7151bf0c 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -1319,10 +1319,8 @@ parse_log_severity_config(const char **cfg_ptr,
if (got_an_unqualified_range > 1)
return -1;
- space = strchr(cfg, ' ');
+ space = find_whitespace(cfg);
dash = strchr(cfg, '-');
- if (!space)
- space = strchr(cfg, '\0');
if (dash && dash < space) {
sev_lo = tor_strndup(cfg, dash-cfg);
sev_hi = tor_strndup(dash+1, space-(dash+1));
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
index 24ba8a2997..ebc843e130 100644
--- a/src/common/sandbox.c
+++ b/src/common/sandbox.c
@@ -1579,13 +1579,14 @@ sandbox_add_addrinfo(const char *name)
void
sandbox_free_getaddrinfo_cache(void)
{
- cached_getaddrinfo_item_t **next, **item;
+ cached_getaddrinfo_item_t **next, **item, *this;
for (item = HT_START(getaddrinfo_cache, &getaddrinfo_cache);
item;
item = next) {
+ this = *item;
next = HT_NEXT_RMV(getaddrinfo_cache, &getaddrinfo_cache, item);
- cached_getaddrinfo_item_free(*item);
+ cached_getaddrinfo_item_free(this);
}
HT_CLEAR(getaddrinfo_cache, &getaddrinfo_cache);
diff --git a/src/common/timers.c b/src/common/timers.c
index 41b2008ac4..e1ad47b15b 100644
--- a/src/common/timers.c
+++ b/src/common/timers.c
@@ -255,6 +255,20 @@ timer_set_cb(tor_timer_t *t, timer_cb_fn_t cb, void *arg)
}
/**
+ * Set *<b>cb_out</b> (if provided) to this timer's callback function,
+ * and *<b>arg_out</b> (if provided) to this timer's callback argument.
+ */
+void
+timer_get_cb(const tor_timer_t *t,
+ timer_cb_fn_t *cb_out, void **arg_out)
+{
+ if (cb_out)
+ *cb_out = t->callback.cb;
+ if (arg_out)
+ *arg_out = t->callback.arg;
+}
+
+/**
* Schedule the timer t to fire at the current time plus a delay of
* <b>delay</b> microseconds. All times are relative to monotime_get().
*/
diff --git a/src/common/timers.h b/src/common/timers.h
index 5f918f8e15..c5246a3335 100644
--- a/src/common/timers.h
+++ b/src/common/timers.h
@@ -13,6 +13,8 @@ typedef void (*timer_cb_fn_t)(tor_timer_t *, void *,
const struct monotime_t *);
tor_timer_t *timer_new(timer_cb_fn_t cb, void *arg);
void timer_set_cb(tor_timer_t *t, timer_cb_fn_t cb, void *arg);
+void timer_get_cb(const tor_timer_t *t,
+ timer_cb_fn_t *cb_out, void **arg_out);
void timer_schedule(tor_timer_t *t, const struct timeval *delay);
void timer_disable(tor_timer_t *t);
void timer_free(tor_timer_t *t);
diff --git a/src/common/util.c b/src/common/util.c
index ec4ecf2d66..9d134c1bb2 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -2288,10 +2288,14 @@ check_private_dir,(const char *dirname, cpd_check_t check,
* permissions on the directory will be checked again below.*/
fd = open(sandbox_intern_string(dirname), O_NOFOLLOW);
- if (fd == -1)
+ if (fd == -1) {
+ log_warn(LD_FS, "Could not reopen recently created directory %s: %s",
+ dirname,
+ strerror(errno));
return -1;
- else
+ } else {
close(fd);
+ }
} else if (!(check & CPD_CHECK)) {
log_warn(LD_FS, "Directory %s does not exist.", dirname);
diff --git a/src/config/geoip b/src/config/geoip
index 966c440827..406fff09e7 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,4 +1,4 @@
-# Last updated based on November 3 2016 Maxmind GeoLite2 Country
+# Last updated based on December 7 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
@@ -150,7 +150,13 @@
39583744,39845887,RU
39845888,40370175,GB
40370176,40894463,DK
-40894464,41418751,IT
+40894464,40915719,IT
+40915720,40915735,SI
+40915736,40916671,IT
+40916672,40916687,SI
+40916688,41223311,IT
+41223312,41223319,SI
+41223320,41418751,IT
41418752,41943039,GB
41943040,42205183,DK
42205184,42467327,KZ
@@ -296,7 +302,7 @@
85394432,85394439,IT
85394944,85395199,HU
85395456,85395711,TR
-85395968,85396223,BE
+85395968,85396223,LU
85396480,85397503,ES
85398528,85398783,SA
85399552,85400063,FR
@@ -469,7 +475,9 @@
86448856,86448859,PT
86448860,86448951,FR
86448952,86448955,DE
-86448956,86449311,FR
+86448956,86449119,FR
+86449120,86449151,PT
+86449152,86449311,FR
86449312,86449343,ES
86449344,86449363,FR
86449364,86449367,DE
@@ -485,11 +493,7 @@
86449760,86449791,IE
86449792,86449883,FR
86449884,86449884,DE
-86449885,86450003,FR
-86450004,86450007,PT
-86450008,86450011,FR
-86450012,86450015,IE
-86450016,86450163,FR
+86449885,86450163,FR
86450164,86450167,GB
86450168,86450335,FR
86450336,86450339,GB
@@ -621,7 +625,8 @@
86470360,86470363,PT
86470364,86470727,FR
86470728,86470731,ES
-86470732,86470751,FR
+86470732,86470735,FR
+86470736,86470751,GB
86470752,86470767,PT
86470768,86470951,FR
86470952,86470959,GB
@@ -674,7 +679,9 @@
86497280,86499327,NL
86499328,86503423,FR
86503424,86505471,DE
-86505472,86507519,GB
+86505472,86505983,GB
+86505984,86506239,PK
+86506240,86507519,GB
86507520,86573055,ES
86573056,86638591,SA
86638592,86671359,RU
@@ -811,7 +818,13 @@
87755776,87756799,RU
87756800,87758847,ES
87758848,87761407,RU
-87761408,87818239,CZ
+87761408,87761663,CZ
+87761664,87761919,RU
+87761920,87762431,FR
+87762432,87762943,CZ
+87762944,87763967,KZ
+87763968,87766015,RU
+87766016,87818239,CZ
87818240,87883775,PL
87883776,87885823,IT
87885824,87889919,RU
@@ -839,7 +852,10 @@
87957760,87965695,GB
87965696,87967743,DE
87967744,87969791,IT
-87969792,87972863,IM
+87969792,87970815,IM
+87970816,87971071,GG
+87971072,87971839,IM
+87971840,87972863,IE
87972864,87973375,GI
87973376,87973887,IM
87973888,87981567,DE
@@ -920,9 +936,7 @@
90516992,90517503,NL
90517504,90518527,RU
90518528,90519551,NL
-90519552,90522623,RU
-90522624,90523647,NL
-90523648,90529791,RU
+90519552,90529791,RU
90529792,90533119,NL
90533120,90533375,DE
90533376,90533631,NL
@@ -1217,7 +1231,9 @@
92745208,92745215,ES
92745216,92745395,FR
92745396,92745399,GB
-92745400,92746415,FR
+92745400,92745663,FR
+92745664,92745695,PL
+92745696,92746415,FR
92746416,92746431,ES
92746432,92747547,FR
92747548,92747567,ES
@@ -1289,7 +1305,9 @@
92760324,92760327,DE
92760328,92760607,FR
92760608,92760639,GB
-92760640,92761375,FR
+92760640,92761151,FR
+92761152,92761215,PT
+92761216,92761375,FR
92761376,92761391,FI
92761392,92762055,FR
92762056,92762059,GB
@@ -1307,7 +1325,9 @@
92764224,92764287,ES
92764288,92764687,FR
92764688,92764703,ES
-92764704,92765423,FR
+92764704,92764911,FR
+92764912,92764927,GB
+92764928,92765423,FR
92765424,92765427,GB
92765428,92766015,FR
92766016,92766047,ES
@@ -1407,9 +1427,7 @@
92797164,92797167,PT
92797168,92797355,FR
92797356,92797359,DE
-92797360,92797727,FR
-92797728,92797743,DE
-92797744,92798975,FR
+92797360,92798975,FR
92798976,93323263,RU
93323264,93335551,CH
93335552,93339647,IL
@@ -1523,7 +1541,9 @@
94176768,94177535,SE
94177536,94177791,IT
94177792,94178047,DK
-94178048,94180351,SE
+94178048,94178303,SE
+94178304,94178559,IE
+94178560,94180351,SE
94180352,94180607,PT
94180608,94181631,SE
94181632,94181887,CZ
@@ -1818,7 +1838,9 @@
96759312,96759327,ES
96759328,96759735,FR
96759736,96759739,ES
-96759740,96761855,FR
+96759740,96760099,FR
+96760100,96760103,IE
+96760104,96761855,FR
96761856,96761871,BE
96761872,96762799,FR
96762800,96762815,BE
@@ -1836,7 +1858,9 @@
96764384,96764399,FI
96764400,96766063,FR
96766064,96766079,ES
-96766080,96767031,FR
+96766080,96766911,FR
+96766912,96766915,GB
+96766916,96767031,FR
96767032,96767035,GB
96767036,96767823,FR
96767824,96767839,BE
@@ -1862,11 +1886,15 @@
96773120,96773375,ES
96773376,96773743,FR
96773744,96773759,ES
-96773760,96774719,FR
+96773760,96774631,FR
+96774632,96774635,BE
+96774636,96774719,FR
96774720,96774751,ES
96774752,96775183,FR
96775184,96775199,PT
-96775200,96775551,FR
+96775200,96775491,FR
+96775492,96775495,ES
+96775496,96775551,FR
96775552,96775567,GB
96775568,96775999,FR
96776000,96776063,GB
@@ -1931,7 +1959,9 @@
96785408,96785411,NL
96785412,96785415,FR
96785416,96785423,NL
-96785424,96786431,FR
+96785424,96785603,FR
+96785604,96785607,PT
+96785608,96786431,FR
96786432,96786495,GB
96786496,96788143,FR
96788144,96788159,ES
@@ -2163,8 +2193,8 @@
100559424,100559439,GB
100559440,100559447,RO
100559448,100559455,GB
-100559456,100559487,RO
-100559488,100559519,GB
+100559456,100559471,RO
+100559472,100559519,GB
100559520,100559551,RO
100559552,100559615,GB
100559616,100559743,RO
@@ -2286,10 +2316,8 @@
214698240,214698255,VI
214698256,214698303,US
214698304,214698311,VI
-214698312,214778879,US
-214778880,214779135,PR
-214779136,214779391,US
-214779392,214781951,PR
+214698312,214777855,US
+214777856,214781951,PR
214781952,214787583,US
214787584,214788095,PR
214788096,219187465,US
@@ -2346,7 +2374,9 @@
224707744,224707775,IE
224707776,224708735,US
224708736,224708767,KR
-224708768,225050623,US
+224708768,224712959,US
+224712960,224712991,KR
+224712992,225050623,US
225050624,225051647,IN
225051648,225052159,SG
225052160,225052671,JP
@@ -2378,7 +2408,13 @@
225074688,225076735,US
225076736,225077247,NL
225077248,225077759,IE
-225077760,234881023,US
+225077760,225078783,US
+225078784,225079295,IE
+225079296,225079807,HK
+225079808,225080319,PR
+225080320,225443839,US
+225443840,225705983,JP
+225705984,234881023,US
234881024,234883071,CN
234883072,234884095,JP
234884096,234885119,CN
@@ -2440,7 +2476,6 @@
243269632,243270655,JP
243270656,243271679,NZ
243271680,243272703,TH
-243272704,243273727,NP
243273728,243277823,JP
243277824,243286015,AU
243286016,243302399,JP
@@ -2521,7 +2556,8 @@
288169472,288169983,CA
288169984,288176127,US
288176128,288178175,MX
-288178176,288196607,US
+288178176,288180223,CA
+288180224,288196607,US
288196608,288197119,CA
288197120,288197631,US
288197632,288198143,CA
@@ -2541,7 +2577,9 @@
288223232,288227327,CA
288227328,289406975,US
289406976,289554431,IE
-289554432,289624063,US
+289554432,289615871,US
+289615872,289619967,FR
+289619968,289624063,US
289624064,289628159,CH
289628160,289630207,US
289630208,289632255,SE
@@ -2631,15 +2669,25 @@
290310144,290312191,IN
290312192,290357247,US
290357248,290365439,IL
-290365440,290377727,US
+290365440,290374911,US
+290374912,290375167,GB
+290375168,290377727,US
290377728,290379775,GB
-290379776,290423807,US
+290379776,290383103,US
+290383104,290383359,NL
+290383360,290423807,US
290423808,290424831,SE
290424832,290586623,US
290586624,290652159,SG
-290652160,290873343,US
+290652160,290717183,US
+290717184,290717439,JP
+290717440,290737919,US
+290737920,290738175,SG
+290738176,290873343,US
290873344,290881535,AU
-290881536,290955263,US
+290881536,290913791,US
+290913792,290914047,AU
+290914048,290955263,US
290955264,290963455,CN
290963456,300646399,US
300646400,300650495,JP
@@ -2656,7 +2704,9 @@
301802496,301802751,GB
301802752,301803007,US
301803008,301803263,SE
-301803264,301806591,US
+301803264,301805567,US
+301805568,301805823,DE
+301805824,301806591,US
301806592,301806847,NL
301806848,301807103,US
301807104,301807359,DE
@@ -2668,7 +2718,9 @@
301810688,301810943,JP
301810944,301811199,US
301811200,301811455,JP
-301811456,301814271,US
+301811456,301812223,US
+301812224,301812479,JP
+301812480,301814271,US
301814272,301814527,SG
301814528,301814783,US
301814784,301815039,HK
@@ -2718,9 +2770,7 @@
385920512,385920767,NL
385920768,385930239,US
385930240,385931263,NL
-385931264,385934335,US
-385934336,385934847,NL
-385934848,385939967,US
+385931264,385939967,US
385939968,385940479,NL
385940480,385942527,US
385942528,385943551,NL
@@ -2728,9 +2778,7 @@
385950720,385951743,NL
385951744,385957887,US
385957888,385961983,NL
-385961984,385986559,US
-385986560,385990655,NL
-385990656,386002431,US
+385961984,386002431,US
386002432,386002943,NL
386002944,386003199,US
386003200,386003967,NL
@@ -2746,9 +2794,7 @@
386015232,386015487,NL
386015488,386020351,US
386020352,386021375,NL
-386021376,386025471,US
-386025472,386026495,NL
-386026496,386035711,US
+386021376,386035711,US
386035712,386039807,NL
386039808,386060287,US
386060288,386068479,NL
@@ -2779,8 +2825,8 @@
386245632,386247679,US
386247680,386248703,NL
386248704,386297855,US
-386297856,386310143,NL
-386310144,386383871,US
+386297856,386301951,NL
+386301952,386383871,US
386383872,386387967,NL
386387968,386400255,US
386400256,386404351,NL
@@ -2880,7 +2926,9 @@
388227072,388272127,US
388272128,388284415,NL
388284416,388288511,US
-388288512,388300799,NL
+388288512,388292607,NL
+388292608,388296703,US
+388296704,388300799,NL
388300800,388308991,US
388308992,388317183,NL
388317184,388325375,US
@@ -2889,8 +2937,8 @@
388341760,388345855,NL
388345856,388354047,US
388354048,388358143,NL
-388358144,388362239,US
-388362240,388386815,NL
+388358144,388366335,US
+388366336,388386815,NL
388386816,388390911,US
388390912,388392447,NL
388392448,388397055,US
@@ -2976,29 +3024,23 @@
389365760,389390335,US
389390336,389398527,NL
389398528,389402623,US
-389402624,389423103,NL
-389423104,389435391,US
+389402624,389419007,NL
+389419008,389435391,US
389435392,389455871,NL
389455872,389480447,US
389480448,389484543,NL
-389484544,389494783,US
-389494784,389495807,NL
+389484544,389495295,US
+389495296,389495807,NL
389495808,389509119,US
389509120,389513215,NL
389513216,389515263,US
389515264,389521407,NL
389521408,389537791,US
389537792,389541887,NL
-389541888,389599743,US
-389599744,389600450,NL
-389600451,389600451,US
-389600452,389600767,NL
-389600768,389602303,US
-389602304,389603327,NL
-389603328,389611519,US
+389541888,389611519,US
389611520,389619711,NL
-389619712,389627903,US
-389627904,389628927,NL
+389619712,389628415,US
+389628416,389628927,NL
389628928,389631999,US
389632000,389641215,NL
389641216,389701119,US
@@ -3011,20 +3053,16 @@
389767168,389775359,NL
389775360,389812223,US
389812224,389816319,NL
-389816320,389824511,US
-389824512,389825535,NL
-389825536,389825791,US
+389816320,389825791,US
389825792,389826559,NL
389826560,389852159,US
389852160,389853183,NL
389853184,389857279,US
389857280,389865471,NL
-389865472,389902335,US
-389902336,389903359,NL
-389903360,389923839,US
+389865472,389923839,US
389923840,389924351,NL
-389924352,389924607,US
-389924608,389925375,NL
+389924352,389924863,US
+389924864,389925375,NL
389925376,389926911,US
389926912,389936127,NL
389936128,389937151,US
@@ -3035,9 +3073,7 @@
389938688,389940223,NL
389940224,389941503,US
389941504,389941759,NL
-389941760,389942271,US
-389942272,389942783,NL
-389942784,389952767,US
+389941760,389952767,US
389952768,389953023,NL
389953024,389954815,US
389954816,389955071,NL
@@ -3083,14 +3119,14 @@
390148096,390165503,US
390165504,390166527,NL
390166528,390181887,US
-390181888,390182399,NL
-390182400,390184959,US
+390181888,390182143,NL
+390182144,390184959,US
390184960,390193151,NL
390193152,390205439,US
390205440,390209535,NL
390209536,390261247,US
-390261248,390262783,NL
-390262784,390276863,US
+390261248,390261759,NL
+390261760,390276863,US
390276864,390277375,NL
390277376,390277631,US
390277632,390278143,NL
@@ -3104,10 +3140,10 @@
390299648,390304767,NL
390304768,390332159,US
390332160,390332415,NL
-390332416,390694655,US
-390694656,390694911,NL
-390694912,390731775,US
-390731776,390732799,NL
+390332416,390731775,US
+390731776,390732031,NL
+390732032,390732287,US
+390732288,390732799,NL
390732800,390733823,US
390733824,390737919,NL
390737920,390746111,US
@@ -3116,13 +3152,7 @@
390767616,390768639,NL
390768640,390770687,US
390770688,390778879,NL
-390778880,390896639,US
-390896640,390897151,NL
-390897152,390943743,US
-390943744,390944767,NL
-390944768,390972159,US
-390972160,390972415,NL
-390972416,390972927,US
+390778880,390972927,US
390972928,390973951,NL
390973952,390975487,US
390975488,390976511,NL
@@ -3418,12 +3448,16 @@
397410304,397410559,CA
397475840,397476095,US
397541376,397672447,CA
-397672448,397672703,US
+397672448,397803519,US
397803520,397803775,CA
-397934592,397934847,US
+397869056,397869311,US
+397934592,398065663,US
398065664,398065919,CA
+398131200,398131455,US
398196736,398196991,KY
+398262272,398262527,US
398327808,398328063,PR
+398393344,398393599,US
398458880,398500351,US
398500352,398500863,NL
398500864,398532607,US
@@ -3448,10 +3482,8 @@
398779904,398781439,NL
398781440,398782463,US
398782464,398790655,NL
-398790656,398802431,US
-398802432,398802943,NL
-398802944,398850047,US
-398850048,398852095,NL
+398790656,398851071,US
+398851072,398852095,NL
398852096,398856191,US
398856192,398860287,NL
398860288,398868479,US
@@ -3487,7 +3519,9 @@
399355904,399365119,US
399365120,399366143,NL
399366144,399367167,US
-399367168,399388671,NL
+399367168,399378943,NL
+399378944,399380479,US
+399380480,399388671,NL
399388672,399396863,US
399396864,399406591,NL
399406592,399458303,US
@@ -3500,21 +3534,15 @@
399601664,399619583,NL
399619584,399621631,US
399621632,399639551,NL
-399639552,399719679,US
-399719680,399719935,NL
-399719936,399737855,US
-399737856,399738367,NL
-399738368,399738879,US
+399639552,399738879,US
399738880,399739647,NL
399739648,399740927,US
399740928,399749119,NL
399749120,399797247,US
399797248,399797759,NL
-399797760,399815679,US
-399815680,399817215,NL
-399817216,399818751,US
-399818752,399826943,NL
-399826944,399870975,US
+399797760,399818751,US
+399818752,399822847,NL
+399822848,399870975,US
399870976,399871999,NL
399872000,399908863,US
399908864,399919615,NL
@@ -3528,9 +3556,7 @@
399990784,399991295,NL
399991296,399998975,US
399998976,399999487,NL
-399999488,399999999,US
-400000000,400000511,NL
-400000512,400021247,US
+399999488,400021247,US
400021248,400021503,NL
400021504,400047103,US
400047104,400047615,NL
@@ -3546,9 +3572,7 @@
400121856,400122367,NL
400122368,400124927,US
400124928,400130047,NL
-400130048,400138239,US
-400138240,400143359,NL
-400143360,400144383,US
+400130048,400144383,US
400144384,400145407,NL
400145408,400154623,US
400154624,400162815,NL
@@ -3556,9 +3580,7 @@
400201216,400202751,NL
400202752,400203775,US
400203776,400211967,NL
-400211968,400248831,US
-400248832,400250367,NL
-400250368,400283647,US
+400211968,400283647,US
400283648,400284671,NL
400284672,400293887,US
400293888,400302079,NL
@@ -3595,7 +3617,9 @@
400884736,400884991,GB
400884992,400885103,US
400885104,400885111,GB
-400885112,400887551,US
+400885112,400887343,US
+400887344,400887351,SE
+400887352,400887551,US
400887552,400887807,GB
400887808,400888575,US
400888576,400888831,GB
@@ -3605,10 +3629,11 @@
400897536,400897791,GB
400897792,400911103,US
400911104,400911359,PA
-400911360,400911615,AU
+400911360,400911583,AU
+400911584,400911615,US
400911616,400911871,CR
-400911872,400912159,US
-400912160,400912255,SG
+400911872,400912191,US
+400912192,400912255,SG
400912256,400912319,US
400912320,400912383,SG
400912384,401114367,US
@@ -3670,7 +3695,9 @@
401378560,401386495,US
401386496,401387007,SE
401387008,401387263,RU
-401387264,401547263,US
+401387264,401400871,US
+401400872,401400879,NO
+401400880,401547263,US
401547264,401555455,CA
401555456,402096639,US
402096640,402096895,FR
@@ -3738,9 +3765,15 @@
402243584,402247679,CA
402247680,402249215,US
402249216,402249727,GB
-402249728,402260271,US
+402249728,402260031,US
+402260032,402260039,FI
+402260040,402260271,US
402260272,402260279,GB
-402260280,402279935,US
+402260280,402262455,US
+402262456,402262463,FI
+402262464,402266727,US
+402266728,402266735,NO
+402266736,402279935,US
402279936,402280063,CA
402280064,402366463,US
402366464,402374655,CA
@@ -3754,7 +3787,9 @@
402410240,402410751,TR
402410752,402411263,US
402411264,402411519,TR
-402411520,402550015,US
+402411520,402524263,US
+402524264,402524271,FI
+402524272,402550015,US
402550016,402550271,CA
402550272,402550783,GB
402550784,402591663,US
@@ -4394,10 +4429,8 @@
520953856,520962047,RU
520962048,520962310,IE
520962311,520962311,US
-520962312,520963407,IE
-520963408,520963408,US
-520963409,520963583,IE
-520963584,520963839,US
+520962312,520963327,IE
+520963328,520963839,US
520963840,520964354,IE
520964355,520964355,US
520964356,520965119,IE
@@ -4417,7 +4450,9 @@
521007104,521011199,BG
521011200,521014015,RO
521014016,521014271,NL
-521014272,521019135,RO
+521014272,521018367,RO
+521018368,521018623,IT
+521018624,521019135,RO
521019136,521019391,GB
521019392,521019647,NL
521019648,521019903,BG
@@ -4673,10 +4708,10 @@
523182080,523190271,IR
523190272,523192319,FI
523192320,523194367,ES
-523194368,523196415,DE
-523196416,523196927,AE
-523196928,523197183,BH
-523197184,523198463,AE
+523194368,523197183,DE
+523197184,523197951,AE
+523197952,523198207,DE
+523198208,523198463,AE
523198464,523202559,CZ
523202560,523223039,RU
523223040,523225087,AM
@@ -4797,15 +4832,15 @@
529817600,529818623,CZ
529818624,529826303,RU
529826304,529826815,CZ
-529826816,529827839,RU
-529827840,529828863,CZ
-529828864,529829887,RU
-529829888,529830911,CZ
-529830912,529838079,RU
+529826816,529829887,RU
+529829888,529830911,UZ
+529830912,529831935,RU
+529831936,529833983,SY
+529833984,529838079,RU
529838080,529842175,UA
529842176,529843199,ES
-529843200,529844223,RU
-529844224,529845247,CZ
+529843200,529843711,RU
+529843712,529845247,CZ
529845248,529846271,UZ
529846272,529847295,CZ
529847296,529848319,GB
@@ -4824,8 +4859,8 @@
529989632,530055167,NL
530055168,530120703,GR
530120704,530165759,CY
-530165760,530174207,GR
-530174208,530186239,CY
+530165760,530173951,GR
+530173952,530186239,CY
530186240,530251775,IL
530251776,530317311,TR
530317312,530579455,IT
@@ -4900,9 +4935,7 @@
531425280,531427327,FR
531427328,531427503,GB
531427504,531427511,IT
-531427512,531427703,GB
-531427704,531427711,IT
-531427712,531427967,GB
+531427512,531427967,GB
531427968,531427983,IT
531427984,531428191,GB
531428192,531428199,IT
@@ -4988,8 +5021,7 @@
532324352,532328447,NL
532328448,532330495,PS
532330496,532332543,CZ
-532332544,532340479,SK
-532340480,532340735,PL
+532332544,532340735,SK
532340736,532341503,GB
532341504,532341759,DE
532341760,532343967,GB
@@ -5367,10 +5399,12 @@
543686656,543694847,BR
543694848,544436771,US
544436772,544436775,CA
-544436776,586975999,US
-586976256,587006719,US
+544436776,586678271,US
+586678272,586975999,IE
+586976256,587006719,IE
587006720,587006975,GB
-587006976,597295103,US
+587006976,587202559,IE
+587202560,597295103,US
597295104,597360639,IN
597360640,597426175,US
597426176,597688319,DE
@@ -5408,7 +5442,7 @@
620703744,620704767,NZ
620704768,620705791,BD
620705792,620706815,HK
-620706816,620707839,PK
+620706816,620707839,AU
620707840,620708863,IN
620708864,620709887,HK
620709888,620711935,AU
@@ -5436,9 +5470,11 @@
620739584,620740607,BD
620740608,620741631,CN
620741632,620743679,IN
-620743680,620744703,HK
+620743680,620743935,HK
+620743936,620744191,AU
+620744192,620744703,HK
620744704,620745727,IN
-620745728,620746751,US
+620745728,620746751,AU
620746752,620747775,JP
620747776,620748799,PH
620748800,620751871,IN
@@ -5522,7 +5558,11 @@
621410304,621412351,IR
621412352,621414399,NL
621414400,621414655,HK
-621414656,621418495,NL
+621414656,621416447,NL
+621416448,621416703,GB
+621416704,621417471,NL
+621417472,621417727,DE
+621417728,621418495,NL
621418496,621419007,US
621419008,621427711,NL
621427712,621427967,GB
@@ -5737,9 +5777,7 @@
623822336,623822847,NL
623822848,623824895,GB
623824896,623826943,CZ
-623826944,623827967,UA
-623827968,623828991,BG
-623828992,623837183,UA
+623826944,623837183,UA
623837184,623902719,PL
623902720,623919103,CZ
623919104,623935487,NL
@@ -5881,9 +5919,7 @@
624657544,624657547,ES
624657548,624657615,FR
624657616,624657631,GB
-624657632,624657675,FR
-624657676,624657679,ES
-624657680,624657711,FR
+624657632,624657711,FR
624657712,624657715,ES
624657716,624657719,PT
624657720,624657831,FR
@@ -5970,7 +6006,9 @@
624665588,624665591,DE
624665592,624665611,FR
624665612,624665615,ES
-624665616,624666167,FR
+624665616,624665663,FR
+624665664,624665695,ES
+624665696,624666167,FR
624666168,624666175,GB
624666176,624666219,FR
624666220,624666223,DE
@@ -6127,9 +6165,7 @@
624683016,624683023,ES
624683024,624683031,FR
624683032,624683039,GB
-624683040,624683199,FR
-624683200,624683215,ES
-624683216,624683295,FR
+624683040,624683295,FR
624683296,624683311,DE
624683312,624683339,FR
624683340,624683343,ES
@@ -6159,7 +6195,9 @@
624684908,624684911,ES
624684912,624685071,FR
624685072,624685075,ES
-624685076,624685535,FR
+624685076,624685375,FR
+624685376,624685439,ES
+624685440,624685535,FR
624685536,624685539,PT
624685540,624685683,FR
624685684,624685687,FI
@@ -6279,7 +6317,10 @@
625516544,625518591,BE
625518592,625518847,NL
625518848,625519103,US
-625519104,625520639,NL
+625519104,625520135,NL
+625520136,625520447,US
+625520448,625520495,NL
+625520496,625520639,US
625520640,625522687,RU
625522688,625523455,SE
625523456,625523711,NO
@@ -6363,7 +6404,7 @@
628015104,628017151,FR
628017152,628019199,CH
628019200,628021247,UZ
-628021248,628023295,GB
+628021248,628023295,IE
628023296,628029439,RU
628029440,628031487,GB
628031488,628064255,MM
@@ -6561,7 +6602,8 @@
630808576,630810623,NL
630810624,630816767,CH
630816768,630817791,IR
-630817792,630818303,RO
+630817792,630818047,GB
+630818048,630818303,RO
630818304,630818431,CN
630818432,630818559,KR
630818560,630819327,RO
@@ -6792,25 +6834,19 @@
635187200,635191295,FR
635191296,635195391,RS
635195392,635197439,RU
-635197440,635199671,GB
-635199672,635199679,IT
-635199680,635199775,GB
+635197440,635199775,GB
635199776,635199783,IT
635199784,635200167,GB
635200168,635200175,IT
635200176,635200263,GB
635200264,635200271,IT
-635200272,635200319,GB
-635200320,635200327,IT
-635200328,635200335,GB
+635200272,635200335,GB
635200336,635200343,IT
635200344,635200431,GB
635200432,635200439,IT
635200440,635200631,GB
635200632,635200639,IT
-635200640,635200663,GB
-635200664,635200671,IT
-635200672,635200727,GB
+635200640,635200727,GB
635200728,635200735,IT
635200736,635200847,GB
635200848,635200855,IT
@@ -6887,7 +6923,8 @@
635858944,635860479,RU
635860480,635860991,NL
635860992,635863039,BE
-635863040,635864575,RU
+635863040,635864063,US
+635864064,635864575,RU
635864576,635864831,LB
635864832,635865087,ES
635865088,635865855,RU
@@ -7019,7 +7056,9 @@
637337088,637337599,RU
637337600,637403135,NO
637403136,637534207,IR
-637534208,639442943,US
+637534208,639242239,US
+639242240,639246335,CA
+639246336,639442943,US
639442944,639451135,CA
639451136,639459327,US
639459328,639467519,CA
@@ -7301,7 +7340,8 @@
675975168,675979263,IE
675979264,676168959,US
676168960,676169215,IE
-676169216,676175903,US
+676169216,676169471,HK
+676169472,676175903,US
676175904,676176191,HK
676176192,676176255,US
676176256,676176383,HK
@@ -7309,7 +7349,9 @@
676176640,676192767,US
676192768,676192895,HK
676192896,676193023,IE
-676193024,676249599,US
+676193024,676193535,US
+676193536,676193791,IE
+676193792,676249599,US
676249600,676265983,AU
676265984,676298751,US
676298752,676331519,IE
@@ -7335,7 +7377,29 @@
676841472,676843519,JP
676843520,676845567,AU
676845568,676848639,IN
-676848640,677380095,US
+676848640,677020095,US
+677020096,677020127,IE
+677020128,677020159,US
+677020160,677020191,NL
+677020192,677020479,US
+677020480,677020543,GB
+677020544,677020607,KR
+677020608,677021951,US
+677021952,677021983,JP
+677021984,677022079,US
+677022080,677022143,IN
+677022144,677022175,IE
+677022176,677022207,US
+677022208,677022239,NL
+677022240,677022303,CA
+677022304,677022335,US
+677022336,677022367,AU
+677022368,677022431,US
+677022432,677022463,IN
+677022464,677022527,US
+677022528,677022591,GB
+677022592,677022655,KR
+677022656,677380095,US
677380096,677380127,AU
677380128,677380159,IE
677380160,677380191,NL
@@ -7627,17 +7691,15 @@
677739520,677739775,NL
677739776,677740031,IE
677740032,677740543,FI
-677740544,677773311,US
-677773312,677774335,NL
+677740544,677774335,US
677774336,677776383,BR
-677776384,677781503,NL
+677776384,677781503,US
677781504,677781615,CL
-677781616,677781799,NL
+677781616,677781799,US
677781800,677781975,CL
-677781976,677784575,NL
-677784576,677785599,US
-677785600,677806079,NL
-677806080,677838847,US
+677781976,677784575,US
+677784576,677785599,PR
+677785600,677838847,US
677838848,677838863,NL
677838864,677838879,IE
677838880,677838895,FI
@@ -7847,7 +7909,12 @@
678203136,678203391,NL
678203392,678205183,US
678205184,678205439,NL
-678205440,678428671,US
+678205440,678205695,US
+678205696,678205951,KR
+678205952,678206463,CA
+678206464,678206719,KR
+678206720,678206975,IE
+678206976,678428671,US
678428672,678436863,IE
678436864,678437887,US
678437888,678438015,IE
@@ -8460,7 +8527,8 @@
702054400,702058495,ZA
702058496,702062591,BF
702062592,702066687,NG
-702066688,702070527,CM
+702066688,702067711,PL
+702067712,702070527,CM
702070528,702070783,RU
702070784,702074879,ZA
702074880,702076927,BW
@@ -8702,9 +8770,7 @@
711166592,711169311,JP
711169312,711169327,IN
711169328,711173119,JP
-711173120,711173210,SG
-711173211,711173211,ID
-711173212,711173375,SG
+711173120,711173375,SG
711173376,711196671,JP
711196672,711458815,CN
711458816,711983103,IN
@@ -8914,7 +8980,7 @@
736411648,736412671,NP
736412672,736413695,TH
736413696,736414719,MY
-736414720,736415743,CN
+736414720,736415743,HK
736415744,736416767,BD
736416768,736417791,SG
736417792,736418815,HK
@@ -8947,8 +9013,7 @@
736450560,736452607,IN
736452608,736453631,CN
736453632,736455679,IN
-736455680,736456703,CN
-736456704,736458751,HK
+736455680,736458751,HK
736458752,736459775,CN
736460800,736461823,SG
736461824,736462847,TH
@@ -8996,7 +9061,9 @@
736520192,736521215,IN
736521216,736521471,AU
736521472,736521727,PH
-736521728,736522239,AU
+736521728,736521747,AU
+736521748,736521748,US
+736521749,736522239,AU
736522240,736524287,HK
736524288,736525311,BD
736525312,736526335,CN
@@ -9271,7 +9338,8 @@
737503232,737505279,SG
737505280,737506303,AU
737506304,737507327,BD
-737507328,737508351,AU
+737507328,737507583,AU
+737507584,737508351,BD
737508352,737509375,MY
737509376,737510399,PK
737510400,737511423,AU
@@ -9386,7 +9454,6 @@
737714176,737715199,JP
737715200,737718271,HK
737718272,737727487,CN
-737727488,737728511,AU
737728512,737729535,JP
737729536,737730559,IN
737730560,737731583,HK
@@ -9449,8 +9516,7 @@
737811456,737814527,CN
737814528,737815551,IN
737815552,737816575,TW
-737816576,737816831,HK
-737816832,737817087,JP
+737816576,737817087,JP
737817088,737817599,HK
737817600,737818623,AU
737818624,737821695,HK
@@ -9520,7 +9586,8 @@
737905664,737906687,HK
737906688,737908735,IN
737908736,737909759,AU
-737909760,737911807,HK
+737909760,737910783,HK
+737910784,737911807,DE
737911808,737912703,SG
737912704,737912831,MY
737912832,737915903,IN
@@ -9641,8 +9708,8 @@
738135040,738136063,TW
738136064,738137087,CN
738137088,738138111,BD
-738138112,738138367,US
-738138368,738139135,NZ
+738138112,738138623,US
+738138624,738139135,NZ
738140160,738141183,AU
738141184,738142207,HK
738142208,738143231,JP
@@ -9700,7 +9767,9 @@
756023296,757015551,US
757015552,757015807,CA
757015808,757071871,US
-757071872,757071951,NL
+757071872,757071911,NL
+757071912,757071919,US
+757071920,757071951,NL
757071952,757071975,US
757071976,757071991,NL
757071992,757071999,US
@@ -9710,11 +9779,13 @@
757072128,757072383,US
757072384,757072639,NL
757072640,757072703,US
-757072704,757072719,NL
-757072720,757072727,US
+757072704,757072711,NL
+757072712,757072727,US
757072728,757072775,NL
-757072776,757072783,US
-757072784,757073007,NL
+757072776,757072791,US
+757072792,757072895,NL
+757072896,757072903,US
+757072904,757073007,NL
757073008,757073023,US
757073024,757073047,NL
757073048,757073055,US
@@ -9888,8 +9959,9 @@
757799424,757799935,US
757799936,757800959,CA
757800960,757809151,US
-757809664,757809919,MA
-757813248,757858303,US
+757809408,757809663,RO
+757809664,757809919,GB
+757817344,757858303,US
757858304,757956607,CA
757956608,757956863,HK
757956864,757957119,DE
@@ -9936,7 +10008,9 @@
758747392,758747647,LT
758747648,758750463,US
758750464,758750719,IN
-758750720,758761727,US
+758750720,758752199,US
+758752200,758752207,FI
+758752208,758761727,US
758761728,758762239,LT
758762240,758779903,US
758779904,758783999,CA
@@ -10011,7 +10085,23 @@
758889728,758889983,TN
758889984,758972415,US
758972416,758976511,CA
-758976512,758984703,US
+758976512,758981247,US
+758981248,758981375,GM
+758981376,758981887,US
+758981888,758982015,ML
+758982016,758982143,TV
+758982144,758982271,US
+758982272,758982399,KM
+758982400,758982527,US
+758982528,758982655,ST
+758982656,758982783,MV
+758982784,758982911,AR
+758982912,758983551,US
+758983552,758983679,MN
+758983680,758983807,US
+758983808,758983935,VA
+758983936,758984063,ZW
+758984064,758984703,US
758984704,758988799,CA
758988800,758994943,US
758994944,758996991,IN
@@ -10163,21 +10253,24 @@
759848960,759860735,CA
759860736,759860991,US
759860992,759955455,CA
-759955456,759975935,US
+759955456,759963647,US
+759963648,759965695,NL
+759965696,759975935,US
759975936,759977471,DE
759977472,759980031,US
-759980032,759983103,JP
-759983104,759983135,US
-759983136,759984127,JP
-759984128,759988223,US
-759988224,759990271,GB
-759990272,759992319,US
-759992320,759994367,SG
-759994368,760004607,US
-760004608,760006911,JP
-760006912,760007039,US
+759980032,759984127,JP
+759984128,759985151,AU
+759985152,759988223,US
+759988224,759990783,GB
+759990784,759992319,US
+759992320,759996415,SG
+759996416,760004607,US
+760004608,760006967,JP
+760006968,760007039,US
760007040,760007103,JP
-760007104,760111103,US
+760007104,760007167,US
+760007168,760011263,JP
+760011264,760111103,US
760111104,760119295,CA
760119296,760127487,US
760127488,760152063,CA
@@ -10501,7 +10594,7 @@
762815488,762816511,JP
762816512,762824703,IN
762824704,762825727,SG
-762825728,762827775,JP
+762825728,762826751,JP
762827776,762829823,VN
762829824,762830847,AU
762830848,762832895,IN
@@ -10705,7 +10798,7 @@
763194368,763196415,HK
763196416,763197439,IN
763197440,763199487,AU
-763199488,763201535,IN
+763200512,763201535,IN
763201536,763202559,CN
763202560,763207679,IN
763207680,763209727,HK
@@ -10832,6 +10925,18 @@
768606208,768868351,GH
768868352,769130495,ZM
769130496,769392639,MA
+769425408,769458175,ZA
+769458176,769459199,MU
+769462272,769463295,MU
+769463296,769464319,AO
+769465088,769465343,EG
+769465344,769466367,CI
+769466368,769474559,ZA
+769474560,769476607,SC
+769476608,769478655,UG
+769478656,769507327,ZA
+769507328,769509375,TZ
+769509376,769515519,ZA
769515520,769523711,BJ
769523712,769535999,ZA
769536000,769540095,GH
@@ -10847,15 +10952,7 @@
771237376,771237887,MY
771237888,771238911,IN
771238912,771239935,US
-771239936,771240959,AU
-771240960,771241214,US
-771241215,771241215,AU
-771241216,771241470,US
-771241471,771241471,AU
-771241472,771241726,US
-771241727,771241727,AU
-771241728,771241982,US
-771241983,771241983,AU
+771239936,771241983,AU
771241984,771245055,IN
771245056,771246079,HK
771246080,771247103,KR
@@ -10878,8 +10975,7 @@
771308544,771309567,HK
771309568,771310591,KR
771310592,771315711,IN
-771315712,771315967,US
-771315968,771316223,AU
+771315712,771316223,AU
771316224,771316479,KR
771316480,771316735,HK
771316736,771317759,CN
@@ -11003,7 +11099,13 @@
772014080,772145151,DE
772145152,772210687,ES
772210688,772276223,IE
-772276224,772284415,GB
+772276224,772282367,EE
+772282368,772282623,RU
+772282624,772282879,KZ
+772282880,772283391,RU
+772283392,772283647,ES
+772283648,772284159,RU
+772284160,772284415,UZ
772284416,772284927,RU
772284928,772285183,UA
772285184,772285439,UZ
@@ -11013,7 +11115,9 @@
772287772,772287772,NL
772287773,772339967,RU
772339968,772340223,NL
-772340224,772341247,RU
+772340224,772340735,RU
+772340736,772340991,KZ
+772340992,772341247,RU
772341248,772341503,US
772341504,772341759,RU
772341760,772407295,NO
@@ -11402,14 +11506,18 @@
773963776,773971967,ME
773971968,773980159,UA
773980160,773988351,GB
-773988352,774000823,ES
+773988352,773996543,ES
+773996544,773996799,TR
+773996800,774000823,ES
774000824,774000824,GB
774000825,774001663,ES
774001664,774002687,NL
774002688,774002815,ES
774002816,774002842,NL
774002844,774002943,NL
-774002944,774004735,ES
+774002944,774003199,ES
+774003200,774003711,TR
+774003712,774004735,ES
774004736,774012927,IR
774012928,774021119,RU
774021120,774029311,IR
@@ -11661,7 +11769,9 @@
778304306,778304306,SI
778304307,778305535,AL
778305536,778371071,IR
-778371072,778395647,GB
+778371072,778388893,GB
+778388894,778388894,DE
+778388895,778395647,GB
778395648,778436607,DE
778436608,778461183,RO
778461184,778461439,TR
@@ -11723,7 +11833,11 @@
778655936,778655999,IE
778656000,778656223,FR
778656224,778656255,PT
-778656256,778657399,FR
+778656256,778656575,FR
+778656576,778656607,PT
+778656608,778657335,FR
+778657336,778657339,IE
+778657340,778657399,FR
778657400,778657403,PT
778657404,778657471,FR
778657472,778657535,GB
@@ -11911,7 +12025,9 @@
778689008,778689015,FI
778689016,778689923,FR
778689924,778689927,DE
-778689928,778690735,FR
+778689928,778690655,FR
+778690656,778690687,ES
+778690688,778690735,FR
778690736,778690751,PT
778690752,778691975,FR
778691976,778691983,ES
@@ -11945,7 +12061,9 @@
778693428,778693431,ES
778693432,778693439,FR
778693440,778693455,GB
-778693456,778693759,FR
+778693456,778693663,FR
+778693664,778693679,ES
+778693680,778693759,FR
778693760,778693763,ES
778693764,778693967,FR
778693968,778693971,ES
@@ -12120,7 +12238,9 @@
781975552,782106623,NO
782106624,782254079,RU
782254080,782270463,UA
-782270464,782317567,RU
+782270464,782313471,RU
+782313472,782313727,UA
+782313728,782317567,RU
782317568,782317695,IN
782317696,782317823,CN
782317824,782317951,TR
@@ -12362,7 +12482,9 @@
784240640,784241151,SG
784241152,784242175,AU
784242176,784242687,HK
-784242688,784269311,GB
+784242688,784268799,GB
+784268800,784269055,US
+784269056,784269311,GB
784269312,784302079,BY
784302080,784334847,RU
784334848,784457727,FR
@@ -12935,8 +13057,7 @@
800522241,800522241,CA
800522242,803209215,US
803209216,803930111,CA
-803930112,804257791,US
-804257792,804716543,CA
+803930112,804716543,US
804716544,804782079,IN
804782080,804913151,CA
804913152,805240831,US
@@ -13072,7 +13193,9 @@
839009024,839009279,HU
839009280,839016191,US
839016192,839016447,CA
-839016448,839339607,US
+839016448,839078911,US
+839078912,839079935,DE
+839079936,839339607,US
839339610,839340031,US
839340032,839341055,ES
839341056,839343103,DE
@@ -13165,15 +13288,7 @@
855638016,855900159,GB
855900160,856031231,DE
856031232,856162303,GB
-856162304,856195071,US
-856195072,856199199,DE
-856199200,856199231,US
-856199232,856199295,DE
-856199296,856199423,US
-856199424,856199679,DE
-856199680,856203263,US
-856203264,856219647,DE
-856219648,856227839,US
+856162304,856227839,DE
856227840,856621055,GB
856621056,856637439,NL
856637440,856686591,FR
@@ -13246,7 +13361,9 @@
872304396,872304399,CZ
872304400,872304447,FR
872304448,872304511,ES
-872304512,872305439,FR
+872304512,872304831,FR
+872304832,872304895,ES
+872304896,872305439,FR
872305440,872305471,GB
872305472,872306183,FR
872306184,872306191,US
@@ -13254,7 +13371,9 @@
872306368,872306399,GB
872306400,872307263,FR
872307264,872307327,ES
-872307328,872308351,FR
+872307328,872307603,FR
+872307604,872307607,GB
+872307608,872308351,FR
872308352,872308371,GB
872308372,872308372,US
872308373,872308455,GB
@@ -13272,7 +13391,11 @@
872311247,872311249,BE
872311250,872311983,FR
872311984,872311999,FI
-872312000,872316797,FR
+872312000,872312511,FR
+872312512,872312575,IE
+872312576,872312703,FR
+872312704,872312767,ES
+872312768,872316797,FR
872316798,872316798,PT
872316799,872321183,FR
872321184,872321215,FI
@@ -13286,7 +13409,9 @@
872323552,872323583,GB
872323584,872323775,FR
872323776,872323839,ES
-872323840,872325567,FR
+872323840,872323936,FR
+872323937,872323937,DE
+872323938,872325567,FR
872325568,872325583,FI
872325584,872325707,FR
872325708,872325711,ES
@@ -13294,9 +13419,7 @@
872326152,872326155,CZ
872326156,872326175,FR
872326176,872326207,PT
-872326208,872326655,FR
-872326656,872326687,GB
-872326688,872327615,FR
+872326208,872327615,FR
872327616,872327679,ES
872327680,872327807,FR
872327808,872327811,FI
@@ -13368,7 +13491,9 @@
872356416,872357423,FR
872357424,872357439,PT
872357440,872357503,ES
-872357504,872363871,FR
+872357504,872363135,FR
+872363136,872363199,PL
+872363200,872363871,FR
872363872,872363903,PT
872363904,872364863,FR
872364864,872364927,NL
@@ -13424,9 +13549,7 @@
872386176,872386303,GB
872386304,872386335,FR
872386336,872386367,FI
-872386368,872386591,FR
-872386592,872386623,ES
-872386624,872387007,FR
+872386368,872387007,FR
872387008,872387071,IE
872387072,872388287,FR
872388288,872388351,ES
@@ -13475,7 +13598,8 @@
874381312,874512383,IE
874512384,875560959,US
875560960,875823103,IE
-875823104,876150783,US
+875823104,876085247,US
+876085248,876150783,GB
876150784,876347391,DE
876347392,876412927,CA
876412928,876478463,US
@@ -13504,7 +13628,8 @@
878464000,878465023,US
878465024,878466047,JP
878466048,878467071,CA
-878467072,878508031,US
+878467072,878468095,GB
+878468096,878508031,US
878508032,878509055,IN
878509056,878510079,US
878510080,878510335,IE
@@ -13526,18 +13651,18 @@
878578688,878578943,US
878578944,878579199,AU
878579200,878579455,CA
-878579456,878579967,US
+878579456,878579711,GB
+878579712,878579967,US
878579968,878580223,DE
-878580224,878580735,US
-878580736,878580991,KR
-878580992,878581247,BR
-878581248,878581759,US
+878580224,878581759,US
878581760,878582783,IE
-878582784,878591999,US
+878582784,878583807,US
+878583808,878591999,GB
878592000,878593023,CA
878593024,878596095,US
878596096,878604287,CA
-878604288,878625791,US
+878604288,878605311,GB
+878605312,878625791,US
878625792,878626047,IE
878626048,878626319,US
878626320,878626335,BR
@@ -13548,14 +13673,31 @@
878626400,878626415,SG
878626416,878626431,AU
878626432,878626447,CA
-878626448,878626815,US
+878626448,878626463,GB
+878626464,878626815,US
878626816,878627071,JP
878627072,878627839,US
878627840,878628351,DE
878628352,878628863,BR
878628864,878630911,US
878630912,878632959,IE
-878632960,878648831,US
+878632960,878639119,US
+878639120,878639135,IE
+878639136,878639151,SG
+878639152,878639167,BR
+878639168,878639183,AU
+878639184,878639199,JP
+878639200,878639215,US
+878639216,878639231,DE
+878639232,878639247,US
+878639248,878639263,IN
+878639264,878639279,US
+878639280,878639295,KR
+878639296,878639311,GB
+878639312,878639327,CA
+878639328,878639359,US
+878639360,878639375,CN
+878639376,878648831,US
878648832,878649343,JP
878649344,878649855,US
878649856,878650111,JP
@@ -13573,7 +13715,8 @@
878675968,878676735,BR
878676736,878678271,US
878678272,878679039,CA
-878679040,878690303,US
+878679040,878679807,GB
+878679808,878690303,US
878690304,878694399,KR
878694400,878695423,US
878695424,878696447,SG
@@ -13589,7 +13732,8 @@
878705152,878705407,CA
878705408,878705663,US
878705664,878705919,KR
-878705920,878706431,US
+878705920,878706175,GB
+878706176,878706431,US
878706432,878706447,BR
878706448,878706463,AU
878706464,878706479,SG
@@ -13638,7 +13782,8 @@
879829504,879829759,US
879829760,879829887,AU
879829888,879830015,IN
-879830016,879837183,US
+879830016,879830143,KR
+879830144,879837183,US
879837184,879837247,KR
879837248,879837311,HK
879837312,879837439,SG
@@ -13652,15 +13797,24 @@
879841536,879841663,US
879841664,879841727,AU
879841728,879841791,IN
-879841792,880543743,US
+879841792,879841855,KR
+879841856,880216831,US
+880216832,880217087,CA
+880217088,880269311,US
+880269312,880271359,JP
+880271360,880543743,US
880543744,880545791,CA
880545792,880553983,US
880553984,880556031,CA
-880556032,880558079,US
+880556032,880557567,US
+880557568,880557823,CA
+880557824,880558079,US
880558080,880574463,CA
880574464,880872191,US
880872192,880872447,CA
-880872448,880876543,US
+880872448,880874751,US
+880874752,880875007,CA
+880875008,880876543,US
880876544,880877567,CA
880878080,880878591,CA
880878592,880879233,US
@@ -13781,11 +13935,15 @@
888485888,888486143,HK
888486144,888487935,US
888487936,888488191,GB
-888488192,888569855,US
+888488192,888491007,US
+888491008,888491263,IN
+888491264,888569855,US
888569856,888573951,HK
888573952,888578047,US
888578048,888586239,JP
-888586240,889192447,US
+888586240,888750079,US
+888750080,888758271,IN
+888758272,889192447,US
889192448,897238054,DE
897238056,905969663,DE
905969664,910163967,US
@@ -14123,7 +14281,8 @@
962310144,962314239,BS
962314240,962318335,TT
962318336,962322431,PR
-962322432,962330623,FR
+962322432,962324479,AW
+962324480,962330623,FR
962330624,962334719,AF
962334720,962338815,BD
962338816,962342911,BT
@@ -14332,7 +14491,8 @@
999828992,999829311,MY
999829312,999829343,CN
999829344,999829375,MM
-999829376,999829407,HK
+999829376,999829383,TH
+999829384,999829407,HK
999829408,999829439,KR
999829440,999829471,VN
999829472,999829503,ID
@@ -14537,7 +14697,9 @@
1025296128,1025296639,AU
1025296640,1025296895,MY
1025296896,1025297407,SG
-1025297408,1025299455,AU
+1025297408,1025299199,AU
+1025299200,1025299263,IN
+1025299264,1025299455,AU
1025299456,1025299711,CN
1025299712,1025300735,AU
1025300736,1025300991,US
@@ -14930,7 +15092,9 @@
1044932304,1044932311,BE
1044932312,1044933499,GB
1044933500,1044933503,BE
-1044933504,1044935183,GB
+1044933504,1044935119,GB
+1044935120,1044935135,BE
+1044935136,1044935183,GB
1044935184,1044935191,BE
1044935192,1044935663,GB
1044935664,1044935671,BE
@@ -15002,7 +15166,9 @@
1045755904,1045757951,UA
1045757952,1045790719,LV
1045790720,1045798911,FR
-1045798912,1045889023,IT
+1045798912,1045824355,IT
+1045824356,1045824359,SI
+1045824360,1045889023,IT
1045889024,1045921791,ES
1045921792,1045954559,PL
1045954560,1045987327,BE
@@ -15067,7 +15233,9 @@
1046489472,1046489487,ES
1046489488,1046489503,GB
1046489504,1046489519,DE
-1046489520,1046492471,GB
+1046489520,1046489999,GB
+1046490000,1046490007,DE
+1046490008,1046492471,GB
1046492472,1046492479,DE
1046492480,1046492719,GB
1046492720,1046492727,DE
@@ -15155,7 +15323,9 @@
1046535624,1046535631,DE
1046535632,1046535665,GB
1046535666,1046535666,DE
-1046535667,1046536631,GB
+1046535667,1046536511,GB
+1046536512,1046536543,DE
+1046536544,1046536631,GB
1046536632,1046536639,DE
1046536640,1046537023,GB
1046537024,1046537039,DE
@@ -15186,7 +15356,8 @@
1046773760,1046781951,FR
1046781952,1046791167,GB
1046791168,1046792191,IT
-1046792192,1046794239,GB
+1046792192,1046793215,IN
+1046793216,1046794239,GB
1046794240,1046794495,US
1046794496,1046796287,GB
1046796288,1046797311,US
@@ -15241,10 +15412,51 @@
1047396352,1047461887,IT
1047461888,1047494655,DE
1047494656,1047527423,PL
-1047527424,1047535615,BE
+1047527424,1047529471,GB
+1047529472,1047535103,BE
+1047535104,1047535359,US
+1047535360,1047535615,BE
1047535616,1047551999,DE
1047552000,1047560191,RU
-1047560192,1047568383,DE
+1047560192,1047563431,DE
+1047563432,1047563435,CH
+1047563436,1047565279,DE
+1047565280,1047565311,CH
+1047565312,1047565343,DE
+1047565344,1047565359,CH
+1047565360,1047565839,DE
+1047565840,1047565887,CH
+1047565888,1047566435,DE
+1047566436,1047566439,CH
+1047566440,1047566451,DE
+1047566452,1047566459,CH
+1047566460,1047566519,DE
+1047566520,1047566527,CH
+1047566528,1047566531,DE
+1047566532,1047566535,CH
+1047566536,1047566543,DE
+1047566544,1047566547,CH
+1047566548,1047566967,DE
+1047566968,1047566971,CH
+1047566972,1047567015,DE
+1047567016,1047567019,CH
+1047567020,1047567027,DE
+1047567028,1047567031,CH
+1047567032,1047567143,DE
+1047567144,1047567147,CH
+1047567148,1047567151,DE
+1047567152,1047567159,CH
+1047567160,1047567359,DE
+1047567360,1047567375,CH
+1047567376,1047567467,DE
+1047567468,1047567471,CH
+1047567472,1047567475,DE
+1047567476,1047567483,CH
+1047567484,1047567823,DE
+1047567824,1047567839,CH
+1047567840,1047567903,DE
+1047567904,1047567935,CH
+1047567936,1047568383,DE
1047568384,1047576575,NL
1047576576,1047584767,HU
1047584768,1047592959,NL
@@ -15429,12 +15641,23 @@
1050673152,1050804223,FR
1050804224,1050869759,MK
1050869760,1050935295,NL
-1050938112,1050938367,ES
+1050938112,1050938623,ES
1050938880,1050939135,ES
+1050939136,1050939647,BR
+1050939648,1050940159,MX
+1050940160,1050940671,GB
+1050940672,1050940927,HK
1050941696,1050941951,DE
+1050941952,1050942207,US
+1050942464,1050942719,US
+1050942720,1050942975,BR
1050943232,1050943487,ES
1050945536,1050945791,ES
1050948608,1050948863,ES
+1050959872,1050961919,ES
+1050961920,1050962943,MX
+1050962944,1050963967,GB
+1050963968,1050964991,ES
1050968064,1051000831,GB
1051000832,1051017215,RU
1051017216,1051033599,NL
@@ -15523,9 +15746,7 @@
1052151808,1052153855,PL
1052155904,1052157951,UA
1052157952,1052159999,DK
-1052160000,1052160703,LU
-1052160704,1052161215,BE
-1052161216,1052162047,LU
+1052160000,1052162047,LU
1052162048,1052164095,CH
1052164096,1052168191,RU
1052168192,1052170239,PL
@@ -16426,7 +16647,9 @@
1053933568,1053949951,CZ
1053949952,1053968188,FR
1053968189,1053968189,PT
-1053968190,1054015487,FR
+1053968190,1053985279,FR
+1053985280,1053985535,GB
+1053985536,1054015487,FR
1054015488,1054089215,IT
1054089216,1054097407,GE
1054097408,1054105599,NL
@@ -16641,8 +16864,8 @@
1065373696,1065493759,US
1065493760,1065494015,GB
1065494016,1065506047,US
-1065506048,1065506303,GB
-1065506304,1065519247,US
+1065506048,1065506559,GB
+1065506560,1065519247,US
1065519248,1065519263,IN
1065519264,1065519303,US
1065519304,1065519311,IN
@@ -16654,8 +16877,10 @@
1065525792,1065525807,IN
1065525808,1065526015,US
1065526016,1065526271,GB
-1065526272,1065533439,US
-1065533440,1065537535,GB
+1065526272,1065529343,US
+1065529344,1065530879,GB
+1065530880,1065531391,US
+1065531392,1065537535,GB
1065537536,1065539583,US
1065539584,1065539839,GB
1065539840,1065547775,US
@@ -16668,8 +16893,8 @@
1065873408,1065877503,PR
1065877504,1065906175,US
1065906176,1065908223,KY
-1065908224,1066214399,US
-1066214400,1066214911,NL
+1065908224,1066213887,US
+1066213888,1066214911,NL
1066214912,1066254975,US
1066254976,1066255103,GB
1066255104,1066311679,US
@@ -16872,7 +17097,9 @@
1073044992,1073045247,US
1073045248,1073045503,PR
1073045504,1073047551,CO
-1073047552,1073049599,US
+1073047552,1073049064,US
+1073049065,1073049065,CW
+1073049066,1073049599,US
1073049600,1073053695,BS
1073053696,1073116159,US
1073116160,1073117183,GB
@@ -17017,9 +17244,7 @@
1074757632,1074765823,CA
1074765824,1074777343,US
1074777344,1074777599,AU
-1074777600,1074871591,US
-1074871592,1074871599,CA
-1074871600,1074871807,US
+1074777600,1074871807,US
1074871808,1074872319,CA
1074872320,1074937855,US
1074937856,1074946047,CA
@@ -17419,7 +17644,8 @@
1080024320,1080024575,CA
1080024576,1080033279,US
1080033280,1080164351,KY
-1080164352,1080168447,CA
+1080164352,1080165375,US
+1080165376,1080168447,CA
1080168448,1080172543,US
1080172544,1080176639,CA
1080176640,1080197119,US
@@ -17700,8 +17926,8 @@
1089151488,1089152255,US
1089152256,1089152511,NL
1089152512,1089153279,US
-1089153280,1089153280,SG
-1089153281,1089167359,US
+1089153280,1089153535,SG
+1089153536,1089167359,US
1089167360,1089171455,CA
1089171456,1089183231,US
1089183232,1089183487,GB
@@ -17887,11 +18113,7 @@
1093967872,1093976063,HK
1093976064,1093984255,US
1093984256,1093986303,IE
-1093986304,1093990399,US
-1093990400,1093992447,IE
-1093992448,1094059327,US
-1094059328,1094059391,SG
-1094059392,1094064127,US
+1093986304,1094064127,US
1094064128,1094064575,IE
1094064576,1094064639,US
1094064640,1094064799,IE
@@ -17908,8 +18130,7 @@
1094066912,1094066975,IE
1094066976,1094067199,US
1094067200,1094068223,NL
-1094068224,1094068479,SG
-1094068480,1094074879,US
+1094068224,1094074879,US
1094074880,1094075167,BR
1094075168,1094077439,US
1094077440,1094077695,PR
@@ -18011,7 +18232,9 @@
1098178384,1098178391,CA
1098178392,1098891623,US
1098891624,1098891631,AU
-1098891632,1100505127,US
+1098891632,1098892255,US
+1098892256,1098892263,AU
+1098892264,1100505127,US
1100505128,1100505135,CA
1100505136,1100560647,US
1100560648,1100560655,TR
@@ -18114,7 +18337,9 @@
1104168960,1104265215,US
1104265216,1104265727,PH
1104265728,1104301567,US
-1104301568,1104301823,PR
+1104301568,1104301663,PR
+1104301664,1104301695,US
+1104301696,1104301823,PR
1104301824,1104842751,US
1104842752,1104844799,PR
1104844800,1104899839,US
@@ -18324,7 +18549,8 @@
1113657344,1113661439,CA
1113661440,1113669631,US
1113669632,1113677823,CA
-1113677824,1113718783,US
+1113677824,1113681919,US
+1113686016,1113718783,US
1113718784,1113743359,DO
1113743360,1113854207,US
1113854208,1113854463,CA
@@ -18547,92 +18773,47 @@
1119109120,1119109887,CA
1119109888,1119110143,US
1119110144,1119111167,CA
-1119111168,1119166863,US
+1119111168,1119166723,US
+1119166848,1119166855,US
1119166864,1119166871,HT
-1119166872,1119167079,US
+1119166952,1119166959,US
+1119166976,1119167007,US
+1119167072,1119167079,US
1119167080,1119167087,CA
-1119167088,1119167495,US
+1119167088,1119167095,US
+1119167200,1119167215,US
+1119167232,1119167495,US
1119167496,1119167503,CA
-1119167504,1119168023,US
+1119167512,1119167519,US
+1119167536,1119167543,US
+1119167552,1119167999,US
1119168024,1119168031,CA
-1119168032,1119171383,US
+1119168032,1119168047,US
+1119168112,1119168119,US
+1119168128,1119170559,US
+1119171072,1119171327,US
+1119171360,1119171383,US
1119171384,1119171391,CA
-1119171392,1119172199,US
+1119171392,1119171583,US
+1119172056,1119172063,US
+1119172096,1119172159,US
+1119172192,1119172199,US
1119172200,1119172207,CA
-1119172208,1119172895,US
-1119172896,1119172903,MX
-1119172904,1119172911,US
-1119172912,1119172991,MX
-1119172992,1119173007,US
-1119173008,1119173095,MX
-1119173096,1119173119,US
-1119173120,1119173143,MX
-1119173144,1119173151,US
-1119173152,1119173207,MX
-1119173208,1119173215,US
-1119173216,1119173223,MX
-1119173224,1119173231,US
-1119173232,1119173263,MX
-1119173264,1119173279,US
-1119173280,1119173295,MX
-1119173296,1119173311,US
-1119173312,1119173343,MX
-1119173344,1119173351,US
-1119173352,1119173367,MX
-1119173368,1119173375,US
-1119173376,1119173399,MX
-1119173400,1119173407,US
-1119173408,1119173471,MX
-1119173472,1119173495,US
-1119173496,1119173527,MX
-1119173528,1119173535,US
-1119173536,1119173543,MX
-1119173544,1119173551,US
-1119173552,1119173575,MX
-1119173576,1119173591,US
-1119173592,1119173655,MX
-1119173656,1119173671,US
-1119173672,1119173679,MX
-1119173680,1119173719,US
-1119173720,1119173727,MX
-1119173728,1119173735,US
-1119173736,1119173751,MX
-1119173752,1119173767,US
-1119173768,1119173775,MX
-1119173776,1119173799,US
-1119173800,1119173815,MX
-1119173816,1119173831,US
-1119173832,1119173847,MX
-1119173848,1119173863,US
-1119173864,1119173871,MX
-1119173872,1119173935,US
-1119173936,1119173983,MX
-1119173984,1119173999,US
-1119174000,1119174007,MX
-1119174008,1119174023,US
+1119172256,1119172263,US
+1119172352,1119172863,US
+1119172864,1119174015,MX
1119174024,1119174031,GT
1119174032,1119174039,MX
-1119174040,1119174047,US
-1119174048,1119174119,MX
-1119174120,1119174127,US
-1119174128,1119174199,MX
-1119174200,1119174215,US
-1119174216,1119174247,GT
-1119174248,1119174287,US
-1119174288,1119174319,MX
-1119174320,1119174343,US
+1119174048,1119174207,MX
+1119174208,1119174271,GT
+1119174272,1119174335,MX
1119174344,1119174351,GT
1119174352,1119174359,MX
-1119174360,1119174399,US
1119174400,1119174407,GT
1119174408,1119174415,MX
-1119174416,1119174423,US
-1119174424,1119174471,MX
-1119174472,1119174479,US
-1119174480,1119174511,MX
-1119174512,1119174535,US
+1119174424,1119174527,MX
1119174536,1119174543,MX
-1119174544,1119199231,US
+1119174656,1119199231,US
1119199232,1119207169,MN
1119207170,1119207170,US
1119207171,1119207423,MN
@@ -18899,13 +19080,7 @@
1123801088,1123801343,RU
1123801344,1123848191,US
1123848192,1123852287,CA
-1123852288,1123870063,US
-1123870064,1123870071,GB
-1123870072,1123870295,US
-1123870296,1123870303,HK
-1123870304,1123870343,US
-1123870344,1123870351,HK
-1123870352,1123950591,US
+1123852288,1123950591,US
1123950592,1123958783,CA
1123958784,1125064703,US
1125064704,1125065215,GB
@@ -19014,9 +19189,7 @@
1137376356,1137376356,CA
1137376357,1137378815,US
1137378816,1137379071,UA
-1137379072,1137384191,US
-1137384192,1137384447,PK
-1137384448,1137426431,US
+1137379072,1137426431,US
1137426432,1137442815,PR
1137442816,1137491967,US
1137491968,1137508351,CA
@@ -19024,9 +19197,7 @@
1137524736,1137541119,CA
1137541120,1137623039,US
1137623040,1137639423,PR
-1137639424,1137680959,US
-1137680960,1137680975,UA
-1137680976,1137681583,US
+1137639424,1137681583,US
1137681584,1137681599,AR
1137681600,1137704959,US
1137704960,1137712383,CA
@@ -19058,15 +19229,11 @@
1137967104,1137983487,US
1137983488,1137991679,CA
1137991680,1138049023,US
-1138049024,1138053631,CA
-1138053632,1138053887,US
-1138053888,1138061311,CA
+1138049024,1138061311,CA
1138061312,1138069503,US
1138069504,1138073599,JM
1138073600,1138163711,US
-1138163712,1138166175,CA
-1138166176,1138166183,US
-1138166184,1138166919,CA
+1138163712,1138166919,CA
1138166920,1138166927,SA
1138166928,1138166935,CA
1138166936,1138166943,SA
@@ -19362,7 +19529,9 @@
1160563200,1160563711,MP
1160563712,1160609791,US
1160609792,1160610815,MX
-1160610816,1160665599,US
+1160610816,1160662015,US
+1160662016,1160662271,CN
+1160662272,1160665599,US
1160665600,1160665855,CH
1160665856,1160667135,US
1160667136,1160675327,CA
@@ -19412,7 +19581,9 @@
1161426944,1161427967,AI
1161427968,1161428223,AG
1161428224,1161428991,KN
-1161428992,1161430079,US
+1161428992,1161429711,US
+1161429712,1161429719,FI
+1161429720,1161430079,US
1161430080,1161430111,BG
1161430112,1161432063,US
1161432064,1161432126,CA
@@ -19426,32 +19597,26 @@
1161617408,1161625599,CA
1161625600,1161631623,US
1161631624,1161631631,KW
-1161631632,1161649407,US
+1161631632,1161631839,US
+1161631840,1161631871,AT
+1161631872,1161632071,US
+1161632072,1161632075,AT
+1161632076,1161649407,US
1161649408,1161649663,AR
1161649664,1161764863,US
1161764864,1161773055,CA
1161773056,1161777151,SZ
1161777152,1161818111,US
1161818112,1161822207,CA
-1161822208,1161831257,US
-1161831258,1161831258,DE
-1161831259,1161831305,US
-1161831306,1161831306,DE
-1161831307,1161833967,US
+1161822208,1161833967,US
1161833968,1161833975,DE
1161833976,1161834979,US
1161834980,1161834980,BZ
1161834981,1161835058,US
1161835059,1161835059,BZ
-1161835060,1161835153,US
-1161835154,1161835154,BZ
-1161835155,1161835230,US
+1161835060,1161835230,US
1161835231,1161835231,PH
-1161835232,1161835475,US
-1161835476,1161835476,BZ
-1161835477,1161835948,US
-1161835949,1161835949,BZ
-1161835950,1161837174,US
+1161835232,1161837174,US
1161837175,1161837175,BZ
1161837176,1161837567,US
1161837568,1161837823,JP
@@ -19778,9 +19943,7 @@
1176620448,1176620479,CA
1176620480,1176621311,US
1176621312,1176621567,CA
-1176621568,1176622079,US
-1176622080,1176622335,GB
-1176622336,1176622591,US
+1176621568,1176622591,US
1176622592,1176623103,CA
1176623104,1176623871,US
1176623872,1176625151,CA
@@ -19788,9 +19951,7 @@
1176626112,1176626127,CA
1176626128,1176630271,US
1176630272,1176631295,CA
-1176631296,1176702975,US
-1176702976,1176707071,CA
-1176707072,1176731647,US
+1176631296,1176731647,US
1176731648,1176735743,PR
1176735744,1176736767,US
1176736768,1176737023,CR
@@ -19821,9 +19982,7 @@
1176897048,1176897055,US
1176897056,1176900735,CA
1176900736,1176900743,US
-1176900744,1176904767,CA
-1176904768,1176904775,US
-1176904776,1176904871,CA
+1176900744,1176904871,CA
1176904872,1176904879,US
1176904880,1176917831,CA
1176917832,1176917839,AU
@@ -19853,9 +20012,7 @@
1177165088,1177354239,US
1177354240,1177419775,PR
1177419776,1177550847,US
-1177550848,1177606655,CA
-1177606656,1177606911,US
-1177606912,1178075135,CA
+1177550848,1178075135,CA
1178075136,1178599423,US
1178599424,1179910143,CA
1179910144,1189672191,US
@@ -19886,9 +20043,7 @@
1208107008,1208590335,US
1208590336,1208598527,CA
1208598528,1208647679,US
-1208647680,1208657775,CA
-1208657776,1208657783,TR
-1208657784,1208659967,CA
+1208647680,1208659967,CA
1208659968,1208721407,US
1208721408,1208729599,CA
1208729600,1208770559,US
@@ -19988,9 +20143,7 @@
1210420480,1210421503,US
1210421504,1210421551,CA
1210421552,1210449919,US
-1210449920,1210503167,CA
-1210503168,1210503423,US
-1210503424,1210545471,CA
+1210449920,1210545471,CA
1210545472,1210545503,US
1210545504,1210557823,CA
1210557824,1210558079,US
@@ -20079,13 +20232,13 @@
1219256320,1219264511,CA
1219264512,1219272703,US
1219272704,1219276799,CA
-1219276800,1219295295,US
+1219276800,1219290623,US
+1219290624,1219290751,AU
+1219290752,1219295295,US
1219295296,1219295359,GR
1219295360,1224091903,US
1224091904,1224092159,NL
-1224092160,1224093183,US
-1224093184,1224093439,NL
-1224093440,1224094463,US
+1224092160,1224094463,US
1224094464,1224094719,NL
1224094720,1224095231,US
1224095232,1224095487,NL
@@ -20117,9 +20270,7 @@
1224200192,1224200959,NL
1224200960,1224201215,US
1224201216,1224202239,NL
-1224202240,1224207359,US
-1224207360,1224207871,NL
-1224207872,1224210431,US
+1224202240,1224210431,US
1224210432,1224212479,NL
1224212480,1224329215,US
1224329216,1224329471,CA
@@ -20601,8 +20752,8 @@
1280126976,1280131071,JP
1280131072,1280139263,CA
1280139264,1280242175,US
-1280242176,1280242431,CA
-1280242432,1291845631,US
+1280242176,1280242687,CA
+1280242688,1291845631,US
1291845632,1292894207,DE
1292894208,1293156351,NO
1293156352,1293549567,DE
@@ -20624,7 +20775,9 @@
1294467072,1294499839,RU
1294499840,1294532607,NO
1294532608,1294598143,RU
-1294598144,1294630911,IT
+1294598144,1294602239,IT
+1294602240,1294606335,IR
+1294606336,1294630911,IT
1294630912,1294663679,LB
1294663680,1294696447,IT
1294696448,1294729215,RU
@@ -20777,9 +20930,7 @@
1296433152,1296465919,BG
1296465920,1296469687,LU
1296469688,1296469691,BF
-1296469692,1296469703,LU
-1296469704,1296469711,AF
-1296469712,1296469759,LU
+1296469692,1296469759,LU
1296469760,1296479743,FR
1296479744,1296482303,NO
1296482304,1296498687,FR
@@ -21114,7 +21265,8 @@
1298694144,1298710527,US
1298710528,1298726911,CZ
1298726912,1298743295,RS
-1298743296,1298759679,FI
+1298743296,1298757631,FI
+1298757632,1298759679,FJ
1298759680,1298776063,RU
1298776064,1298792447,SE
1298792448,1298825215,RU
@@ -21151,9 +21303,7 @@
1299103744,1299120127,NO
1299120128,1299136511,SI
1299136512,1299169279,HU
-1299169280,1299171839,GB
-1299171840,1299172351,US
-1299172352,1299172863,GB
+1299169280,1299172863,GB
1299172864,1299173375,NL
1299173376,1299174399,FR
1299174400,1299178495,GB
@@ -21285,9 +21435,7 @@
1307467776,1307469823,RU
1307469824,1307475967,IR
1307475968,1307484159,RU
-1307484160,1307488767,GB
-1307488768,1307489023,IE
-1307489024,1307492351,GB
+1307484160,1307492351,GB
1307492352,1307500543,BA
1307500544,1307508735,RU
1307508736,1307516927,BA
@@ -21608,7 +21756,6 @@
1311271936,1311272447,KZ
1311272448,1311272703,NL
1311272704,1311272959,IE
-1311272960,1311275007,GB
1311275008,1311277055,FR
1311277056,1311279103,IT
1311279104,1311280127,BG
@@ -21945,9 +22092,7 @@
1319070976,1319071103,PL
1319071104,1319071231,DE
1319071232,1319071487,PL
-1319071488,1319073023,DE
-1319073024,1319073279,TR
-1319073280,1319074815,DE
+1319071488,1319074815,DE
1319074816,1319074943,PL
1319074944,1319075071,DE
1319075072,1319075199,PL
@@ -22101,7 +22246,9 @@
1334214656,1334222847,JO
1334222848,1334231039,BG
1334231040,1334239231,RU
-1334239232,1334243327,CH
+1334239232,1334242303,CH
+1334242304,1334242559,IS
+1334242560,1334243327,CH
1334243328,1334247423,IS
1334247424,1334255615,NO
1334255616,1334263807,IT
@@ -23311,7 +23458,8 @@
1355284480,1355415551,BE
1355415552,1355546623,NO
1355546624,1355808767,IT
-1355808768,1356070911,DK
+1355808768,1356005375,DK
+1356005376,1356070911,IT
1356070912,1356201983,NO
1356201984,1356333055,FR
1356333056,1356464127,SE
@@ -23332,8 +23480,17 @@
1357318208,1357318215,IT
1357318272,1357318279,CH
1357318288,1357318303,FR
+1357318348,1357318351,NL
+1357318356,1357318356,DE
+1357318372,1357318375,BE
+1357318378,1357318378,FR
+1357318379,1357318379,PL
+1357318384,1357318387,PL
+1357318388,1357318391,FR
+1357318396,1357318399,DE
1357318400,1357318655,FR
1357318912,1357319167,DE
+1357319168,1357319171,PL
1357321024,1357321087,KE
1357321984,1357322239,GB
1357322240,1357322255,DE
@@ -23343,13 +23500,17 @@
1357323776,1357323791,FI
1357323792,1357324287,GB
1357324288,1357324295,RU
-1357324296,1357324319,PL
+1357324296,1357324327,PL
1357326336,1357326337,ES
1357326338,1357326339,SL
1357326352,1357326367,GB
1357326592,1357326975,GB
1357327360,1357327615,FR
-1357328384,1357328895,GB
+1357328384,1357328687,GB
+1357328688,1357328695,ES
+1357328696,1357328703,IT
+1357328704,1357328711,IE
+1357328712,1357328895,GB
1357328896,1357329159,NL
1357329160,1357329407,GB
1357329408,1357329415,BE
@@ -23395,8 +23556,9 @@
1357373540,1357373543,PT
1357373544,1357375215,GB
1357375216,1357375223,ES
-1357375224,1357375487,GB
-1357377536,1357378623,FR
+1357375224,1357375423,GB
+1357375424,1357375487,IE
+1357377536,1357378639,FR
1357378816,1357379071,FR
1357381632,1357414399,NO
1357414400,1357447167,LV
@@ -23469,7 +23631,8 @@
1357926400,1357930495,GB
1357930496,1357932287,RU
1357932288,1357932543,GB
-1357932544,1357933567,RU
+1357932544,1357933055,RU
+1357933056,1357933567,ES
1357933568,1357934079,GB
1357934080,1357934335,RU
1357934336,1357934591,GB
@@ -23490,7 +23653,9 @@
1357984104,1357984111,IT
1357984112,1357984167,GB
1357984168,1357984175,IT
-1357984176,1357984367,GB
+1357984176,1357984311,GB
+1357984312,1357984319,IT
+1357984320,1357984367,GB
1357984368,1357984375,IT
1357984376,1357984511,GB
1357984512,1357984519,IT
@@ -23762,9 +23927,10 @@
1359118656,1359118719,GR
1359118720,1359118847,DE
1359118848,1359119103,IT
-1359119104,1359119199,DE
+1359119104,1359119199,ES
1359119200,1359119231,NL
-1359119232,1359121407,DE
+1359119232,1359119359,ES
+1359119360,1359121407,DE
1359121408,1359122431,ES
1359122432,1359123967,DE
1359123968,1359124479,ES
@@ -24112,8 +24278,8 @@
1361051648,1362100223,ES
1362100224,1362395647,FR
1362395648,1362396031,US
-1362396032,1362396671,FR
-1362396672,1362396927,US
+1362396032,1362396415,FR
+1362396416,1362396927,US
1362396928,1362397439,FR
1362397440,1362397695,US
1362397696,1362398463,FR
@@ -24458,9 +24624,7 @@
1372000256,1372001279,UG
1372001280,1372012543,GB
1372012544,1372013567,ZM
-1372013568,1372014079,GB
-1372014080,1372014335,NG
-1372014336,1372016127,GB
+1372013568,1372016127,GB
1372016128,1372016383,GH
1372016384,1372017583,GB
1372017584,1372017599,CD
@@ -24468,7 +24632,8 @@
1372020736,1372022783,CD
1372022784,1372023807,GB
1372023808,1372024831,IL
-1372024832,1372026623,GB
+1372024832,1372025087,ZM
+1372025088,1372026623,GB
1372026624,1372026879,KE
1372026880,1372027903,IL
1372027904,1372043519,GB
@@ -26240,7 +26405,7 @@
1412333568,1412366335,LT
1412366336,1412399103,SK
1412399104,1412400127,RU
-1412400128,1412400639,RO
+1412400128,1412400639,UA
1412400640,1412403711,RU
1412403712,1412403967,RO
1412403968,1412405759,RU
@@ -26254,9 +26419,9 @@
1412413952,1412414719,RU
1412414720,1412414975,RO
1412414976,1412415487,RU
-1412415488,1412419583,IR
-1412419584,1412420607,AE
-1412420608,1412431871,IR
+1412415488,1412423679,IR
+1412423680,1412425727,AE
+1412425728,1412431871,IR
1412431872,1412562943,NO
1412562944,1412628479,EE
1412628480,1412644863,TR
@@ -26316,11 +26481,29 @@
1417526784,1417674751,ES
1417674752,1421869055,DE
1421869056,1422393343,BE
-1422393344,1422413567,DE
+1422393344,1422400407,DE
+1422400408,1422400415,IN
+1422400416,1422402175,DE
+1422402176,1422402239,IN
+1422402240,1422406655,DE
+1422406656,1422406783,IN
+1422406784,1422406911,DE
+1422406912,1422407039,IN
+1422407040,1422407295,DE
+1422407296,1422407423,IN
+1422407424,1422413567,DE
1422413568,1422413695,AT
-1422413696,1422463231,DE
+1422413696,1422415743,DE
+1422415744,1422415871,IN
+1422415872,1422442751,DE
+1422442752,1422442879,IN
+1422442880,1422452351,DE
+1422452352,1422452479,IN
+1422452480,1422463231,DE
1422463232,1422463743,NL
-1422463744,1422491647,DE
+1422463744,1422468351,DE
+1422468352,1422468607,IN
+1422468608,1422491647,DE
1422491648,1422495615,RU
1422495616,1422495679,NL
1422495680,1422508031,RU
@@ -26400,7 +26583,9 @@
1424618465,1424618465,NL
1424618466,1424618479,GB
1424618480,1424618495,NL
-1424618496,1424619855,GB
+1424618496,1424619343,GB
+1424619344,1424619351,IT
+1424619352,1424619855,GB
1424619856,1424619863,BE
1424619864,1424621567,GB
1424621568,1424625663,PL
@@ -26542,11 +26727,7 @@
1426980864,1426997247,BG
1426997248,1427013631,PL
1427013632,1427030015,FR
-1427030016,1427032855,DE
-1427032856,1427032863,TR
-1427032864,1427032959,DE
-1427032960,1427032967,NL
-1427032968,1427033247,DE
+1427030016,1427033247,DE
1427033248,1427033263,TW
1427033264,1427046399,DE
1427046400,1427062783,IR
@@ -26600,9 +26781,15 @@
1428142080,1428144127,DE
1428144128,1428152319,FR
1428152320,1428160511,PL
-1428160512,1428260863,IT
+1428160512,1428183111,IT
+1428183112,1428183119,SI
+1428183120,1428183143,IT
+1428183144,1428183151,SI
+1428183152,1428260863,IT
1428260864,1428261119,GB
-1428261120,1429209087,IT
+1428261120,1428973199,IT
+1428973200,1428973207,SI
+1428973208,1429209087,IT
1429209088,1430257663,ES
1430257664,1430388735,IL
1430388736,1430519807,HU
@@ -26689,7 +26876,17 @@
1432322048,1432338431,RU
1432338432,1432346623,FR
1432346624,1433403391,TR
-1433403392,1433411583,ES
+1433403392,1433411071,ES
+1433411072,1433411327,TR
+1433411328,1433411343,ES
+1433411344,1433411375,TR
+1433411376,1433411407,US
+1433411408,1433411423,TR
+1433411424,1433411439,ES
+1433411440,1433411455,TR
+1433411456,1433411551,ES
+1433411552,1433411567,TR
+1433411568,1433411583,ES
1433411584,1433419775,RU
1433419776,1433427967,LB
1433427968,1433436159,RU
@@ -26715,13 +26912,10 @@
1433591808,1433599999,GE
1433600000,1433608191,DE
1433608192,1433608447,TR
-1433608448,1433608627,NL
-1433608628,1433608628,BE
-1433608629,1433608703,NL
+1433608448,1433608703,NL
1433608704,1433609471,GB
1433609472,1433609727,SE
-1433609728,1433609983,GB
-1433609984,1433610239,IT
+1433609728,1433610239,GB
1433610240,1433611263,US
1433611264,1433614335,GB
1433614336,1433615027,DE
@@ -26899,10 +27093,13 @@
1437073408,1437335551,FR
1437335552,1437597695,RU
1437597696,1438121983,DE
-1438121984,1438146559,NL
+1438121984,1438127103,NL
+1438127104,1438127359,GB
+1438127360,1438127615,SE
+1438127616,1438127871,BE
+1438127872,1438146559,NL
1438146560,1438154751,MT
-1438154752,1438162943,NL
-1438162944,1438171135,DK
+1438154752,1438171135,DK
1438171136,1438173183,GB
1438173184,1438179327,IM
1438179328,1438181375,NL
@@ -26940,7 +27137,8 @@
1438573376,1438573439,KR
1438573440,1438573503,PT
1438573504,1438573567,DK
-1438573568,1438574079,DE
+1438573568,1438573823,US
+1438573824,1438574079,DE
1438574080,1438574335,GB
1438574336,1438574591,DE
1438574592,1438578687,PL
@@ -27094,7 +27292,8 @@
1439460608,1439460863,MD
1439460864,1439462655,RO
1439462656,1439462911,MD
-1439462912,1439463423,RO
+1439462912,1439463167,RO
+1439463168,1439463423,IT
1439463424,1439463935,DK
1439463936,1439465471,RO
1439465472,1439466495,IR
@@ -27103,7 +27302,9 @@
1439467520,1439468031,DK
1439468032,1439468543,RO
1439468544,1439469567,ES
-1439469568,1439475711,RO
+1439469568,1439470335,RO
+1439470336,1439470591,IT
+1439470592,1439475711,RO
1439475712,1439475967,IN
1439475968,1439476735,RO
1439476736,1439477759,IN
@@ -27162,14 +27363,16 @@
1440213257,1440251903,DE
1440251904,1440284671,SK
1440284672,1440317439,FI
-1440317440,1440317695,BG
-1440317696,1440317951,DE
-1440317952,1440319999,BG
-1440320000,1440320511,DE
-1440320512,1440321535,BG
-1440321536,1440323583,DE
-1440323584,1440325631,BG
-1440325632,1440333823,DE
+1440317440,1440320255,BG
+1440320256,1440320511,DE
+1440320512,1440322047,BG
+1440322048,1440323071,DE
+1440323072,1440325631,BG
+1440325632,1440326655,DE
+1440326656,1440328703,BG
+1440328704,1440329727,DE
+1440329728,1440331775,BG
+1440331776,1440333823,DE
1440333824,1440350207,BG
1440350208,1440382975,CH
1440382976,1440415743,DK
@@ -27380,7 +27583,9 @@
1449736192,1449738239,MD
1449738240,1449742335,RO
1449742336,1449744383,MD
-1449744384,1449750527,RO
+1449744384,1449748479,RO
+1449748480,1449749503,GB
+1449749504,1449750527,RO
1449750528,1449752575,SE
1449752576,1449754623,RO
1449754624,1449758719,IR
@@ -27394,7 +27599,7 @@
1449765120,1449765887,RO
1449765888,1449766911,MD
1449766912,1449767167,GB
-1449767168,1449767423,RO
+1449767168,1449767423,IT
1449767424,1449767679,GB
1449767680,1449767935,IT
1449767936,1449768959,RO
@@ -27678,10 +27883,8 @@
1467572224,1467582463,BG
1467582464,1467584511,DE
1467584512,1467593727,BG
-1467593728,1467598335,DE
-1467598336,1467598847,BG
-1467598848,1467599871,DE
-1467599872,1467600895,BG
+1467593728,1467597823,DE
+1467597824,1467600895,BG
1467600896,1467601407,DE
1467601408,1467604991,BG
1467604992,1467744255,DE
@@ -27837,8 +28040,7 @@
1475323904,1475327999,PL
1475328000,1475330047,NL
1475330048,1475332095,PL
-1475332096,1475334143,LI
-1475334144,1475336191,CH
+1475332096,1475336191,CH
1475336192,1475338239,PL
1475338240,1475340287,RO
1475340288,1475342335,GR
@@ -27862,17 +28064,13 @@
1475510272,1475543039,GB
1475543040,1475545087,RO
1475545088,1475559423,KZ
-1475559424,1475560191,GR
-1475560192,1475562111,BG
-1475562112,1475562239,GR
-1475562240,1475562367,BG
-1475562368,1475562495,GR
-1475562496,1475562751,BG
-1475562752,1475563263,GR
-1475563264,1475563519,BG
-1475563520,1475571711,GR
+1475559424,1475563007,GR
+1475563008,1475563263,BG
+1475563264,1475571711,GR
1475571712,1475572735,BG
-1475572736,1475575807,GR
+1475572736,1475574783,GR
+1475574784,1475575039,BG
+1475575040,1475575807,GR
1475575808,1475592191,AT
1475592192,1475608575,GB
1475608576,1475624959,RU
@@ -27992,8 +28190,8 @@
1476009984,1476010047,RS
1476010048,1476010111,XK
1476010112,1476011327,RS
-1476011328,1476012031,XK
-1476012032,1476012095,RS
+1476011328,1476011775,XK
+1476011776,1476012095,RS
1476012096,1476012287,XK
1476012288,1476013055,RS
1476013056,1476013311,XK
@@ -28066,7 +28264,17 @@
1476378624,1476386815,KZ
1476386816,1476395007,RU
1476395008,1478492159,ES
-1478492160,1480589311,IT
+1478492160,1478552319,IT
+1478552320,1478552327,SI
+1478552328,1479067415,IT
+1479067416,1479067423,SI
+1479067424,1479738383,IT
+1479738384,1479738391,SI
+1479738392,1479738479,IT
+1479738480,1479738487,SI
+1479738488,1480413711,IT
+1480413712,1480413719,SI
+1480413720,1480589311,IT
1480589312,1481637887,DE
1481637888,1481646079,SE
1481646080,1481654271,RU
@@ -28144,9 +28352,7 @@
1482145792,1482153983,ES
1482153984,1482162175,HU
1482162176,1482686463,NO
-1482686464,1482822399,GB
-1482822400,1482822911,US
-1482822912,1482842111,GB
+1482686464,1482842111,GB
1482842112,1482850303,ES
1482850304,1482883071,GB
1482883072,1482948607,DE
@@ -28538,7 +28744,8 @@
1495306240,1495306573,GB
1495306574,1495306574,RO
1495306575,1495308287,GB
-1495308288,1495309311,RO
+1495308288,1495308799,IT
+1495308800,1495309311,RO
1495309312,1495310335,IT
1495310336,1495312383,ES
1495312384,1495312895,IT
@@ -28598,7 +28805,8 @@
1495365120,1495365375,SE
1495365376,1495367679,RO
1495367680,1495368191,IR
-1495368192,1495369215,RO
+1495368192,1495368959,RO
+1495368960,1495369215,IT
1495369216,1495369471,GB
1495369472,1495369727,RO
1495369728,1495371775,SE
@@ -28619,7 +28827,8 @@
1495388656,1495388656,KZ
1495388657,1495388671,RU
1495388672,1495392255,KZ
-1495392256,1495394815,RO
+1495392256,1495394303,SY
+1495394304,1495394815,RO
1495394816,1495395327,IR
1495395328,1495396351,RO
1495396352,1495396863,IR
@@ -28659,7 +28868,9 @@
1495431168,1495432191,ES
1495432192,1495433215,RO
1495433216,1495441407,IR
-1495441408,1495442431,RO
+1495441408,1495441663,RO
+1495441664,1495441919,IT
+1495441920,1495442431,SY
1495442432,1495442559,FR
1495442560,1495442943,RO
1495442944,1495443199,AE
@@ -28691,7 +28902,7 @@
1495468032,1495470079,MD
1495470080,1495472127,NL
1495472128,1495474175,RO
-1495474176,1495474431,ES
+1495474176,1495474431,NL
1495474432,1495474687,RO
1495474688,1495474943,MD
1495474944,1495476223,RO
@@ -28802,7 +29013,8 @@
1495588864,1495589119,RO
1495589120,1495589375,FI
1495589376,1495589887,IR
-1495589888,1495590911,RO
+1495589888,1495590143,IT
+1495590144,1495590911,RO
1495590912,1495591935,US
1495591936,1495596031,RO
1495596032,1495596543,IR
@@ -28829,11 +29041,13 @@
1495622144,1495623167,RO
1495623168,1495623679,IR
1495623680,1495624191,MD
-1495624192,1495630079,RO
-1495630080,1495631615,GB
+1495624192,1495629823,RO
+1495629824,1495631615,GB
1495631616,1495632127,RO
1495632128,1495632639,MD
-1495632640,1495633919,RO
+1495632640,1495632895,RO
+1495632896,1495633151,ES
+1495633152,1495633919,RO
1495633920,1495636991,IR
1495636992,1495640063,RO
1495640064,1495641087,IR
@@ -28872,7 +29086,9 @@
1495688704,1495689215,IR
1495689216,1495689727,RO
1495689728,1495690239,DE
-1495690240,1495699455,RO
+1495690240,1495693311,RO
+1495693312,1495695359,GB
+1495695360,1495699455,RO
1495699456,1495700479,GB
1495700480,1495701503,FR
1495701504,1495704575,RO
@@ -28948,8 +29164,8 @@
1495795456,1495795711,RU
1495795712,1495803391,RO
1495803392,1495803903,IR
-1495803904,1495804927,RO
-1495804928,1495805439,GB
+1495803904,1495804671,RO
+1495804672,1495805439,GB
1495805440,1495805951,RO
1495805952,1495810047,KZ
1495810048,1495813631,RO
@@ -28992,7 +29208,9 @@
1495848960,1495849471,SE
1495849472,1495852031,RO
1495852032,1495853055,MD
-1495853056,1495855103,RO
+1495853056,1495853567,RO
+1495853568,1495854079,IT
+1495854080,1495855103,RO
1495855104,1495859199,IR
1495859200,1495860223,ES
1495860224,1495861247,AZ
@@ -29012,7 +29230,9 @@
1495874560,1495875071,GB
1495875072,1495875583,RO
1495875584,1495891967,MD
-1495891968,1495900159,RO
+1495891968,1495894527,RO
+1495894528,1495896063,SY
+1495896064,1495900159,RO
1495900160,1495902207,SE
1495902208,1495906303,RO
1495906304,1495907327,IR
@@ -29024,9 +29244,13 @@
1495926784,1495927039,SG
1495927040,1495927295,RO
1495927296,1495927551,GB
-1495927552,1495931647,RO
+1495927552,1495931135,RO
+1495931136,1495931391,IT
+1495931392,1495931647,RO
1495931648,1495931903,BG
-1495931904,1495932927,RO
+1495931904,1495932159,RO
+1495932160,1495932415,GB
+1495932416,1495932927,RO
1495932928,1495933439,IR
1495933440,1495935743,RO
1495935744,1495935999,ES
@@ -29070,7 +29294,9 @@
1495976960,1495977983,KZ
1495977984,1495979007,RO
1495979008,1495979263,NL
-1495979264,1495982079,RO
+1495979264,1495979775,RO
+1495979776,1495980031,GB
+1495980032,1495982079,RO
1495982080,1495983103,MD
1495983104,1495983615,IR
1495983616,1495983871,IT
@@ -29228,7 +29454,9 @@
1496213504,1496215551,IT
1496215552,1496216319,RO
1496216320,1496216575,MD
-1496216576,1496220671,RO
+1496216576,1496218879,RO
+1496218880,1496219135,DE
+1496219136,1496220671,RO
1496220672,1496221695,US
1496221696,1496223743,ES
1496223744,1496228863,RO
@@ -29268,7 +29496,11 @@
1496299520,1496301567,SE
1496301568,1496302591,RO
1496302592,1496304639,IR
-1496304640,1496317951,RO
+1496304640,1496315647,RO
+1496315648,1496315903,GB
+1496315904,1496316159,RO
+1496316160,1496316415,GB
+1496316416,1496317951,RO
1496317952,1497366527,DE
1497366528,1498415103,PL
1498415104,1499463679,FR
@@ -29414,9 +29646,7 @@
1502980880,1502980895,DE
1502980896,1502980927,IE
1502980928,1502981119,DE
-1502981120,1502981887,IE
-1502981888,1502982143,NL
-1502982144,1502986239,IE
+1502981120,1502986239,IE
1502986240,1502986255,DE
1502986256,1502986495,TR
1502986496,1502986511,DE
@@ -29481,29 +29711,17 @@
1503895664,1503895671,FR
1503895672,1503895679,DE
1503895680,1503895687,IT
-1503895688,1503895807,DE
-1503895808,1503895871,RU
-1503895872,1503895927,DE
+1503895688,1503895927,DE
1503895928,1503895935,DK
-1503895936,1503896115,DE
-1503896116,1503896119,SE
-1503896120,1503896159,DE
+1503895936,1503896159,DE
1503896160,1503896175,CH
-1503896176,1503896259,DE
-1503896260,1503896263,CH
-1503896264,1503896343,DE
+1503896176,1503896343,DE
1503896344,1503896351,AT
1503896352,1503896411,DE
1503896412,1503896415,AT
-1503896416,1503896519,DE
-1503896520,1503896527,NO
-1503896528,1503897303,DE
-1503897304,1503897311,AT
-1503897312,1503897367,DE
+1503896416,1503897367,DE
1503897368,1503897375,BE
-1503897376,1503897443,DE
-1503897444,1503897447,IT
-1503897448,1503897495,DE
+1503897376,1503897495,DE
1503897496,1503897503,CH
1503897504,1503898175,DE
1503898176,1503898183,IT
@@ -29515,27 +29733,17 @@
1503898352,1503898359,CH
1503898360,1503898791,DE
1503898792,1503898799,AT
-1503898800,1503898823,DE
-1503898824,1503898831,AT
-1503898832,1503898911,DE
+1503898800,1503898911,DE
1503898912,1503898919,LT
1503898920,1503898935,DE
1503898936,1503898943,IT
1503898944,1503898959,DE
1503898960,1503898967,IT
-1503898968,1503898991,DE
-1503898992,1503898999,GB
-1503899000,1503899071,DE
+1503898968,1503899071,DE
1503899072,1503899079,AT
-1503899080,1503899119,DE
-1503899120,1503899127,NL
-1503899128,1503899263,DE
-1503899264,1503899295,UA
-1503899296,1503899463,DE
+1503899080,1503899463,DE
1503899464,1503899471,IT
-1503899472,1503899583,DE
-1503899584,1503899647,TW
-1503899648,1503899687,DE
+1503899472,1503899687,DE
1503899688,1503899695,IT
1503899696,1503899703,BE
1503899704,1503899927,DE
@@ -29552,22 +29760,13 @@
1503903688,1503903695,IT
1503903696,1503903711,DE
1503903712,1503903719,IT
-1503903720,1503904343,DE
-1503904344,1503904351,BE
-1503904352,1503905551,DE
+1503903720,1503905551,DE
1503905552,1503905559,CH
-1503905560,1503905567,ES
-1503905568,1503905647,DE
+1503905560,1503905647,DE
1503905648,1503905655,IT
-1503905656,1503905663,AT
-1503905664,1503905895,DE
-1503905896,1503905903,GB
-1503905904,1503906055,DE
+1503905656,1503906055,DE
1503906056,1503906063,CH
-1503906064,1503906071,TR
-1503906072,1503906111,DE
-1503906112,1503906175,TR
-1503906176,1503906343,DE
+1503906064,1503906343,DE
1503906344,1503906351,AT
1503906352,1503906407,DE
1503906408,1503906415,MX
@@ -29651,7 +29850,13 @@
1505646848,1505647103,PL
1505647104,1505648639,CZ
1505648640,1505656831,LT
-1505665024,1505673215,IT
+1505665024,1505669491,IT
+1505669492,1505669495,SI
+1505669496,1505670159,IT
+1505670160,1505670163,SI
+1505670164,1505672239,IT
+1505672240,1505672243,SI
+1505672244,1505673215,IT
1505673216,1505681407,BG
1505681408,1505689599,RU
1505689600,1505697791,NO
@@ -29660,7 +29865,8 @@
1505714176,1505722367,LV
1505722368,1505738751,PL
1505738752,1505746943,GB
-1505746944,1505755135,RU
+1505746944,1505751039,IL
+1505751040,1505755135,RU
1505755136,1506017279,GB
1506017280,1506082815,IR
1506082816,1506148351,GB
@@ -29897,7 +30103,10 @@
1508811192,1508811195,NL
1508811196,1508812519,GB
1508812520,1508812527,CZ
-1508812528,1508817407,GB
+1508812528,1508815103,GB
+1508815104,1508815359,NL
+1508815360,1508815615,ES
+1508815616,1508817407,GB
1508817408,1508817663,CZ
1508817664,1508818735,GB
1508818736,1508818743,IE
@@ -29933,7 +30142,9 @@
1509494784,1509498879,RU
1509498880,1509502975,DE
1509502976,1509507071,RU
-1509507072,1509509375,GB
+1509507072,1509507327,GB
+1509507328,1509507583,DE
+1509507584,1509509375,GB
1509509376,1509509631,BE
1509509632,1509511167,GB
1509511168,1509515263,LT
@@ -30186,7 +30397,9 @@
1512370443,1512372735,GP
1512372736,1512372991,FR
1512372992,1512374271,GP
-1512374272,1514143743,FR
+1512374272,1513892207,FR
+1513892208,1513892208,ES
+1513892209,1514143743,FR
1514143744,1514176511,SK
1514176512,1514405887,FR
1514405888,1514536959,ES
@@ -30501,10 +30714,14 @@
1533805568,1533807615,NL
1533807616,1533808639,US
1533808640,1533809663,SG
-1533809664,1533818879,GB
+1533809664,1533818879,RU
1533818880,1533819903,NL
1533819904,1533820927,RU
-1533820928,1533833215,DE
+1533820928,1533825407,DE
+1533825408,1533825535,IN
+1533825536,1533825919,DE
+1533825920,1533826047,IN
+1533826048,1533833215,DE
1533833216,1533845503,IR
1533845504,1533847551,GB
1533847552,1533849599,RU
@@ -30538,7 +30755,9 @@
1533929472,1533932799,GB
1533932800,1533933055,DE
1533933056,1534066687,GB
-1534066688,1534328831,AT
+1534066688,1534300159,AT
+1534300160,1534300415,DE
+1534300416,1534328831,AT
1534328832,1534459903,ES
1534459904,1534590975,AT
1534590976,1534656511,HU
@@ -30755,7 +30974,9 @@
1535551904,1535551919,NL
1535551920,1535552463,FR
1535552464,1535552479,NL
-1535552480,1535553471,FR
+1535552480,1535553343,FR
+1535553344,1535553407,PL
+1535553408,1535553471,FR
1535553472,1535553535,ES
1535553536,1535553983,FR
1535553984,1535554047,GB
@@ -30775,7 +30996,11 @@
1535556864,1535557119,GB
1535557120,1535558015,FR
1535558016,1535558143,ES
-1535558144,1535559935,FR
+1535558144,1535559695,FR
+1535559696,1535559711,IT
+1535559712,1535559807,FR
+1535559808,1535559871,FI
+1535559872,1535559935,FR
1535559936,1535560191,GB
1535560192,1535560287,FR
1535560288,1535560319,FI
@@ -30789,11 +31014,15 @@
1535562592,1535562623,FI
1535562624,1535562879,FR
1535562880,1535563007,ES
-1535563008,1535563455,FR
+1535563008,1535563371,FR
+1535563372,1535563375,FI
+1535563376,1535563455,FR
1535563456,1535563519,IE
1535563520,1535566143,FR
1535566144,1535566159,ES
-1535566160,1535566655,FR
+1535566160,1535566563,FR
+1535566564,1535566567,GB
+1535566568,1535566655,FR
1535566656,1535566719,PL
1535566720,1535567551,FR
1535567552,1535567615,ES
@@ -30812,7 +31041,9 @@
1535573308,1535573311,NL
1535573312,1535573391,FR
1535573392,1535573407,ES
-1535573408,1535573543,FR
+1535573408,1535573439,FR
+1535573440,1535573503,PL
+1535573504,1535573543,FR
1535573544,1535573547,LT
1535573548,1535574015,FR
1535574016,1535578111,GB
@@ -30914,8 +31145,8 @@
1536450231,1536450231,RS
1536450232,1536450494,XK
1536450495,1536450495,RS
-1536450496,1536452607,XK
-1536452608,1536453375,RS
+1536450496,1536450559,XK
+1536450560,1536453375,RS
1536453376,1536453631,XK
1536453632,1536453887,RS
1536453888,1536453903,XK
@@ -31632,7 +31863,6 @@
1539745024,1539745279,GB
1539745280,1539745535,GI
1539745792,1539746303,DK
-1539746560,1539746815,RU
1539746816,1539747071,DK
1539747072,1539747327,CH
1539747328,1539747583,NL
@@ -32063,7 +32293,9 @@
1540008960,1540011007,PL
1540011008,1540014079,RU
1540014080,1540015103,PL
-1540015104,1540016393,RU
+1540015104,1540016193,RU
+1540016194,1540016194,NL
+1540016195,1540016393,RU
1540016394,1540016394,IE
1540016395,1540016453,RU
1540016454,1540016454,IE
@@ -32199,7 +32431,6 @@
1540182016,1540183039,IT
1540183040,1540184063,RU
1540184064,1540185087,PL
-1540185088,1540186111,RU
1540186112,1540187135,NL
1540187136,1540188159,US
1540190208,1540191231,PT
@@ -33454,7 +33685,10 @@
1540848640,1540849663,UA
1540849664,1540850687,RU
1540850688,1540851711,FI
-1540851712,1540853759,RU
+1540851712,1540852239,KZ
+1540852240,1540852240,RU
+1540852241,1540852735,KZ
+1540852736,1540853759,RU
1540853760,1540854783,UA
1540854784,1540855807,NL
1540855808,1540856831,BG
@@ -33889,9 +34123,7 @@
1541041152,1541044223,RU
1541044224,1541045247,US
1541045248,1541046271,NL
-1541046272,1541047295,RU
-1541047296,1541047551,UA
-1541047552,1541051391,RU
+1541046272,1541051391,RU
1541051392,1541052415,NL
1541052416,1541053439,RO
1541053440,1541054463,PL
@@ -34002,7 +34234,6 @@
1541152768,1541153023,PL
1541153024,1541153279,RU
1541153280,1541153535,DE
-1541153536,1541153791,RO
1541153792,1541154047,DE
1541154048,1541154303,NL
1541154304,1541154559,RU
@@ -34590,7 +34821,6 @@
1541400832,1541401087,NL
1541401088,1541401343,UA
1541401344,1541401599,DK
-1541401600,1541401855,LV
1541401856,1541402111,HR
1541402112,1541402367,SI
1541402368,1541402623,RU
@@ -35737,6 +35967,7 @@
1542124800,1542125567,PL
1542125568,1542126591,CZ
1542126592,1542127103,PL
+1542127104,1542127359,GB
1542127616,1542128127,PL
1542128128,1542128383,RU
1542128384,1542129151,RO
@@ -36044,7 +36275,7 @@
1542308096,1542308863,RO
1542308864,1542309119,PL
1542309120,1542309375,GB
-1542309376,1542310911,RU
+1542309632,1542310911,RU
1542310912,1542312191,UA
1542312192,1542312447,RU
1542312448,1542312959,GB
@@ -36287,7 +36518,6 @@
1542448896,1542449151,AT
1542449152,1542450175,UA
1542450176,1542450687,CZ
-1542450688,1542450943,SY
1542450944,1542451199,RU
1542451200,1542451455,BG
1542451456,1542451711,UA
@@ -36369,7 +36599,7 @@
1542494976,1542495231,RU
1542495232,1542496255,RO
1542496256,1542496767,DE
-1542496768,1542497279,RU
+1542496768,1542497023,RU
1542497280,1542497535,DE
1542497536,1542497791,NL
1542497792,1542498303,IT
@@ -36397,7 +36627,7 @@
1542507520,1542508543,NO
1542508544,1542509567,RU
1542509568,1542510079,CY
-1542510080,1542510591,RU
+1542510080,1542510335,RU
1542510592,1542510847,SI
1542510848,1542511103,DE
1542511104,1542511871,RU
@@ -36491,14 +36721,13 @@
1542640896,1542641151,RU
1542641152,1542641663,IN
1542641664,1542641919,RO
-1542641920,1542642175,OM
1542642176,1542642431,PL
1542642688,1542643199,PL
1542643200,1542643455,UA
1542643456,1542643711,NL
1542643712,1542660095,UA
-1542660096,1542667263,RU
-1542667264,1542668799,NL
+1542660096,1542668287,RU
+1542668288,1542668799,NL
1542668800,1542669311,PL
1542669312,1542669567,RU
1542669568,1542669823,NO
@@ -36518,7 +36747,7 @@
1542675968,1542676223,US
1542676224,1542681087,RU
1542681088,1542681343,GB
-1542681344,1542683135,RU
+1542681600,1542683135,RU
1542683136,1542683391,SK
1542683392,1542683647,RS
1542683648,1542684159,RU
@@ -36556,7 +36785,6 @@
1542763776,1542764031,BG
1542764032,1542764543,RU
1542764544,1542766591,PL
-1542766592,1542770687,RU
1542770688,1542774783,PL
1542774784,1542775039,NL
1542775040,1542775295,PL
@@ -36654,7 +36882,8 @@
1543143424,1543159807,RO
1543159808,1543167999,SE
1543168000,1543172095,IR
-1543172096,1543173375,RO
+1543172096,1543173119,RO
+1543173120,1543173375,GB
1543173376,1543173631,MD
1543173632,1543176191,RO
1543176192,1543241727,IR
@@ -36686,7 +36915,8 @@
1546014720,1546015743,RU
1546015744,1546015999,CZ
1546016000,1546016255,DE
-1546016256,1546017791,CZ
+1546016256,1546016767,CZ
+1546016768,1546017791,IT
1546017792,1546017969,RU
1546017970,1546017970,CZ
1546017971,1546018303,RU
@@ -36730,7 +36960,6 @@
1546125312,1546256383,GB
1546256384,1546264575,RU
1546264576,1546266623,TR
-1546266624,1546268671,RU
1546268672,1546270719,IR
1546270720,1546272767,GB
1546272768,1546274815,NO
@@ -37234,7 +37463,8 @@
1560135936,1560139775,GB
1560139776,1560141823,CZ
1560141824,1560143871,GB
-1560143872,1560150015,CZ
+1560143872,1560145919,FR
+1560145920,1560150015,CZ
1560150016,1560182783,NL
1560182784,1560215551,SE
1560215552,1560281087,RU
@@ -37560,7 +37790,7 @@
1567778816,1567780863,IR
1567780864,1567785471,RO
1567785472,1567785727,TR
-1567785728,1567785983,RO
+1567785728,1567785983,ES
1567785984,1567786239,MD
1567786240,1567789055,RO
1567789056,1567793151,ES
@@ -37615,7 +37845,8 @@
1567858688,1567860735,SE
1567860736,1567861247,BE
1567861248,1567861759,IT
-1567861760,1567866879,RO
+1567861760,1567862783,RO
+1567862784,1567866879,GB
1567866880,1567867135,IN
1567867136,1567867391,RO
1567867392,1567867519,GB
@@ -37688,7 +37919,7 @@
1568122880,1568130047,RO
1568130048,1568133119,MD
1568133120,1568137215,IR
-1568137216,1568137983,RO
+1568137216,1568138239,RO
1568138240,1568141311,MD
1568141312,1568145407,DE
1568145408,1568178175,RO
@@ -37726,7 +37957,11 @@
1568555008,1568571391,UA
1568571392,1568604159,LB
1568604160,1568636927,UA
-1568636928,1569193983,DE
+1568636928,1568662143,DE
+1568662144,1568662271,IN
+1568662272,1568667391,DE
+1568667392,1568667519,IN
+1568667520,1569193983,DE
1569193984,1569718271,HR
1569718272,1570242559,IT
1570242560,1570275327,GB
@@ -37810,8 +38045,7 @@
1571432448,1571434495,RU
1571434496,1571435519,UA
1571435520,1571436031,RU
-1571436032,1571436287,CZ
-1571436288,1571436543,UA
+1571436032,1571436543,UA
1571436544,1571438591,BA
1571438592,1571440639,UA
1571440640,1571440895,RU
@@ -37853,7 +38087,8 @@
1571467264,1571467775,RU
1571467776,1571468287,CZ
1571468288,1571469311,RU
-1571469312,1571470335,BY
+1571469312,1571470079,BY
+1571470080,1571470335,LT
1571470336,1571470847,UA
1571470848,1571475455,RU
1571475456,1571475967,UA
@@ -37981,8 +38216,7 @@
1571748608,1571748863,GB
1571748864,1571749119,US
1571749120,1571749375,SG
-1571749376,1571749631,GB
-1571749632,1571749887,SG
+1571749376,1571749887,GB
1571749888,1571758079,RU
1571758080,1571766271,IL
1571766272,1571786751,PL
@@ -38197,13 +38431,12 @@
1572708352,1572710399,GG
1572710400,1572712447,DE
1572712448,1572714495,ES
-1572714496,1572714943,NG
-1572714944,1572714959,IT
+1572714496,1572714935,NG
+1572714936,1572714959,IT
1572714960,1572715433,NG
1572715434,1572715434,IT
-1572715435,1572715775,NG
-1572715776,1572716031,IT
-1572716032,1572716543,NG
+1572715435,1572715519,NG
+1572715520,1572716543,IT
1572716544,1572718591,SA
1572718592,1572720639,RU
1572720640,1572722687,IT
@@ -38423,7 +38656,9 @@
1578612060,1578612063,ES
1578612064,1578612103,FR
1578612104,1578612111,GB
-1578612112,1578612907,FR
+1578612112,1578612391,FR
+1578612392,1578612395,GB
+1578612396,1578612907,FR
1578612908,1578612911,ES
1578612912,1578613436,FR
1578613437,1578613437,ES
@@ -38517,13 +38752,15 @@
1580126208,1580128255,CY
1580128256,1580129279,NL
1580129280,1580129535,GB
-1580129536,1580130303,US
+1580129536,1580130079,US
+1580130080,1580130095,GB
+1580130096,1580130303,US
1580130304,1580135423,SE
1580135424,1580135679,GB
1580135680,1580138495,SE
-1580138496,1580199935,IT
-1580199936,1580200191,US
-1580200192,1580204031,IT
+1580138496,1580201343,IT
+1580201344,1580201351,SI
+1580201352,1580204031,IT
1580204032,1580335103,SA
1580335104,1580466175,RU
1580466176,1580597247,RO
@@ -38562,7 +38799,17 @@
1582252032,1582268415,TR
1582268416,1582284799,DE
1582284800,1582301183,BH
-1582301184,1583349759,IT
+1582301184,1582351791,IT
+1582351792,1582351799,SI
+1582351800,1583089271,IT
+1583089272,1583089279,SI
+1583089280,1583345951,IT
+1583345952,1583345959,SI
+1583345960,1583347199,IT
+1583347200,1583347207,SI
+1583347208,1583347215,IT
+1583347216,1583347223,SI
+1583347224,1583349759,IT
1583349760,1583611903,SA
1583611904,1583615999,LV
1583616000,1583617791,NL
@@ -38609,23 +38856,21 @@
1583763456,1583765503,SY
1583765504,1583766015,RU
1583766016,1583766527,TR
-1583766528,1583767551,RU
+1583766528,1583767551,SY
1583767552,1583771647,AT
1583771648,1583775743,RU
1583775744,1583779839,IT
1583779840,1583779847,GB
1583779848,1583779855,IT
-1583779856,1583780063,GB
-1583780064,1583780071,IT
-1583780072,1583780263,GB
+1583779856,1583780263,GB
1583780264,1583780271,IT
1583780272,1583780423,GB
1583780424,1583780431,IT
1583780432,1583780447,GB
1583780448,1583780455,IT
1583780456,1583780743,GB
-1583780744,1583780751,IT
-1583780752,1583780767,GB
+1583780744,1583780759,IT
+1583780760,1583780767,GB
1583780768,1583780775,IT
1583780776,1583780791,GB
1583780792,1583780799,IT
@@ -38647,9 +38892,7 @@
1583782976,1583782983,IT
1583782984,1583783495,GB
1583783496,1583783503,IT
-1583783504,1583783719,GB
-1583783720,1583783727,IT
-1583783728,1583783775,GB
+1583783504,1583783775,GB
1583783776,1583783783,IT
1583783784,1583783935,GB
1583788032,1583792127,TM
@@ -38957,7 +39200,7 @@
1588593920,1588594687,RO
1588594688,1588602879,IR
1588602880,1588603135,RO
-1588603136,1588603391,MD
+1588603136,1588603391,BG
1588603392,1588604927,RO
1588604928,1588609023,IR
1588609024,1588613119,MD
@@ -39001,11 +39244,13 @@
1588682752,1588684799,RO
1588684800,1588685055,TH
1588685056,1588685311,VG
-1588685312,1588689407,RO
+1588685312,1588688383,RO
+1588688384,1588688639,GB
+1588688640,1588689407,RO
1588689408,1588689663,GB
1588689664,1588689919,RU
1588689920,1588690687,GB
-1588690688,1588690943,RO
+1588690688,1588690943,IT
1588690944,1588692991,PL
1588692992,1588697087,RO
1588697088,1588699135,ES
@@ -39035,7 +39280,9 @@
1589444608,1589477375,DK
1589477376,1589510143,RS
1589510144,1589542911,RU
-1589542912,1589575679,BG
+1589542912,1589560319,BG
+1589560320,1589561343,GI
+1589561344,1589575679,BG
1589575680,1589608447,RU
1589608448,1589622783,SE
1589622784,1589641215,DK
@@ -39133,7 +39380,9 @@
1592082432,1592086527,GB
1592086528,1592087551,CZ
1592087552,1592088063,PL
-1592088064,1592090623,CZ
+1592088064,1592088191,CZ
+1592088192,1592088319,PL
+1592088320,1592090623,CZ
1592090624,1592094719,RU
1592094720,1592098815,RS
1592098816,1592102911,GB
@@ -39235,8 +39484,7 @@
1593134864,1593135359,GB
1593135360,1593135615,IE
1593135616,1593136639,GB
-1593136640,1593136895,IE
-1593137152,1593139199,IE
+1593136640,1593139199,IE
1593139200,1593140223,NL
1593140224,1593140351,IE
1593140352,1593140479,NL
@@ -39341,7 +39589,11 @@
1596851456,1596851711,CZ
1596851712,1596851967,UA
1596851968,1596852223,LV
-1596852224,1596854271,UA
+1596852224,1596852479,UA
+1596852480,1596852735,RU
+1596852736,1596853247,UA
+1596853248,1596853759,RU
+1596853760,1596854271,UA
1596854272,1596858367,BY
1596858368,1596858879,CZ
1596858880,1596859391,RU
@@ -39353,13 +39605,17 @@
1596866560,1596868607,UZ
1596868608,1596869631,RU
1596869632,1596870655,UA
-1596870656,1596873727,RU
+1596870656,1596873215,RU
+1596873216,1596873471,UZ
+1596873472,1596873727,RU
1596873728,1596873983,UZ
1596873984,1596874751,RU
1596874752,1596875775,UA
1596875776,1596876799,UZ
1596876800,1596877311,RU
-1596877312,1596877823,CZ
+1596877312,1596877596,CZ
+1596877597,1596877597,UA
+1596877598,1596877823,CZ
1596877824,1596878079,UA
1596878080,1596879359,RU
1596879360,1596879871,CZ
@@ -39376,7 +39632,7 @@
1596887296,1596887551,KZ
1596887552,1596888063,UA
1596888064,1596889599,RU
-1596889600,1596889855,CZ
+1596889600,1596889855,KG
1596889856,1596890111,UA
1596890112,1596890623,RU
1596890624,1596890879,CZ
@@ -39833,25 +40089,23 @@
1604714496,1604780031,DK
1604780032,1604845567,RU
1604845568,1604853759,FR
-1604853760,1604861951,HU
-1604861952,1604870143,RS
+1604853760,1604870143,HU
1604870144,1604878335,HR
1604878336,1604886527,DE
-1604886528,1604886655,NL
-1604886656,1604886783,RU
+1604886528,1604886783,NL
1604886784,1604887039,DE
-1604887040,1604887295,GB
+1604887040,1604887295,NL
1604887296,1604888063,DE
-1604888064,1604889599,TR
+1604888064,1604888831,NL
+1604888832,1604889599,TR
1604889600,1604890111,DE
-1604890112,1604890367,RU
+1604890112,1604890367,NL
1604890368,1604890879,TR
1604890880,1604891967,DE
-1604891968,1604892159,RU
+1604891968,1604892159,NL
1604892160,1604892927,DE
1604892928,1604893183,HK
-1604893184,1604893311,DE
-1604893312,1604893375,NL
+1604893184,1604893375,NL
1604893376,1604893951,DE
1604893952,1604894463,TR
1604894464,1604894719,DE
@@ -39891,9 +40145,7 @@
1605109352,1605109359,IT
1605109360,1605109495,GB
1605109496,1605109503,IT
-1605109504,1605109855,GB
-1605109856,1605109863,IT
-1605109864,1605110183,GB
+1605109504,1605110183,GB
1605110184,1605110191,IT
1605110192,1605110263,GB
1605110264,1605110271,IT
@@ -39913,7 +40165,9 @@
1605111904,1605111911,IT
1605111912,1605111935,GB
1605111936,1605111943,IT
-1605111944,1605113383,GB
+1605111944,1605112119,GB
+1605112120,1605112127,IT
+1605112128,1605113383,GB
1605113384,1605113391,IT
1605113392,1605113407,GB
1605113408,1605113415,IT
@@ -39929,9 +40183,7 @@
1605114288,1605114295,IT
1605114296,1605114327,GB
1605114328,1605114335,IT
-1605114336,1605114855,GB
-1605114856,1605114863,IT
-1605114864,1605115007,GB
+1605114336,1605115007,GB
1605115008,1605115015,IT
1605115016,1605115191,GB
1605115192,1605115199,IT
@@ -39939,19 +40191,19 @@
1605115416,1605115423,IT
1605115424,1605115503,GB
1605115504,1605115511,IT
-1605115512,1605115567,GB
-1605115568,1605115575,IT
-1605115576,1605115903,GB
+1605115512,1605115903,GB
1605115904,1605124095,RU
1605124096,1605125263,GB
1605125264,1605125275,DE
1605125276,1605125276,GB
1605125277,1605125279,DE
-1605125280,1605125903,GB
-1605125904,1605125919,DE
+1605125280,1605125887,GB
+1605125888,1605125919,DE
1605125920,1605126701,GB
1605126702,1605126702,US
-1605126703,1605130239,GB
+1605126703,1605126911,GB
+1605126912,1605127167,DE
+1605127168,1605130239,GB
1605130240,1605130271,NL
1605130272,1605131263,GB
1605131264,1605131519,DE
@@ -40146,8 +40398,8 @@
1611036672,1611037183,NL
1611037184,1611042815,US
1611042816,1611046911,NL
-1611046912,1611084031,US
-1611084032,1611084799,NL
+1611046912,1611084543,US
+1611084544,1611084799,NL
1611084800,1611086335,US
1611086336,1611086847,NL
1611086848,1611116543,US
@@ -40243,9 +40495,7 @@
1653500928,1653501103,FR
1653501104,1653501111,IN
1653501112,1653501175,FR
-1653501176,1653501183,US
-1653501184,1653501439,IL
-1653501440,1653534719,US
+1653501176,1653534719,US
1653534720,1653538815,CA
1653538816,1653555199,US
1653555200,1653567487,CA
@@ -40664,6 +40914,7 @@
1728427008,1728428031,MY
1728428032,1728430079,IN
1728430080,1728431103,CN
+1728431104,1728431615,AF
1728431616,1728431871,HK
1728431872,1728432127,SG
1728432128,1728433151,IN
@@ -41012,7 +41263,6 @@
1728751616,1728751871,IN
1728751872,1728752639,ID
1728752640,1728753663,HK
-1728753664,1728754687,PH
1728754688,1728755711,IN
1728755712,1728756735,ID
1728756736,1728757759,IN
@@ -41130,8 +41380,8 @@
1728854016,1728854527,AU
1728854528,1728854783,PK
1728854784,1728855039,AU
-1728855040,1728856063,JP
-1728856064,1728857087,MY
+1728855040,1728855551,TH
+1728855552,1728857087,MY
1728857088,1728858111,CN
1728858112,1728859135,BD
1728859136,1728860159,HK
@@ -41308,7 +41558,6 @@
1729010688,1729011711,CN
1729011712,1729012735,IN
1729012736,1729013759,TH
-1729013760,1729014783,NZ
1729014784,1729015807,AU
1729015808,1729016831,JP
1729016832,1729017855,IN
@@ -41371,7 +41620,7 @@
1729065984,1729067007,JP
1729067008,1729068031,HK
1729068032,1729068287,IN
-1729068288,1729068543,SG
+1729068288,1729068543,US
1729068544,1729069055,NZ
1729069056,1729070079,AU
1729070080,1729071103,HK
@@ -41482,8 +41731,8 @@
1729167360,1729168383,IN
1729169408,1729170431,TW
1729170432,1729170687,HK
-1729170688,1729170719,CN
-1729170720,1729171455,HK
+1729170688,1729171199,CN
+1729171200,1729171455,IN
1729171456,1729171967,AU
1729171968,1729172223,IN
1729172224,1729172479,MY
@@ -41732,7 +41981,7 @@
1729411072,1729413119,ID
1729413120,1729414143,HK
1729414144,1729414655,ID
-1729414656,1729416191,AU
+1729415168,1729416191,AU
1729416192,1729417215,TH
1729417216,1729418239,AU
1729418240,1729419263,IN
@@ -41809,9 +42058,7 @@
1729492480,1729492991,US
1729492992,1729494015,NZ
1729494016,1729495039,MY
-1729495040,1729519615,CN
-1729519616,1729520639,HK
-1729520640,1729527807,CN
+1729495040,1729527807,CN
1729527808,1729528831,SG
1729528832,1729530879,ID
1729530880,1729531903,IN
@@ -41834,8 +42081,7 @@
1729545216,1729546239,AU
1729546240,1729546495,JP
1729546496,1729546751,SG
-1729546752,1729547007,NZ
-1729547008,1729547263,HK
+1729546752,1729547263,HK
1729547264,1729548287,ID
1729548288,1729549311,AU
1729549312,1729550335,TW
@@ -42380,7 +42626,7 @@
1730070528,1730071551,CN
1730071552,1730072575,KR
1730072576,1730073343,SG
-1730073344,1730073855,HK
+1730073344,1730073599,HK
1730073856,1730074111,MY
1730074112,1730074367,AU
1730074368,1730074623,SG
@@ -42476,7 +42722,6 @@
1730373632,1730374655,CN
1730374656,1730375679,BD
1730375680,1730376191,AU
-1730376192,1730376703,VU
1730376704,1730377727,CN
1730377728,1730378239,IN
1730378240,1730378495,HK
@@ -42506,7 +42751,6 @@
1730398208,1730399231,CN
1730399232,1730400255,TW
1730400256,1730402303,PK
-1730402304,1730402559,NZ
1730402560,1730402815,IN
1730402816,1730403071,ID
1730403072,1730403327,AU
@@ -42566,7 +42810,6 @@
1730480640,1730481151,JP
1730481152,1730483199,CN
1730483200,1730483711,IN
-1730483712,1730484223,AU
1730484224,1730485247,CN
1730485248,1730487295,VN
1730487296,1730488319,TW
@@ -42580,9 +42823,7 @@
1730496512,1730497535,CN
1730497536,1730499583,IN
1730499584,1730500607,HK
-1730500608,1730501631,IN
1730501632,1730502655,JP
-1730502656,1730503167,MY
1730503424,1730503679,AU
1730503680,1730505727,CN
1730505728,1730508799,JP
@@ -42650,7 +42891,6 @@
1730586624,1730587647,HK
1730587648,1730588671,PH
1730588672,1730589695,IN
-1730589696,1730590719,JP
1730590720,1730591743,SG
1730591744,1730591999,PH
1730592000,1730592767,IN
@@ -42685,7 +42925,8 @@
1730623488,1730624511,HK
1730624512,1730625535,AU
1730625536,1730626559,CN
-1730626560,1730629631,HK
+1730626560,1730627583,HK
+1730628608,1730629631,HK
1730629632,1730630655,PK
1730630656,1730631679,AU
1730631680,1730632703,CN
@@ -42695,7 +42936,6 @@
1730638080,1730638335,JP
1730638336,1730638847,NZ
1730638848,1730639871,IN
-1730639872,1730640383,AU
1730640384,1730640895,MY
1730641920,1730643967,IN
1730643968,1730644735,AU
@@ -42716,7 +42956,6 @@
1730675712,1730677759,HK
1730677760,1730686975,CN
1730686976,1730687999,IN
-1730688000,1730688511,AU
1730688512,1730689023,ID
1730689024,1730692095,IN
1730692096,1730692607,ID
@@ -42890,14 +43129,14 @@
1730895872,1730898943,CN
1730898944,1730899967,MO
1730899968,1730900991,IN
-1730900992,1730901247,HK
+1730900992,1730901247,AU
1730901248,1730901503,SG
1730901504,1730901759,DE
1730901760,1730902015,AU
1730902016,1730903039,KR
1730903040,1730904063,CN
1730904064,1730905087,ID
-1730905088,1730906111,CN
+1730905088,1730906111,HK
1730906112,1730906367,TH
1730906368,1730907135,AU
1730907136,1730908159,JP
@@ -43077,7 +43316,7 @@
1731186688,1731187711,SG
1731187712,1731188735,CN
1731188736,1731189759,IN
-1731189760,1731190783,CN
+1731189760,1731190783,HK
1731190784,1731191807,SG
1731191808,1731192831,ID
1731192832,1731193087,SG
@@ -43169,7 +43408,7 @@
1731291648,1731292159,AU
1731292160,1731293183,CN
1731293184,1731294207,SG
-1731294208,1731296767,IN
+1731294208,1731296255,IN
1731296768,1731297023,HK
1731297024,1731297279,AU
1731297280,1731298303,CN
@@ -43727,7 +43966,6 @@
1731987456,1731987711,SG
1731987712,1731987967,ID
1731987968,1731988479,SG
-1731988480,1731989503,JP
1731989504,1731990527,VN
1731990528,1731990783,AU
1731990784,1731991039,IN
@@ -43900,7 +44138,6 @@
1732236288,1732237311,VN
1732237312,1732240383,JP
1732240384,1732241407,AU
-1732241408,1732241663,IN
1732241664,1732241919,ID
1732241920,1732242431,BD
1732242432,1732243455,HK
@@ -44081,7 +44318,9 @@
1732541440,1732541695,AU
1732541696,1732542463,SG
1732542464,1732543487,CN
-1732543488,1732544511,SG
+1732543488,1732543743,SG
+1732543744,1732543999,IL
+1732544000,1732544511,SG
1732544512,1732545023,ID
1732545024,1732545279,TW
1732545280,1732545535,MM
@@ -44097,7 +44336,7 @@
1732555776,1732556799,HK
1732556800,1732557823,IN
1732557824,1732558847,AU
-1732558848,1732559871,CN
+1732558848,1732559871,HK
1732559872,1732560127,IN
1732560128,1732560639,NZ
1732560640,1732560895,IN
@@ -44232,8 +44471,7 @@
1732712960,1732713215,US
1732713216,1732713471,AU
1732713472,1732714495,HK
-1732714496,1732715007,CN
-1732715008,1732715519,HK
+1732714496,1732715519,CN
1732715520,1732716543,JP
1732716544,1732717567,BD
1732717568,1732718079,ID
@@ -44252,8 +44490,7 @@
1732730880,1732737023,IN
1732737024,1732740095,CN
1732740096,1732741119,SG
-1732741120,1732741631,KR
-1732741632,1732742143,HK
+1732741120,1732742143,KR
1732742144,1732743167,TW
1732743168,1732744191,CN
1732744192,1732746239,HK
@@ -44474,7 +44711,9 @@
1733016576,1733017599,MY
1733017600,1733019647,IN
1733019648,1733020159,TH
-1733020160,1733021695,AU
+1733020160,1733020415,AU
+1733020416,1733020671,IN
+1733020672,1733021695,AU
1733021696,1733022719,ID
1733022720,1733023743,JP
1733023744,1733024767,SG
@@ -44626,6 +44865,170 @@
1733175296,1733176319,HK
1733176320,1733176831,ID
1733176832,1733177087,IN
+1733177088,1733177855,MY
+1733177856,1733178111,AU
+1733178112,1733178367,US
+1733178368,1733179391,BD
+1733179392,1733183487,CN
+1733183488,1733184511,ID
+1733184512,1733185535,VN
+1733185536,1733186559,ID
+1733186560,1733189631,VN
+1733189632,1733192447,ID
+1733192448,1733192703,SE
+1733192704,1733193215,AU
+1733193216,1733193471,ID
+1733193472,1733193727,BT
+1733193728,1733194751,ID
+1733194752,1733195263,BT
+1733195264,1733195775,JP
+1733195776,1733196799,US
+1733196800,1733197823,CN
+1733197824,1733198847,KH
+1733198848,1733199359,KR
+1733199360,1733199871,PK
+1733199872,1733200127,AU
+1733200128,1733200383,IN
+1733200384,1733202943,ID
+1733202944,1733204223,IN
+1733204224,1733204479,AU
+1733204480,1733204991,IN
+1733204992,1733205503,AU
+1733205504,1733205759,TH
+1733205760,1733206015,IN
+1733206016,1733207039,BD
+1733207040,1733209087,IN
+1733209088,1733211135,CN
+1733211136,1733212415,IN
+1733212416,1733212671,AU
+1733212672,1733213183,IN
+1733213184,1733214207,BD
+1733214208,1733214719,ID
+1733214720,1733214975,AU
+1733214976,1733215231,ID
+1733215232,1733216255,CN
+1733216256,1733218303,IN
+1733218304,1733221375,ID
+1733221376,1733221631,AU
+1733221632,1733221887,IN
+1733221888,1733221904,BT
+1733221905,1733222399,PH
+1733222400,1733223423,BD
+1733223424,1733224447,CN
+1733224448,1733225471,ID
+1733225472,1733226751,IN
+1733226752,1733227007,AU
+1733227008,1733227519,TH
+1733227520,1733228543,IN
+1733228544,1733230591,BD
+1733230592,1733231615,IN
+1733231616,1733232639,AU
+1733232640,1733233663,IN
+1733233664,1733234687,JP
+1733234688,1733235711,PK
+1733235712,1733235967,AU
+1733235968,1733236223,IN
+1733236224,1733236479,AU
+1733236480,1733236735,NZ
+1733236736,1733238783,CN
+1733238784,1733239807,IN
+1733239808,1733242879,CN
+1733242880,1733243903,JP
+1733243904,1733249023,CN
+1733249024,1733249279,AU
+1733249280,1733249791,IN
+1733249792,1733250047,AU
+1733250048,1733251071,GB
+1733251072,1733253119,CN
+1733253120,1733253631,AU
+1733253632,1733254143,ID
+1733254144,1733255167,SG
+1733255168,1733255423,ID
+1733255424,1733255679,IN
+1733255680,1733256191,ID
+1733256192,1733257215,IN
+1733257216,1733258751,AU
+1733258752,1733259263,PH
+1733259264,1733260543,IN
+1733260544,1733261055,BD
+1733261056,1733261311,IN
+1733261312,1733262335,CN
+1733262336,1733263359,AU
+1733263360,1733264383,TH
+1733264384,1733265407,KR
+1733265408,1733266431,CN
+1733266432,1733268479,VN
+1733268480,1733269503,SG
+1733269504,1733270527,ID
+1733270528,1733271295,IN
+1733271296,1733271551,AU
+1733271552,1733274623,IN
+1733274624,1733275647,AU
+1733275648,1733276671,HK
+1733276672,1733277183,AU
+1733277184,1733277695,BD
+1733277696,1733278719,HK
+1733278720,1733285887,CN
+1733285888,1733286911,BD
+1733286912,1733287935,IN
+1733287936,1733288959,BD
+1733288960,1733289471,IN
+1733289472,1733289727,NZ
+1733289728,1733289983,AU
+1733289984,1733292031,IN
+1733292032,1733293055,CN
+1733293056,1733296127,IN
+1733296128,1733297151,BD
+1733297152,1733298175,JP
+1733298176,1733299199,HK
+1733299200,1733300223,IN
+1733300224,1733301247,HK
+1733301248,1733301759,AU
+1733301760,1733302271,IN
+1733302272,1733304319,CN
+1733304320,1733305343,IN
+1733305344,1733306367,MM
+1733306368,1733307391,AU
+1733307392,1733308415,CN
+1733308416,1733309439,TH
+1733309440,1733309695,IN
+1733309696,1733309951,AU
+1733309952,1733313791,IN
+1733313792,1733314047,AU
+1733314048,1733314559,BD
+1733314560,1733315583,CN
+1733315584,1733315839,NZ
+1733315840,1733316095,ID
+1733316096,1733316351,AU
+1733316352,1733316607,IN
+1733316608,1733317631,ID
+1733317632,1733318655,ES
+1733318656,1733321727,ID
+1733321728,1733322239,TH
+1733322240,1733322751,AU
+1733322752,1733323775,JP
+1733323776,1733324799,BT
+1733324800,1733326847,IN
+1733326848,1733327871,AU
+1733327872,1733328895,HK
+1733328896,1733329151,AU
+1733329152,1733329407,TH
+1733329408,1733329919,IN
+1733329920,1733330943,HK
+1733330944,1733331967,AU
+1733331968,1733332991,PH
+1733332992,1733334015,HK
+1733334016,1733338111,IN
+1733338112,1733338367,AU
+1733338368,1733338623,ID
+1733338624,1733339135,IN
+1733339136,1733340159,HK
+1733340160,1733341183,IN
+1733341184,1733344255,CN
+1733344256,1733345279,ID
+1733345280,1733346303,CN
+1733346304,1733347327,IN
+1733347328,1733348351,CN
1740636160,1740644351,CN
1740644352,1740645375,IN
1740645376,1740647423,HK
@@ -44818,7 +45221,6 @@
1740895232,1740901375,IN
1740901376,1740901887,TH
1740901888,1740902143,ID
-1740902144,1740902399,IN
1740902400,1740903423,VN
1740903424,1740904447,US
1740904448,1740904959,NZ
@@ -44850,7 +45252,6 @@
1740932096,1740933119,IN
1740933120,1740934143,PH
1740934144,1740935167,SG
-1740935168,1740936191,IN
1740936192,1740937215,AU
1740938240,1740938495,AU
1740938496,1740938751,IN
@@ -44859,7 +45260,6 @@
1740941312,1740942335,CN
1740942336,1740943359,TW
1740944384,1740945407,US
-1740945408,1740946431,CN
1740946432,1740947967,IN
1740947968,1740948223,AU
1740948224,1740948479,MY
@@ -44924,7 +45324,6 @@
1741020160,1741022207,IN
1741022208,1741023231,CN
1741023232,1741025279,AU
-1741025280,1741026303,IN
1741026304,1741027327,TH
1741027328,1741028351,BD
1741028352,1741028519,CN
@@ -45092,7 +45491,6 @@
1741372416,1741376511,IN
1741376512,1741377535,ID
1741377536,1741380095,IN
-1741380096,1741380351,SG
1741380352,1741380607,ID
1741380608,1741381631,BD
1741381632,1741390847,CN
@@ -45119,7 +45517,7 @@
1741409280,1741411327,IN
1741411328,1741413375,CN
1741413376,1741413631,HK
-1741413632,1741413887,CN
+1741413632,1741413887,SG
1741413888,1741414399,HK
1741414400,1741423615,IN
1741423616,1741425663,MY
@@ -45394,7 +45792,7 @@
1741756416,1741756927,AU
1741756928,1741757439,IN
1741757440,1741758463,HK
-1741758464,1741759487,PK
+1741758464,1741759487,AU
1741759488,1741760511,IN
1741760512,1741761535,HK
1741761536,1741762559,AU
@@ -45457,9 +45855,9 @@
1741815808,1741816831,CN
1741816832,1741817855,PK
1741817856,1741818367,PH
-1741818368,1741818879,AU
-1741818880,1741819391,PK
-1741819392,1741819903,US
+1741818368,1741819135,AU
+1741819136,1741819391,PK
+1741819392,1741819903,AU
1741819904,1741820927,BD
1741820928,1741821951,PH
1741821952,1741822975,AU
@@ -45826,14 +46224,8 @@
1742257152,1742257407,ID
1742257408,1742257663,NZ
1742257664,1742258175,AU
-1742258176,1742259454,US
-1742259455,1742259455,AU
-1742259456,1742259710,US
-1742259711,1742259711,AU
-1742259712,1742259966,US
-1742259967,1742259967,AU
-1742259968,1742260222,US
-1742260223,1742260223,AU
+1742258176,1742259199,US
+1742259200,1742260223,AU
1742260224,1742260735,IN
1742260736,1742261247,KR
1742261248,1742264319,IN
@@ -45894,7 +46286,8 @@
1742402560,1742407167,IN
1742407168,1742407423,ID
1742407424,1742407679,AU
-1742407680,1742411263,IN
+1742407680,1742410751,IN
+1742410752,1742411263,SG
1742411264,1742411775,GB
1742411776,1742415871,CN
1742415872,1742419967,IN
@@ -46218,7 +46611,9 @@
1742946048,1742947327,AU
1742947328,1742948351,IN
1742948352,1742951423,CN
-1742951424,1742953471,HK
+1742951424,1742952703,HK
+1742952704,1742952704,SG
+1742952705,1742953471,HK
1742953472,1742954495,US
1742954496,1742955519,IN
1742955520,1742956543,CN
@@ -46327,7 +46722,6 @@
1743062528,1743063039,AU
1743063040,1743064063,SG
1743064064,1743064575,ID
-1743064576,1743065087,IN
1743065088,1743066111,TW
1743066112,1743067135,CN
1743067136,1743068159,IN
@@ -46504,8 +46898,7 @@
1743240192,1743241215,SG
1743241216,1743242239,JP
1743242240,1743244287,ID
-1743244288,1743244799,AU
-1743244800,1743245311,AF
+1743244288,1743245311,AU
1743245312,1743248383,IN
1743248384,1743248895,SG
1743248896,1743249407,IN
@@ -46627,7 +47020,7 @@
1743359488,1743361023,ID
1743361024,1743362047,AU
1743362048,1743364095,ID
-1743364096,1743365119,IN
+1743364096,1743364607,IN
1743365120,1743366143,HK
1743366144,1743367167,IN
1743367168,1743368191,SG
@@ -46794,7 +47187,7 @@
1743571200,1743571455,ID
1743571456,1743571967,AU
1743571968,1743574015,IN
-1743574016,1743575039,US
+1743574528,1743574783,US
1743575040,1743576063,HK
1743576064,1743577087,CN
1743577088,1743578111,JP
@@ -46877,7 +47270,7 @@
1743702016,1743703039,ID
1743703040,1743704063,CN
1743704064,1743706111,VN
-1743706112,1743708159,IN
+1743707136,1743708159,IN
1743708160,1743709183,HK
1743709184,1743711231,IN
1743711232,1743712255,JP
@@ -46917,7 +47310,7 @@
1743748608,1743748863,HK
1743748864,1743749119,MY
1743749120,1743751167,AU
-1743751168,1743755263,IN
+1743751168,1743754239,IN
1743755264,1743757311,CN
1743757312,1743758335,TO
1743758336,1743758591,HK
@@ -46944,7 +47337,7 @@
1743783936,1743784959,IN
1743784960,1743785983,JP
1743785984,1743787007,CN
-1743787008,1743789055,JP
+1743787008,1743788031,JP
1743789056,1743790079,KR
1743790080,1743791103,IN
1743791104,1743792127,CN
@@ -47076,7 +47469,7 @@
1743929344,1743930367,CN
1743930368,1743931391,NZ
1743931392,1743932415,HK
-1743932416,1743933439,IN
+1743932672,1743932927,IN
1743933440,1743934463,AU
1743934464,1743934975,ID
1743934976,1743935487,IN
@@ -47351,7 +47744,6 @@
1744214016,1744216063,CN
1744216064,1744217087,HK
1744217088,1744218111,JP
-1744218112,1744218367,AU
1744218368,1744218623,ID
1744218624,1744219135,IN
1744219136,1744220159,KR
@@ -47508,7 +47900,6 @@
1744367616,1744368639,HK
1744368640,1744369663,IN
1744369664,1744369919,ID
-1744369920,1744370175,AU
1744370432,1744370687,JP
1744370688,1744371711,HK
1744371712,1744372735,BD
@@ -47712,7 +48103,7 @@
1744590080,1744590335,ID
1744590336,1744590591,IN
1744590592,1744590847,AU
-1744590848,1744591871,HK
+1744590848,1744591871,DE
1744591872,1744592895,IN
1744592896,1744593919,CN
1744593920,1744594431,ID
@@ -47999,7 +48390,52 @@
1747735744,1747736063,US
1747736064,1747736319,IE
1747736320,1747736575,HK
-1747736576,1747738815,US
+1747736576,1747736639,US
+1747736640,1747736671,IE
+1747736672,1747736767,US
+1747736768,1747736799,HK
+1747736800,1747736831,JP
+1747736832,1747736863,US
+1747736864,1747736895,SG
+1747736896,1747737055,US
+1747737056,1747737119,GB
+1747737120,1747737183,US
+1747737184,1747737215,AU
+1747737216,1747737247,US
+1747737248,1747737279,KR
+1747737280,1747737311,NL
+1747737312,1747737407,US
+1747737408,1747737439,IE
+1747737440,1747737535,US
+1747737536,1747737567,HK
+1747737568,1747737631,JP
+1747737632,1747737663,SG
+1747737664,1747737727,US
+1747737728,1747737791,IN
+1747737792,1747737823,IE
+1747737824,1747737855,US
+1747737856,1747737887,NL
+1747737888,1747737951,CA
+1747737952,1747738015,AU
+1747738016,1747738047,US
+1747738048,1747738079,NL
+1747738080,1747738111,IN
+1747738112,1747738143,US
+1747738144,1747738159,IE
+1747738160,1747738207,US
+1747738208,1747738223,HK
+1747738224,1747738255,JP
+1747738256,1747738271,SG
+1747738272,1747738303,US
+1747738304,1747738335,IN
+1747738336,1747738367,KR
+1747738368,1747738383,US
+1747738384,1747738415,CA
+1747738416,1747738447,AU
+1747738448,1747738463,US
+1747738464,1747738479,NL
+1747738480,1747738495,IN
+1747738496,1747738815,US
1747738816,1747739135,SG
1747739136,1747740159,US
1747740160,1747740671,AU
@@ -48133,10 +48569,12 @@
1749172224,1749188607,NL
1749188608,1749196799,US
1749196800,1749204991,NL
-1749204992,1749217279,US
-1749217280,1749237759,NL
+1749204992,1749221375,US
+1749221376,1749237759,NL
1749237760,1749327871,US
-1749327872,1749344255,NL
+1749327872,1749336063,NL
+1749336064,1749340159,US
+1749340160,1749344255,NL
1749344256,1749364735,US
1749364736,1749389311,NL
1749389312,1749397503,US
@@ -48157,13 +48595,9 @@
1749516800,1749517055,NL
1749517056,1749517311,US
1749517312,1749518335,NL
-1749518336,1749519871,US
-1749519872,1749520383,NL
-1749520384,1749528575,US
-1749528576,1749539327,NL
-1749539328,1749540863,US
-1749540864,1749549055,NL
-1749549056,1749567121,US
+1749518336,1749537791,US
+1749537792,1749539327,NL
+1749539328,1749567121,US
1749567122,1749567122,AU
1749567123,1749567130,US
1749567131,1749567131,AU
@@ -48460,7 +48894,9 @@
1753309184,1753317375,CA
1753317376,1753341951,US
1753341952,1753346047,CA
-1753346048,1753483263,US
+1753346048,1753481727,US
+1753481728,1753481983,SG
+1753481984,1753483263,US
1753483264,1753483519,IE
1753483520,1753483775,IL
1753483776,1753484607,US
@@ -48514,7 +48950,9 @@
1753735168,1753743359,IE
1753743360,1754136575,US
1754136576,1754169343,CA
-1754169344,1754206719,US
+1754169344,1754206335,US
+1754206336,1754206463,WS
+1754206464,1754206719,US
1754206720,1754206975,GW
1754206976,1754207231,RW
1754207232,1754207487,GA
@@ -48565,7 +49003,15 @@
1754258432,1754258687,MG
1754258688,1754258943,US
1754258944,1754259199,TN
-1754259200,1754333183,US
+1754259200,1754282967,US
+1754282968,1754282975,SE
+1754282976,1754289495,US
+1754289496,1754289503,NO
+1754289504,1754307895,US
+1754307896,1754307903,SE
+1754307904,1754308951,US
+1754308952,1754308959,SE
+1754308960,1754333183,US
1754333184,1754337279,CA
1754337280,1754394367,US
1754394368,1754394623,CA
@@ -48889,11 +49335,7 @@
1757552640,1757560831,CA
1757560832,1757596415,US
1757596416,1757596671,AU
-1757596672,1757597695,US
-1757597696,1757598719,GB
-1757598720,1757598975,US
-1757598976,1757599743,GB
-1757599744,1757642751,US
+1757596672,1757642751,US
1757642752,1757675519,CA
1757675520,1757916815,US
1757916816,1757916816,AU
@@ -49106,11 +49548,17 @@
1759535104,1759543295,CA
1759543296,1759547391,US
1759547392,1759548415,NL
-1759548416,1759709183,US
+1759548416,1759707735,US
+1759707736,1759707743,NO
+1759707744,1759709183,US
1759709184,1759709439,LT
-1759709440,1759727103,US
+1759709440,1759721831,US
+1759721832,1759721839,NO
+1759721840,1759727103,US
1759727104,1759727359,IN
-1759727360,1760047103,US
+1759727360,1759748647,US
+1759748648,1759748655,SE
+1759748656,1760047103,US
1760047104,1760051199,CA
1760051200,1760083967,US
1760083968,1760086015,SE
@@ -49166,7 +49614,7 @@
1760818432,1760818687,MX
1760818688,1760818943,AW
1760818944,1760819199,SE
-1760819200,1760819455,ES
+1760819200,1760819455,IT
1760819456,1760819711,GB
1760819712,1760819967,MA
1760819968,1760820223,HK
@@ -49330,7 +49778,9 @@
1761489920,1761499135,US
1761499136,1761501183,CA
1761501184,1761501695,VG
-1761501696,1761507615,US
+1761501696,1761505279,US
+1761505280,1761507327,HK
+1761507328,1761507615,US
1761507616,1761507711,GB
1761507712,1761508351,US
1761509376,1761515519,US
@@ -49358,7 +49808,9 @@
1761601536,1761602559,VC
1761602560,1761606655,US
1761606656,1761607679,LC
-1761607680,1762656255,ZA
+1761607680,1762613861,ZA
+1762613862,1762613862,US
+1762613863,1762656255,ZA
1762656256,1762660351,MU
1762660352,1762661375,KE
1762661376,1762661887,MU
@@ -49520,9 +49972,7 @@
1795555840,1795555855,CA
1795555856,1795556351,US
1795556352,1795556607,CA
-1795556608,1795557375,US
-1795557376,1795557631,IN
-1795557632,1795559423,US
+1795556608,1795559423,US
1795559424,1795559679,AR
1795559680,1795560447,US
1795560448,1795560959,CA
@@ -49530,9 +49980,7 @@
1795561248,1795561343,CA
1795561344,1795561983,US
1795561984,1795562495,CA
-1795562496,1795562911,US
-1795562912,1795562943,CA
-1795562944,1795563007,US
+1795562496,1795563007,US
1795563008,1795563519,CA
1795563520,1795564031,US
1795564032,1795564543,CA
@@ -49565,8 +50013,8 @@
1805016320,1805016575,RU
1805016576,1805016831,NZ
1805016832,1805017087,TR
-1805017088,1805021183,CN
-1805021184,1805033983,US
+1805017088,1805018111,CN
+1805018112,1805033983,US
1805033984,1805038591,TR
1805038592,1805046271,US
1805046272,1805046783,GB
@@ -49576,17 +50024,29 @@
1805049856,1805058047,CA
1805058048,1805144063,US
1805144064,1805148159,CA
-1805148160,1805165823,US
+1805148160,1805150463,US
+1805150464,1805150719,GB
+1805150720,1805165823,US
1805165824,1805166079,IN
1805166080,1805166335,US
1805166336,1805166591,IN
1805166592,1805167103,US
1805167104,1805167359,FR
-1805167360,1805171231,US
+1805167360,1805168855,US
+1805168856,1805168863,SE
+1805168864,1805171231,US
1805171232,1805171239,CA
1805171240,1805171607,US
1805171608,1805171615,CA
-1805171616,1805190399,US
+1805171616,1805185159,US
+1805185160,1805185167,FI
+1805185168,1805185959,US
+1805185960,1805185967,NO
+1805185968,1805187111,US
+1805187112,1805187119,NO
+1805187120,1805188375,US
+1805188376,1805188383,FI
+1805188384,1805190399,US
1805190400,1805190655,ES
1805190656,1805190911,DE
1805190912,1805194239,US
@@ -49653,7 +50113,8 @@
1805752576,1805753087,CA
1805753088,1805754111,US
1805754112,1805754367,CA
-1805754368,1806131199,US
+1805754368,1805756415,US
+1805756928,1806131199,US
1806132224,1806132479,US
1806132608,1806132735,US
1806134784,1806135039,US
@@ -49670,7 +50131,9 @@
1806174208,1806174463,BR
1806174464,1806180351,US
1806180352,1806180607,AU
-1806180608,1806183679,US
+1806180608,1806182911,US
+1806182912,1806183167,BR
+1806183168,1806183679,US
1806183680,1806183935,NL
1806183936,1806184447,US
1806184448,1806184959,AU
@@ -49694,14 +50157,13 @@
1806925824,1806958591,CA
1806958592,1807056895,US
1807056896,1807057151,AU
-1807057152,1807057663,US
1807057664,1807057919,GB
1807057920,1807058431,US
1807058688,1807058943,US
1807058944,1807059199,GB
1807059200,1807059455,NL
-1807059456,1807060991,US
1807060992,1807062015,CA
+1807062016,1807062271,US
1807063040,1807072255,US
1807072256,1807072767,CA
1807072768,1807548415,US
@@ -49823,22 +50285,16 @@
1822553856,1822554111,HK
1822554112,1822572543,US
1822572544,1822605311,CA
-1822605312,1822609407,US
-1822609408,1822609663,CA
-1822609664,1822612991,US
+1822605312,1822612991,US
1822612992,1822613503,HK
-1822613504,1822613759,US
-1822613760,1822614015,SG
+1822613504,1822614015,US
1822614016,1822614527,JP
1822614528,1822615039,FR
-1822615040,1822615551,DE
-1822615552,1822617343,US
+1822615040,1822617343,US
1822617344,1822618367,CA
1822618368,1822619391,US
1822619392,1822620671,AU
-1822620672,1822620927,US
-1822620928,1822621183,DE
-1822621184,1822654463,US
+1822620672,1822654463,US
1822654464,1822662143,CA
1822662144,1822662399,US
1822662400,1822670847,CA
@@ -49867,13 +50323,21 @@
1823211520,1823342591,CA
1823342592,1823346687,US
1823346688,1823350783,CA
-1823350784,1823361791,US
+1823350784,1823355647,US
+1823355648,1823355903,NL
+1823355904,1823356159,US
+1823356160,1823356415,NL
+1823356416,1823356671,US
+1823356672,1823356927,NL
+1823356928,1823361791,US
1823361792,1823362303,CA
1823362304,1823375359,US
1823375360,1823379455,CA
1823379456,1823383551,US
1823383552,1823387647,CA
-1823387648,1823428607,US
+1823387648,1823422463,US
+1823422464,1823423487,LU
+1823423488,1823428607,US
1823428608,1823432703,CA
1823432704,1823440895,US
1823440896,1823444991,CA
@@ -50006,9 +50470,9 @@
1833315968,1833316351,IM
1833316352,1833318399,DK
1833318400,1833320447,GB
-1833320448,1833320959,AE
-1833320960,1833321215,IQ
-1833321216,1833322495,AE
+1833320448,1833321215,IQ
+1833321216,1833321471,AE
+1833321472,1833322495,IQ
1833322496,1833324543,IT
1833324544,1833326591,NO
1833326592,1833327103,GB
@@ -50156,7 +50620,8 @@
1834876928,1834885119,RU
1834885120,1834893311,FR
1834893312,1834901503,RU
-1834901504,1834909695,RS
+1834901504,1834902527,XK
+1834902528,1834909695,RS
1834909696,1834913791,GB
1834913792,1834917887,RO
1834917888,1834921983,UA
@@ -50273,9 +50738,7 @@
1835922648,1835922655,IT
1835922656,1835922671,GB
1835922672,1835922679,IT
-1835922680,1835923007,GB
-1835923008,1835923015,IT
-1835923016,1835923151,GB
+1835922680,1835923151,GB
1835923152,1835923159,IT
1835923160,1835923511,GB
1835923512,1835923527,IT
@@ -50283,9 +50746,9 @@
1835923680,1835923687,IT
1835923688,1835923719,GB
1835923720,1835923727,IT
-1835923728,1835923855,GB
-1835923856,1835923863,IT
-1835923864,1835924375,GB
+1835923728,1835924287,GB
+1835924288,1835924295,IT
+1835924296,1835924375,GB
1835924376,1835924383,IT
1835924384,1835925007,GB
1835925008,1835925015,IT
@@ -50739,11 +51202,11 @@
1841926101,1841930239,NL
1841930240,1841938431,KG
1841938432,1841946623,RU
-1841946624,1841946658,PT
+1841946624,1841946658,US
1841946659,1841946659,UA
-1841946660,1841948671,PT
+1841946660,1841948671,US
1841948672,1841948927,UA
-1841948928,1841954815,PT
+1841948928,1841954815,US
1841954816,1841971199,RU
1841971200,1841979391,CZ
1841979392,1841981439,NL
@@ -50827,7 +51290,7 @@
1842213632,1842213887,SK
1842213888,1842214911,CZ
1842214912,1842216959,RU
-1842216960,1842225151,RO
+1842216960,1842225151,KZ
1842225152,1842233343,UA
1842233344,1842241535,SA
1842241536,1842249727,RS
@@ -51577,9 +52040,7 @@
1897170944,1897172991,ID
1897172992,1897175039,PH
1897175040,1897176063,JP
-1897176064,1897176575,SG
-1897176576,1897176831,JP
-1897176832,1897177087,US
+1897176064,1897177087,SG
1897177088,1897201663,JP
1897201664,1897209855,KR
1897209856,1897213951,AU
@@ -51941,7 +52402,6 @@
1934901248,1934917631,LA
1934917632,1934925823,MV
1934925824,1934927871,KR
-1934927872,1934929919,PH
1934929920,1934931967,VN
1934931968,1934934015,JP
1934934016,1934942207,CN
@@ -52344,7 +52804,8 @@
1964174336,1964174591,SG
1964174621,1964174621,TW
1964175360,1964179455,GB
-1964179456,1964244991,TW
+1964179456,1964179456,AU
+1964179457,1964244991,TW
1964244992,1964249087,AU
1964249088,1964253183,PK
1964253184,1964255231,WF
@@ -52585,7 +53046,9 @@
1992364032,1992368127,HK
1992368128,1992380415,CN
1992380416,1992384511,HK
-1992384512,1992406228,CN
+1992384512,1992398967,CN
+1992398968,1992398968,HK
+1992398969,1992406228,CN
1992406229,1992406229,HK
1992406230,1992417279,CN
1992417280,1992417535,HK
@@ -52836,7 +53299,9 @@
2001926144,2001928191,KH
2001928192,2001993727,JP
2001993728,2002518015,CN
-2002518016,2002780159,PH
+2002518016,2002575325,PH
+2002575326,2002575326,US
+2002575327,2002780159,PH
2002780160,2003304447,CN
2003304448,2003566591,JP
2003566592,2003697663,CN
@@ -52873,7 +53338,9 @@
2007065600,2007066623,SG
2007066624,2007070719,JP
2007070720,2007498751,CN
-2007498752,2008023039,JP
+2007498752,2007499008,JP
+2007499009,2007499009,PH
+2007499010,2008023039,JP
2008023040,2009071615,CN
2009071616,2011168767,KR
2011168768,2011205631,NZ
@@ -53075,7 +53542,7 @@
2033625088,2033627135,HK
2033627136,2033629183,CN
2033629184,2033630207,AU
-2033630208,2033631231,CN
+2033630208,2033631231,HK
2033631232,2033647615,KR
2033647616,2033663999,CN
2033664000,2033696767,KR
@@ -53446,7 +53913,7 @@
2070677504,2070679551,ID
2070679552,2070683647,KR
2070683648,2070691839,IN
-2070691840,2070700031,AU
+2070692864,2070693887,AU
2070700032,2070702079,ID
2070702080,2070703103,AU
2070703104,2070704127,HK
@@ -53532,7 +53999,6 @@
2079981568,2080112639,KR
2080112640,2080145407,TW
2080145408,2080178175,IN
-2080178176,2080243711,CN
2080243712,2080260095,JP
2080260096,2080268287,KR
2080268288,2080270335,CN
@@ -53774,7 +54240,7 @@
2101116928,2101149695,PH
2101149696,2101182463,KR
2101182464,2101231615,CN
-2101231616,2101239807,AU
+2101234688,2101235711,AU
2101239808,2101270527,IN
2101270528,2101272575,KR
2101272576,2101276671,TW
@@ -53790,7 +54256,9 @@
2103967744,2105540607,CN
2105540608,2107637759,KR
2107637760,2108162047,ID
-2108162048,2108227583,AU
+2108162048,2108218879,AU
+2108218880,2108219391,NZ
+2108219392,2108227583,AU
2108227584,2108293119,CN
2108293120,2108358655,JP
2108358656,2108424191,CN
@@ -54253,7 +54721,8 @@
2182086656,2182610943,US
2182610944,2182676479,GB
2182676480,2182742015,IT
-2182742016,2182873087,US
+2182742016,2182807551,IN
+2182807552,2182873087,US
2182873088,2182938623,SE
2182938624,2183135231,US
2183135232,2183200767,GB
@@ -54421,9 +54890,7 @@
2193707496,2193707503,IT
2193707504,2193707655,GB
2193707656,2193707663,IT
-2193707664,2193707727,GB
-2193707728,2193707735,IT
-2193707736,2193707751,GB
+2193707664,2193707751,GB
2193707752,2193707759,IT
2193707760,2193707767,GB
2193707768,2193707775,IT
@@ -54435,9 +54902,7 @@
2193708376,2193708383,IT
2193708384,2193708863,GB
2193708864,2193708871,IT
-2193708872,2193708967,GB
-2193708968,2193708975,IT
-2193708976,2193709199,GB
+2193708872,2193709199,GB
2193709200,2193709215,IT
2193709216,2193711103,GB
2193711104,2193713151,DE
@@ -54521,8 +54986,7 @@
2197858448,2197859327,CO
2197859328,2197860351,CL
2197860352,2197865471,BR
-2197865472,2197865983,ES
-2197865984,2197866495,AR
+2197865472,2197866495,ES
2197866496,2197869567,BR
2197869568,2197870591,UY
2197870592,2197874687,BR
@@ -54804,11 +55268,15 @@
2214068224,2214133759,JP
2214133760,2214264831,US
2214264832,2214330367,GB
-2214330368,2214399047,US
+2214330368,2214398975,US
+2214398976,2214398983,CN
+2214398984,2214399047,US
2214399048,2214399055,IE
-2214399056,2214399071,US
+2214399056,2214399071,CN
2214399072,2214399135,SG
-2214399136,2214399295,US
+2214399136,2214399215,US
+2214399216,2214399223,CN
+2214399224,2214399295,US
2214399296,2214399303,SG
2214399304,2214399887,US
2214399888,2214399903,IE
@@ -55050,23 +55518,30 @@
2230685856,2230685871,HK
2230685872,2230688255,US
2230688256,2230688767,SG
-2230688768,2230689791,BR
-2230689792,2230689999,SG
+2230688768,2230688895,BR
+2230688896,2230688943,US
+2230688944,2230688991,BR
+2230688992,2230689791,US
+2230689792,2230689807,SG
+2230689808,2230689823,US
+2230689824,2230689999,SG
2230690000,2230690007,AU
-2230690008,2230690463,SG
+2230690008,2230690047,SG
+2230690048,2230690463,US
2230690464,2230690639,AU
-2230690640,2230690679,SG
+2230690640,2230690679,US
2230690680,2230690823,AU
-2230690824,2230690831,SG
+2230690824,2230690831,US
2230690832,2230690863,AU
-2230690864,2230690959,SG
+2230690864,2230690959,US
2230690960,2230690975,AU
2230690976,2230691007,SG
2230691008,2230691039,MY
2230691040,2230691071,AU
2230691072,2230691199,SG
2230691200,2230691215,AU
-2230691216,2230693887,SG
+2230691216,2230691231,SG
+2230691232,2230693887,US
2230693888,2230693919,NL
2230693920,2230693951,US
2230693952,2230693967,IE
@@ -55259,10 +55734,8 @@
2255814656,2255880191,CA
2255880192,2255945727,US
2255945728,2255998975,DE
-2255998976,2256000031,FR
-2256000032,2256000047,DE
-2256000048,2256000063,FR
-2256000064,2256011263,DE
+2255998976,2256003071,FR
+2256003072,2256011263,DE
2256011264,2256535551,US
2256535552,2256543743,GB
2256543744,2256551935,US
@@ -55590,7 +56063,9 @@
2266694656,2266694911,SG
2266694912,2270442495,US
2270442496,2270443519,NL
-2270443520,2270463999,US
+2270443520,2270455807,US
+2270455808,2270456831,CA
+2270456832,2270463999,US
2270464000,2270465023,CA
2270465024,2270467071,US
2270467072,2270468095,NL
@@ -55634,8 +56109,10 @@
2282226432,2282226943,US
2282227200,2282264063,US
2282264320,2282264575,US
-2282264832,2291171327,US
-2291171328,2291204095,NL
+2282264832,2283151359,US
+2283151360,2283159551,IN
+2283159552,2291142655,US
+2291142656,2291204095,NL
2291204096,2291269631,PR
2291269632,2291400703,US
2291400704,2291466239,GB
@@ -55672,7 +56149,8 @@
2296512512,2296774655,US
2296774656,2296840191,DE
2296840192,2296905727,NL
-2296905728,2297167871,US
+2296905728,2297036799,IN
+2297036800,2297167871,US
2297167872,2297233407,AU
2297233408,2297237503,US
2297237504,2297237759,BE
@@ -55767,11 +56245,15 @@
2303331904,2303331967,ES
2303331968,2303332799,FR
2303332800,2303332831,GB
-2303332832,2303334271,FR
+2303332832,2303332967,FR
+2303332968,2303332971,GB
+2303332972,2303334271,FR
2303334272,2303334399,ES
2303334400,2303340639,FR
2303340640,2303340671,FI
-2303340672,2303342459,FR
+2303340672,2303341283,FR
+2303341284,2303341287,FI
+2303341288,2303342459,FR
2303342460,2303342463,DE
2303342464,2303343039,FR
2303343040,2303343103,PT
@@ -55793,13 +56275,21 @@
2303353216,2303353343,GB
2303353344,2303353783,FR
2303353784,2303353787,GB
-2303353788,2303361079,FR
+2303353788,2303354639,FR
+2303354640,2303354643,GB
+2303354644,2303361079,FR
2303361080,2303361087,GB
2303361088,2303361535,FR
2303361536,2303361599,GB
2303361600,2303362063,FR
2303362064,2303362079,DE
-2303362080,2303377311,FR
+2303362080,2303365279,FR
+2303365280,2303365295,GB
+2303365296,2303374745,FR
+2303374746,2303374746,ES
+2303374747,2303376807,FR
+2303376808,2303376815,ES
+2303376816,2303377311,FR
2303377312,2303377343,GB
2303377344,2303382879,FR
2303382880,2303382895,ES
@@ -56309,9 +56799,15 @@
2323315712,2323316735,MX
2323316736,2323382271,US
2323382272,2323447807,NO
-2323447808,2323650007,US
+2323447808,2323648007,US
+2323648008,2323648015,FI
+2323648016,2323649823,US
+2323649824,2323649831,NO
+2323649832,2323650007,US
2323650008,2323650015,RO
-2323650016,2323690495,US
+2323650016,2323650183,US
+2323650184,2323650191,FI
+2323650192,2323690495,US
2323690496,2323690751,IN
2323690752,2323699711,US
2323699712,2323700735,NL
@@ -56588,7 +57084,10 @@
2334064640,2334916607,US
2334916608,2334982143,AU
2334982144,2335113215,US
-2335113216,2335178751,NL
+2335113216,2335129599,NL
+2335129600,2335145983,ES
+2335145984,2335154175,NL
+2335154176,2335178751,DE
2335178752,2335244287,CA
2335244288,2335309823,US
2335309824,2335375359,DE
@@ -56598,13 +57097,17 @@
2335637504,2335768575,US
2335768576,2335834111,CA
2335834112,2335899647,SE
-2335899648,2335932415,IN
+2335899648,2335924223,IN
+2335924224,2335928319,SG
+2335928320,2335932415,IN
2335932416,2335940607,DE
2335940608,2335948799,GB
2335948800,2335952895,SG
2335952896,2335954943,DE
2335954944,2335965183,SG
-2335965184,2336161791,US
+2335965184,2336010239,US
+2336010240,2336014335,PR
+2336014336,2336161791,US
2336161792,2336227327,NL
2336292864,2336358399,US
2336358400,2336411647,FI
@@ -56630,7 +57133,7 @@
2338324480,2338390015,SE
2338390016,2338455551,FI
2338455552,2338521087,NO
-2338521088,2338553855,US
+2338521088,2338553855,SG
2338553856,2338586623,AU
2338586624,2338652159,FR
2338652160,2338717695,JP
@@ -56889,9 +57392,8 @@
2372218880,2372222207,FR
2372222208,2372222975,CH
2372222976,2372223487,NL
-2372223488,2372223999,FR
-2372224000,2372224255,TW
-2372224256,2372224511,DE
+2372223488,2372224255,FR
+2372224256,2372224511,US
2372224512,2372225023,GB
2372225024,2372225791,US
2372225792,2372226047,NL
@@ -56899,8 +57401,10 @@
2372226304,2372226559,SG
2372226560,2372227583,SE
2372227584,2372228607,KR
-2372228608,2372229631,PL
-2372229632,2372230655,AT
+2372228608,2372229375,US
+2372229376,2372229631,PL
+2372229632,2372230143,US
+2372230144,2372230655,AT
2372230656,2372231679,CZ
2372231680,2372232191,GB
2372232192,2372233215,CL
@@ -57058,7 +57562,9 @@
2379284480,2380201983,US
2380201984,2380267519,KR
2380267520,2380398591,US
-2380398592,2380464127,IL
+2380398592,2380434431,IL
+2380434432,2380435455,US
+2380435456,2380464127,IL
2380464128,2380464639,FR
2380464640,2380465151,US
2380465152,2380465407,FR
@@ -57129,7 +57635,11 @@
2382684160,2382692351,US
2382692352,2383085567,CA
2383085568,2383151103,US
-2383151104,2385903615,CA
+2383151104,2385031167,CA
+2385031168,2385032191,BR
+2385032192,2385032703,CA
+2385032704,2385035263,BR
+2385035264,2385903615,CA
2385903616,2385908735,US
2385908736,2385909759,VG
2385909760,2385915903,US
@@ -57715,9 +58225,7 @@
2426732544,2426798079,FR
2426798080,2426942463,US
2426942464,2426943487,CA
-2426943488,2426962911,US
-2426962912,2426962919,GB
-2426962920,2427224063,US
+2426943488,2427224063,US
2427224064,2427256831,CA
2427256832,2427322367,GB
2427322368,2427453439,US
@@ -57741,18 +58249,15 @@
2429353984,2429419519,AU
2429419520,2429485055,RU
2429485056,2429550591,US
-2429550592,2429554687,AT
-2429554688,2429556735,US
-2429556736,2429566975,AT
-2429566976,2429575167,US
+2429550592,2429566975,AT
+2429566976,2429573119,US
+2429573120,2429573375,CA
+2429573376,2429575167,US
2429575168,2429577215,CA
2429577216,2429579263,US
2429579264,2429580287,CA
2429580288,2429583359,US
-2429583360,2429591551,AT
-2429591552,2429599743,US
-2429599744,2429607935,AT
-2429607936,2429616127,US
+2429583360,2429616127,AT
2429616128,2429640703,NL
2429640704,2429648895,RU
2429648896,2429681663,NL
@@ -57762,7 +58267,11 @@
2429878272,2429943807,JP
2429943808,2430009343,HK
2430009344,2430140415,US
-2430140416,2430205951,CA
+2430140416,2430152552,CA
+2430152553,2430152553,US
+2430152554,2430168575,CA
+2430168576,2430168591,US
+2430168592,2430205951,CA
2430271488,2430918655,US
2430918656,2430922751,BR
2430922752,2432172031,US
@@ -57956,7 +58465,9 @@
2454978560,2455175167,US
2455175168,2455240703,GB
2455240704,2455244799,US
-2455244800,2455245055,AU
+2455244800,2455244943,AU
+2455244944,2455244944,US
+2455244945,2455245055,AU
2455245056,2455245311,US
2455245312,2455245567,AU
2455245568,2455245823,NL
@@ -58294,7 +58805,9 @@
2465683456,2465685503,FR
2465685504,2465690367,DE
2465690368,2465693695,IT
-2465693696,2465726463,NO
+2465693696,2465701887,NO
+2465701888,2465718271,SE
+2465718272,2465726463,NO
2465726464,2465791999,CH
2465792000,2465857535,FR
2465857536,2465923071,US
@@ -58382,11 +58895,11 @@
2471219456,2471219679,FR
2471219691,2471219691,GB
2471219712,2471223295,IL
-2471223296,2471227391,CH
-2471227392,2471231487,US
+2471223296,2471231487,US
2471231488,2471297023,AU
2471297024,2471362559,GB
-2471428096,2471690239,US
+2471428096,2471624703,US
+2471624704,2471690239,RO
2471690240,2471821311,ES
2471821312,2471886847,US
2471886848,2472083455,CH
@@ -58516,7 +59029,11 @@
2486697984,2486763519,ES
2486763520,2486927359,US
2486927360,2486928127,CA
-2486928128,2486949887,US
+2486928128,2486928895,US
+2486928896,2486929151,CA
+2486929152,2486946815,US
+2486946816,2486947327,CA
+2486947328,2486949887,US
2486949888,2486951423,CA
2486951424,2486952959,US
2486952960,2486953471,CA
@@ -58690,7 +59207,9 @@
2500202752,2500203007,ES
2500203008,2500209663,US
2500209664,2500210687,GB
-2500210688,2500211728,US
+2500210688,2500211671,US
+2500211672,2500211679,RO
+2500211680,2500211728,US
2500211729,2500211730,SI
2500211731,2500212415,US
2500212416,2500212423,CH
@@ -58734,7 +59253,9 @@
2500289024,2500289535,FR
2500289536,2500290559,US
2500290560,2500290815,FR
-2500290816,2500292607,US
+2500290816,2500291327,US
+2500291328,2500291583,FR
+2500291584,2500292607,US
2500292608,2500296703,DE
2500296704,2500313087,US
2500313088,2500317183,AT
@@ -58746,7 +59267,9 @@
2500393984,2500394239,GB
2500394240,2500532749,US
2500532750,2500532750,GR
-2500532751,2500535399,US
+2500532751,2500535327,US
+2500535328,2500535335,IE
+2500535336,2500535399,US
2500535400,2500535407,IE
2500535408,2500536319,US
2500536320,2500538367,GB
@@ -58754,7 +59277,9 @@
2500542752,2500542755,NL
2500542756,2500544767,US
2500544768,2500545023,GR
-2500545024,2500546559,US
+2500545024,2500545703,US
+2500545704,2500545711,SE
+2500545712,2500546559,US
2500546560,2500549271,UA
2500549272,2500549279,ES
2500549280,2500550655,UA
@@ -58763,7 +59288,9 @@
2500553760,2500553767,GB
2500553768,2500554379,US
2500554380,2500554487,DE
-2500554488,2500560895,US
+2500554488,2500556295,US
+2500556296,2500556303,CZ
+2500556304,2500560895,US
2500560896,2500562943,GB
2500562944,2500562959,US
2500562960,2500562967,ES
@@ -58792,7 +59319,9 @@
2500661760,2500662271,ES
2500662272,2500663295,US
2500663296,2500664319,ES
-2500664320,2500666111,US
+2500664320,2500665087,US
+2500665088,2500665343,ES
+2500665344,2500666111,US
2500666368,2500666463,US
2500666464,2500666471,LU
2500666472,2500681759,US
@@ -58814,13 +59343,19 @@
2500723968,2500726783,GB
2500726784,2500728063,US
2500728064,2500728319,GB
-2500728320,2500739071,US
+2500728320,2500732063,US
+2500732064,2500732071,GB
+2500732072,2500739071,US
2500739072,2500740095,DE
2500740096,2500740417,US
2500740418,2500740418,DE
2500740419,2500743215,US
2500743216,2500743223,GB
-2500743224,2500984831,US
+2500743224,2500746767,US
+2500746768,2500746775,GB
+2500746776,2500748543,US
+2500748544,2500748799,ES
+2500748800,2500984831,US
2500984832,2501033983,GB
2501033984,2501574655,US
2501574656,2501640191,KZ
@@ -58830,7 +59365,8 @@
2502041600,2502045695,ES
2502045696,2502047743,US
2502047744,2502049791,ES
-2502049792,2502164479,US
+2502049792,2502098943,US
+2502098944,2502164479,IT
2502164480,2502165503,GB
2502165504,2503016447,US
2503016448,2503147519,IL
@@ -58931,7 +59467,9 @@
2505703424,2505768959,PT
2505768960,2505770495,US
2505770496,2505771007,ES
-2505771008,2505789439,US
+2505771008,2505772543,US
+2505772544,2505772799,GB
+2505772800,2505789439,US
2505789440,2505790463,FR
2505790464,2505791487,US
2505791488,2505792511,FR
@@ -58989,7 +59527,29 @@
2508109824,2508111871,DE
2508111872,2508128255,RU
2508128256,2508259327,US
-2508259328,2508324863,MY
+2508259328,2508261375,MY
+2508261376,2508262911,SG
+2508262912,2508263167,MY
+2508263168,2508263423,SG
+2508263424,2508265471,MY
+2508265472,2508266495,SG
+2508266496,2508267519,MY
+2508267520,2508269567,SG
+2508269568,2508277759,MY
+2508277760,2508280831,SG
+2508280832,2508281343,MY
+2508281344,2508282879,SG
+2508282880,2508296959,MY
+2508296960,2508297471,SG
+2508297472,2508297727,MY
+2508297728,2508298239,SG
+2508298240,2508307455,MY
+2508307456,2508308479,SG
+2508308480,2508312575,MY
+2508312576,2508313855,SG
+2508313856,2508316671,MY
+2508316672,2508320767,SG
+2508320768,2508324863,MY
2508324864,2508455935,US
2508455936,2508521471,IT
2508521472,2508587007,CH
@@ -59069,7 +59629,9 @@
2513057047,2513068287,FR
2513068288,2513068351,ES
2513068352,2513068415,GB
-2513068416,2513068631,FR
+2513068416,2513068448,FR
+2513068449,2513068449,DE
+2513068450,2513068631,FR
2513068632,2513068635,PT
2513068636,2513070559,FR
2513070560,2513070591,ES
@@ -59077,7 +59639,9 @@
2513070624,2513070655,ES
2513070656,2513071435,FR
2513071436,2513071439,NL
-2513071440,2513073375,FR
+2513071440,2513071595,FR
+2513071596,2513071599,FI
+2513071600,2513073375,FR
2513073376,2513073391,BE
2513073392,2513073791,FR
2513073792,2513073855,IT
@@ -59124,7 +59688,9 @@
2513101920,2513101951,PT
2513101952,2513102047,FR
2513102048,2513102063,ES
-2513102064,2513102899,FR
+2513102064,2513102511,FR
+2513102512,2513102515,GB
+2513102516,2513102899,FR
2513102900,2513102903,CZ
2513102904,2513103895,FR
2513103896,2513103935,PT
@@ -59197,7 +59763,9 @@
2516582400,2516647935,CN
2516647936,2522812415,JP
2522812416,2522813439,VN
-2522813440,2522816511,SG
+2522813440,2522814463,TH
+2522814464,2522815743,SG
+2522815744,2522816511,TH
2522816512,2523201535,JP
2523201536,2523267071,AU
2523267072,2523463679,US
@@ -59276,7 +59844,7 @@
2525071360,2525072383,CN
2525072384,2525073407,MN
2525073408,2525075455,IN
-2525075456,2525076479,CN
+2525075456,2525076479,HK
2525076480,2525077503,IN
2525077504,2525078527,ID
2525078528,2525083647,IN
@@ -59378,7 +59946,11 @@
2532506624,2532507647,IN
2532507648,2532573183,US
2532573184,2532638719,ES
-2532638720,2533031935,US
+2532638720,2532704255,US
+2532704256,2532769791,JP
+2532769792,2532900863,US
+2532900864,2532966399,JP
+2532966400,2533031935,US
2533031936,2533032191,HK
2533032192,2533032447,SG
2533032448,2533032703,FR
@@ -59391,7 +59963,9 @@
2533294080,2533359615,CN
2533359616,2533375999,UA
2533376000,2533392383,HU
-2533392384,2538602495,IT
+2533392384,2534823255,IT
+2534823256,2534823263,SI
+2534823264,2538602495,IT
2538602496,2538604967,FR
2538604968,2538604975,ES
2538604976,2538605271,FR
@@ -59405,7 +59979,9 @@
2538606032,2538606039,ES
2538606040,2538606043,FR
2538606044,2538606047,DE
-2538606048,2538606403,FR
+2538606048,2538606343,FR
+2538606344,2538606351,PL
+2538606352,2538606403,FR
2538606404,2538606407,GB
2538606408,2538613134,FR
2538613135,2538613135,NL
@@ -59431,7 +60007,9 @@
2538625584,2538625599,PT
2538625600,2538626687,FR
2538626688,2538626703,ES
-2538626704,2538631583,FR
+2538626704,2538629727,FR
+2538629728,2538629759,ES
+2538629760,2538631583,FR
2538631584,2538631615,FI
2538631616,2538633551,FR
2538633552,2538633567,IE
@@ -59504,7 +60082,9 @@
2538657440,2538657443,ES
2538657444,2538657967,FR
2538657968,2538657983,IE
-2538657984,2538658347,FR
+2538657984,2538658327,FR
+2538658328,2538658331,IE
+2538658332,2538658347,FR
2538658348,2538658351,DE
2538658352,2538658495,FR
2538658496,2538658499,DE
@@ -59565,6 +60145,7 @@
2547524608,2547525631,IR
2547525632,2547535871,GB
2547548160,2547580927,NO
+2547580928,2547646463,DE
2548039680,2548072320,GB
2548072321,2548072321,US
2548072322,2548563967,GB
@@ -59718,9 +60299,34 @@
2556559360,2556624895,AU
2556624896,2556690431,KR
2556690432,2556755967,US
-2556755968,2556780031,HK
+2556755968,2556757247,HK
+2556757248,2556757503,TW
+2556757504,2556757759,HK
+2556757760,2556758015,SG
+2556758016,2556761087,HK
+2556761088,2556761343,JP
+2556761344,2556762367,HK
+2556762368,2556763135,TW
+2556763136,2556763903,HK
+2556763904,2556764159,SG
+2556764160,2556764415,TW
+2556764416,2556766207,HK
+2556766208,2556766719,DE
+2556766720,2556768767,HK
+2556768768,2556769023,TW
+2556769024,2556773887,HK
+2556773888,2556774143,SG
+2556774144,2556776703,HK
+2556776704,2556776959,DE
+2556776960,2556780031,HK
2556780032,2556780799,SG
-2556780800,2556821503,HK
+2556780800,2556787967,HK
+2556787968,2556788223,JP
+2556788224,2556800511,HK
+2556800512,2556800767,TW
+2556800768,2556807423,HK
+2556807424,2556807679,JP
+2556807680,2556821503,HK
2556821504,2556887039,SG
2556887040,2556985343,HK
2556985344,2557018111,CN
@@ -59796,7 +60402,9 @@
2570125312,2570190847,BE
2570190848,2572681215,US
2572681216,2572746751,SE
-2572746752,2572947455,US
+2572746752,2572944127,US
+2572944128,2572944383,LT
+2572944384,2572947455,US
2572947456,2572950271,PL
2572950272,2572950527,ES
2572950528,2572951551,DE
@@ -59922,7 +60530,7 @@
2584741376,2584741439,AU
2584741440,2584741503,ZA
2584741504,2584741519,IE
-2584741520,2584741631,ZA
+2584741520,2584741631,DE
2584741632,2584741887,US
2584741888,2584741951,AU
2584741952,2584742143,ZA
@@ -59979,23 +60587,29 @@
2584750336,2584750591,US
2584750592,2584750655,MY
2584750656,2584750687,DE
-2584750688,2584750847,ZA
+2584750688,2584750719,ZA
+2584750720,2584750847,DE
2584750848,2584751103,US
2584751104,2584751167,AE
-2584751168,2584751359,ZA
+2584751168,2584751231,ZA
+2584751232,2584751359,DE
2584751360,2584751615,US
2584751616,2584751679,AE
-2584751680,2584751871,ZA
+2584751680,2584751743,ZA
+2584751744,2584751871,DE
2584751872,2584752127,US
2584752128,2584752191,AE
2584752192,2584752207,SE
-2584752208,2584752383,ZA
+2584752208,2584752255,ZA
+2584752256,2584752383,DE
2584752384,2584752639,US
2584752640,2584752703,AE
-2584752704,2584752895,ZA
+2584752704,2584752767,ZA
+2584752768,2584752895,DE
2584752896,2584753151,US
2584753152,2584753215,AE
-2584753216,2584753407,ZA
+2584753216,2584753279,ZA
+2584753280,2584753407,DE
2584753408,2584753663,US
2584753664,2584753727,AE
2584753728,2584753919,ZA
@@ -60092,7 +60706,9 @@
2586379264,2586480639,US
2586480640,2586484735,IL
2586484736,2586492927,GB
-2586492928,2586510335,US
+2586492928,2586509823,US
+2586509824,2586510079,ES
+2586510080,2586510335,US
2586510336,2586511359,ES
2586511360,2586544127,US
2586544128,2586546175,SE
@@ -60136,7 +60752,9 @@
2586805504,2586805759,ES
2586805760,2586806271,US
2586806272,2586807295,ES
-2586807296,2586828799,US
+2586807296,2586814463,US
+2586814464,2586816511,RO
+2586816512,2586828799,US
2586828800,2586828863,CH
2586828864,2586829311,US
2586829312,2586829823,CH
@@ -60199,8 +60817,10 @@
2587362048,2587377663,US
2587377664,2587385855,FR
2587385856,2587394047,US
-2587394048,2587399167,ES
-2587399168,2587410431,US
+2587394048,2587399423,ES
+2587399424,2587399679,US
+2587399680,2587400191,ES
+2587400192,2587410431,US
2587410432,2587418623,IT
2587418624,2587426815,US
2587426816,2587435007,GR
@@ -60232,15 +60852,17 @@
2587596800,2587598847,GB
2587598848,2587623423,US
2587623424,2587631615,BG
-2587631616,2587639807,US
+2587631616,2587631871,US
+2587631872,2587632127,ES
+2587632128,2587639807,US
2587639808,2587640063,GB
2587640064,2587648511,US
2587648512,2587649023,ES
2587649024,2587674623,US
2587674624,2587676671,IT
2587676672,2587681279,US
-2587681280,2587681791,ES
-2587681792,2587697151,US
+2587681280,2587682815,ES
+2587682816,2587697151,US
2587697152,2587697407,GB
2587697408,2587698175,US
2587698176,2587699199,GB
@@ -60370,7 +60992,9 @@
2588502016,2588503039,BI
2588503040,2588504063,LY
2588504064,2588505087,TD
-2588505088,2588506111,CG
+2588505088,2588505599,CG
+2588505600,2588505855,US
+2588505856,2588506111,CG
2588506112,2588507135,ZA
2588507136,2588508159,SO
2588508160,2588510207,LY
@@ -60466,6 +61090,7 @@
2596339712,2597322751,ZA
2597322752,2598371327,US
2598371328,2598895615,UG
+2598895616,2599157759,CI
2599419904,2600468479,DZ
2600468480,2600534015,ZM
2600534016,2600665087,US
@@ -60617,9 +61242,10 @@
2617115136,2617115647,CA
2617115648,2617123839,US
2617123840,2617124095,DE
-2617124096,2617124863,US
+2617124352,2617124607,US
2617124864,2617126911,NL
-2617126912,2617131007,US
+2617129984,2617130239,US
+2617130496,2617130751,US
2617131008,2617139199,CA
2617139200,2617139455,PE
2617139456,2617139711,SZ
@@ -60653,7 +61279,11 @@
2617146880,2617147135,DE
2617147136,2617149439,US
2617149440,2617151487,CA
-2617151488,2617163775,US
+2617151488,2617157119,US
+2617157120,2617157631,RU
+2617157632,2617158655,US
+2617158656,2617159679,SE
+2617159680,2617163775,US
2617163776,2617164031,SK
2617164032,2617164287,MC
2617164288,2617164543,AZ
@@ -60934,7 +61564,9 @@
2624302147,2624302335,AU
2624302336,2624302591,US
2624302592,2624303103,AU
-2624303104,2624391696,US
+2624303104,2624303615,US
+2624303616,2624304639,CN
+2624304640,2624391696,US
2624391698,2624393727,US
2624393984,2624395263,US
2624395264,2624395775,GB
@@ -60966,7 +61598,7 @@
2634022912,2634088447,CN
2634088448,2635202559,JP
2635202560,2635268095,CN
-2635268096,2635399167,JP
+2635268096,2635333631,JP
2635399168,2635530239,US
2635530240,2635595775,FR
2635595776,2635661311,FI
@@ -61012,22 +61644,29 @@
2637630656,2637630783,IE
2637630784,2637630847,US
2637630848,2637631487,IE
-2637631488,2637637631,US
-2637637632,2637637887,NL
+2637631488,2637637663,US
+2637637664,2637637695,NL
+2637637696,2637637759,US
+2637637760,2637637887,NL
2637637888,2637638143,IE
2637638144,2637638399,NL
2637638400,2637638463,IE
-2637638464,2637638503,NL
+2637638464,2637638495,NL
+2637638496,2637638503,US
2637638504,2637638511,IE
-2637638512,2637638671,NL
+2637638512,2637638671,US
2637638672,2637638815,IE
2637638816,2637638879,NL
2637638880,2637638911,IE
-2637638912,2637639167,NL
+2637638912,2637638927,NL
+2637638928,2637639167,US
2637639168,2637639199,IE
-2637639200,2637639359,NL
+2637639200,2637639231,US
+2637639232,2637639295,NL
+2637639296,2637639327,US
+2637639328,2637639359,NL
2637639360,2637639383,IE
-2637639384,2637639391,NL
+2637639384,2637639391,US
2637639392,2637639423,IE
2637639424,2637639551,NL
2637639552,2637639679,IE
@@ -61126,15 +61765,16 @@
2640314368,2640379903,GB
2640379904,2640402431,NL
2640402432,2640404479,ES
-2640404480,2640406527,NL
+2640404480,2640405503,NL
+2640405504,2640406527,US
2640406528,2640408575,DE
2640408576,2640410623,NL
2640410624,2640411135,US
2640411136,2640411391,MX
2640411392,2640411647,NL
2640411648,2640412671,US
-2640412672,2640424959,NL
-2640424960,2640427007,ES
+2640412672,2640423935,NL
+2640423936,2640427007,ES
2640427008,2640445439,NL
2640445440,2640510975,US
2640510976,2640576511,FR
@@ -61454,8 +62094,10 @@
2659385344,2659450879,FI
2659450880,2659516415,HK
2659516416,2659581951,CH
-2659581952,2659991552,US
-2659991553,2660007935,PS
+2659581952,2659979263,US
+2659979264,2659983359,PS
+2659983360,2659991551,US
+2659991552,2660007935,PS
2660007936,2660016127,SG
2660016128,2660024319,ID
2660024320,2660032511,AU
@@ -61698,7 +62340,9 @@
2674917376,2675048447,US
2675048448,2675113983,GB
2675113984,2675245055,US
-2675245056,2675302399,NZ
+2675245056,2675286015,NZ
+2675286016,2675294207,US
+2675294208,2675302399,NZ
2675302400,2675310591,HK
2675310592,2675574239,US
2675574240,2675574271,IT
@@ -61726,19 +62370,25 @@
2675608752,2675608767,HK
2675608768,2675608983,US
2675608984,2675608991,AU
-2675608992,2675609487,US
+2675608992,2675609011,US
+2675609012,2675609015,JP
+2675609016,2675609487,US
2675609488,2675609503,CN
2675609504,2675610191,US
2675610192,2675610207,IL
2675610208,2675611295,US
2675611296,2675611359,IT
-2675611360,2675613119,US
+2675611360,2675612487,US
+2675612488,2675612495,IT
+2675612496,2675613119,US
2675613120,2675613151,IT
2675613152,2675613279,US
2675613280,2675613311,IT
2675613312,2675613463,US
2675613464,2675613471,IL
-2675613472,2675624399,US
+2675613472,2675613599,US
+2675613600,2675613631,JP
+2675613632,2675624399,US
2675624400,2675624415,CN
2675624416,2675626239,US
2675626240,2675626271,GB
@@ -61752,9 +62402,7 @@
2675633184,2675633215,GB
2675633216,2675633359,US
2675633360,2675633375,GB
-2675633376,2675636143,US
-2675636144,2675636151,GB
-2675636152,2675636170,US
+2675633376,2675636170,US
2675636171,2675636171,GB
2675636172,2675965951,US
2675965952,2676031487,CA
@@ -62032,7 +62680,8 @@
2684340224,2684344319,GB
2684344320,2684346367,NL
2684346368,2684354559,FI
-2684354560,2684616703,US
+2684354560,2684387327,MU
+2684420096,2684616703,US
2684616704,2684682239,NZ
2684682240,2684747775,GB
2684747776,2684813311,IE
@@ -62062,7 +62711,8 @@
2685677568,2685678591,CN
2685678592,2685681663,HK
2685724672,2685726719,CA
-2685730816,2686320639,JP
+2685730816,2685796351,JP
+2685861888,2686320639,JP
2686386176,2686844927,US
2686844928,2686910463,GB
2686910464,2686975999,US
@@ -62154,7 +62804,8 @@
2696216576,2696282111,BG
2696282112,2696413183,GM
2696413184,2696478719,US
-2696478720,2697594879,JP
+2696478720,2696609791,JP
+2696675328,2697594879,JP
2697594880,2697596927,IN
2697601024,2697602047,KH
2697602048,2697603071,IN
@@ -62358,7 +63009,7 @@
2708537344,2708635135,US
2708635392,2708733951,US
2708733952,2708799487,ES
-2708799488,2708865023,AU
+2708799488,2708865023,SG
2708865024,2708930559,JP
2708930560,2709127167,US
2709127168,2709192703,KR
@@ -62440,25 +63091,21 @@
2714373128,2714373128,SG
2714373129,2714373279,US
2714373280,2714373287,NL
-2714373288,2714373743,US
+2714373288,2714373711,US
+2714373712,2714373719,ID
+2714373720,2714373743,US
2714373744,2714373759,IN
-2714373760,2714375215,US
-2714375216,2714375231,ID
-2714375232,2714376223,US
+2714373760,2714376223,US
2714376224,2714376239,JP
2714376240,2714377103,US
2714377104,2714377119,IN
2714377120,2714377439,US
2714377440,2714377471,SG
-2714377472,2714377735,US
-2714377736,2714377743,ID
-2714377744,2714378463,US
+2714377472,2714378463,US
2714378464,2714378495,HK
2714378496,2714379103,US
2714379104,2714379135,HK
-2714379136,2714381183,US
-2714381184,2714381191,DE
-2714381192,2714381951,US
+2714379136,2714381951,US
2714381952,2714381983,HK
2714381984,2714382530,US
2714382531,2714382531,HK
@@ -62482,17 +63129,13 @@
2714408704,2714408719,JP
2714408720,2714408959,US
2714408960,2714408991,JP
-2714408992,2714410883,US
-2714410884,2714410887,TW
-2714410888,2714412655,US
+2714408992,2714412655,US
2714412656,2714412671,VN
2714412672,2714413343,US
2714413344,2714413359,PH
2714413360,2714416375,US
2714416376,2714416383,IN
-2714416384,2714416991,US
-2714416992,2714416999,JP
-2714417000,2714417215,US
+2714416384,2714417215,US
2714417216,2714417247,JP
2714417248,2714419743,US
2714419744,2714419775,SG
@@ -62508,9 +63151,7 @@
2714422880,2714422911,SG
2714422912,2714428767,US
2714428768,2714428783,JP
-2714428784,2714430719,US
-2714430720,2714430751,TW
-2714430752,2714697727,US
+2714428784,2714697727,US
2714697728,2714763263,CN
2714763264,2715025407,US
2715025408,2715090943,VE
@@ -62630,8 +63271,8 @@
2728272896,2728273919,IE
2728273920,2728274943,KE
2728274944,2728278015,IN
-2728278016,2728284159,US
-2728284160,2728288255,DE
+2728278016,2728284671,US
+2728284672,2728288255,DE
2728288256,2728289279,AE
2728289280,2728290303,PL
2728290304,2728291327,US
@@ -62648,7 +63289,7 @@
2728300544,2728301567,CA
2728301568,2728302591,CH
2728302592,2728303615,GB
-2728303616,2728304639,AT
+2728303616,2728304639,US
2728304640,2728306687,SG
2728306688,2728308735,US
2728308736,2728309759,HK
@@ -62979,7 +63620,9 @@
2734452736,2734454783,CA
2734454784,2734457855,US
2734457856,2734458879,CA
-2734458880,2734471167,US
+2734458880,2734467327,US
+2734467328,2734467583,CA
+2734467584,2734471167,US
2734471168,2734472191,CA
2734472192,2734473215,AG
2734473216,2734477311,US
@@ -63051,7 +63694,7 @@
2737602560,2737610751,SG
2737610752,2737618943,JP
2737618944,2737619967,VN
-2737619968,2737620991,SG
+2737619968,2737620991,TH
2737620992,2737621247,VN
2737621248,2737622015,SG
2737622016,2737623039,VN
@@ -63195,7 +63838,7 @@
2748645376,2748710911,KR
2748710912,2749235199,JP
2749235200,2749300735,KR
-2749300736,2749628415,JP
+2749366272,2749628415,JP
2749628416,2749693951,US
2749693952,2749759487,KR
2749759488,2749890559,US
@@ -63335,7 +63978,11 @@
2760118876,2760118878,BE
2760118879,2760118975,FR
2760118976,2760119039,ES
-2760119040,2760119967,FR
+2760119040,2760119263,FR
+2760119264,2760119295,PL
+2760119296,2760119495,FR
+2760119496,2760119499,ES
+2760119500,2760119967,FR
2760119968,2760119983,GB
2760119984,2760120543,FR
2760120544,2760120575,ES
@@ -63352,11 +63999,15 @@
2760132160,2760132223,ES
2760132224,2760132911,FR
2760132912,2760132927,PT
-2760132928,2760134975,FR
+2760132928,2760134783,FR
+2760134784,2760134799,ES
+2760134800,2760134975,FR
2760134976,2760135039,ES
2760135040,2760135935,FR
2760135936,2760136191,PT
-2760136192,2760137535,FR
+2760136192,2760137215,FR
+2760137216,2760137471,GB
+2760137472,2760137535,FR
2760137536,2760137599,ES
2760137600,2760138335,FR
2760138336,2760138367,FI
@@ -63368,7 +64019,9 @@
2760145216,2760145279,ES
2760145280,2760145855,FR
2760145856,2760145919,GB
-2760145920,2760147647,FR
+2760145920,2760146111,FR
+2760146112,2760146143,FI
+2760146144,2760147647,FR
2760147648,2760147711,ES
2760147712,2760148551,FR
2760148552,2760148559,FI
@@ -63390,7 +64043,8 @@
2760151344,2760151359,GB
2760151360,2760151903,FR
2760151904,2760151935,PT
-2760151936,2760152607,FR
+2760151936,2760152591,FR
+2760152592,2760152607,PL
2760152608,2760152639,FI
2760152640,2760153439,FR
2760153440,2760153471,ES
@@ -63412,7 +64066,11 @@
2760162682,2760162682,PL
2760162683,2760163135,FR
2760163136,2760163199,ES
-2760163200,2760167951,FR
+2760163200,2760167583,FR
+2760167584,2760167599,ES
+2760167600,2760167647,FR
+2760167648,2760167679,GB
+2760167680,2760167951,FR
2760167952,2760167967,ES
2760167968,2760168127,FR
2760168128,2760168191,IE
@@ -63603,7 +64261,7 @@
2774532096,2774597631,JP
2774597632,2774663167,US
2774663168,2774728703,NI
-2774728704,2774990847,JP
+2774794240,2774990847,JP
2774990848,2775318527,US
2775318528,2775384063,JP
2775384064,2775711743,US
@@ -63710,8 +64368,8 @@
2782855168,2782990335,US
2782990336,2782990847,GB
2782990848,2782995455,US
-2782995456,2782996479,CA
-2782996480,2783002623,US
+2782995456,2782995967,CA
+2782995968,2783002623,US
2783002624,2783002879,DK
2783002880,2783003135,US
2783003136,2783003391,RU
@@ -63725,7 +64383,8 @@
2783006720,2783007743,GB
2783007744,2783008255,PL
2783008256,2783008767,IT
-2783008768,2783010815,US
+2783008768,2783009279,BE
+2783009280,2783010815,US
2783010816,2783011327,HK
2783011328,2783011839,AU
2783011840,2783012351,JP
@@ -63927,7 +64586,9 @@
2809316624,2809321007,CA
2809321008,2809321015,US
2809321016,2809323519,CA
-2809323520,2809331711,FR
+2809323520,2809327569,FR
+2809327570,2809327570,RU
+2809327571,2809331711,FR
2809331712,2809397247,US
2809397248,2809462783,UY
2809462784,2809855999,US
@@ -63948,7 +64609,7 @@
2811625472,2812084223,US
2812084224,2812149759,BO
2812149760,2812280831,US
-2812280832,2812289023,TR
+2812280832,2812289023,NL
2812289024,2812291071,US
2812291072,2812292095,DE
2812292096,2812293119,US
@@ -63995,7 +64656,9 @@
2816271616,2816271871,JP
2816271872,2816272127,IN
2816272128,2816272383,AU
-2816272384,2816273407,JP
+2816272384,2816272415,JP
+2816272416,2816272543,SG
+2816272544,2816273407,JP
2816273408,2816274431,IN
2816274432,2816275455,AU
2816275456,2816276479,CN
@@ -64220,7 +64883,8 @@
2826977792,2826978047,NL
2826978048,2826985471,ZA
2826985472,2826987519,NZ
-2826987520,2827026431,ZA
+2826987520,2826989567,GB
+2826989568,2827026431,ZA
2827026432,2827091967,US
2827091968,2827157503,AU
2827157504,2827223039,KR
@@ -64390,8 +65054,7 @@
2831482880,2831493119,BR
2831493120,2831494143,MX
2831494144,2831496191,AR
-2831496192,2831497215,BR
-2831498240,2831500287,BR
+2831496192,2831500287,BR
2831500288,2831501311,CO
2831501312,2831505407,BR
2831505408,2831506431,CL
@@ -64401,8 +65064,10 @@
2831509504,2831510527,BR
2831510528,2831511551,SX
2831511552,2831513599,BR
-2831514624,2831515647,MX
-2831515648,2831524863,BR
+2831513600,2831515647,MX
+2831515648,2831516671,BR
+2831516672,2831517695,CR
+2831517696,2831524863,BR
2831524864,2831525887,AR
2831525888,2831526911,BR
2831526912,2831527935,HN
@@ -64412,6 +65077,7 @@
2831531008,2831532031,EC
2831532032,2831533055,BR
2831533056,2831535103,AR
+2831535104,2831536127,BR
2831536128,2831537151,BZ
2831537152,2831538175,BR
2831538176,2831539199,AR
@@ -64576,9 +65242,7 @@
2838260096,2838260127,IE
2838260128,2838261759,US
2838261760,2838265855,GB
-2838265856,2838266751,US
-2838266752,2838266783,NL
-2838266784,2838298623,US
+2838265856,2838298623,US
2838298624,2838298655,NL
2838298656,2838298687,US
2838298688,2838298975,NL
@@ -64587,9 +65251,7 @@
2838299440,2838299455,US
2838299456,2838299695,NL
2838299696,2838299775,US
-2838299776,2838300035,NL
-2838300036,2838300039,US
-2838300040,2838300671,NL
+2838299776,2838300671,NL
2838300672,2838300927,US
2838300928,2838301119,NL
2838301120,2838301183,US
@@ -64601,9 +65263,17 @@
2838304224,2838304255,US
2838304256,2838304319,NL
2838304320,2838304383,US
-2838304384,2838307055,NL
+2838304384,2838304447,NL
+2838304448,2838304511,US
+2838304512,2838304703,NL
+2838304704,2838304767,US
+2838304768,2838307055,NL
2838307056,2838307063,US
-2838307064,2838307295,NL
+2838307064,2838307135,NL
+2838307136,2838307167,US
+2838307168,2838307199,NL
+2838307200,2838307231,US
+2838307232,2838307295,NL
2838307296,2838307303,US
2838307304,2838307311,NL
2838307312,2838307327,US
@@ -64615,11 +65285,11 @@
2838315392,2838315407,US
2838315408,2838315567,NL
2838315568,2838315583,US
-2838315584,2838315695,NL
-2838315696,2838315711,US
-2838315712,2838315740,NL
+2838315584,2838315740,NL
2838315741,2838315741,US
-2838315742,2838316063,NL
+2838315742,2838315799,NL
+2838315800,2838315801,US
+2838315802,2838316063,NL
2838316064,2838316079,US
2838316080,2838316591,NL
2838316592,2838316607,US
@@ -64627,9 +65297,13 @@
2838316624,2838316631,US
2838316632,2838316767,NL
2838316768,2838316783,US
-2838316784,2838318511,NL
+2838316784,2838317901,NL
+2838317902,2838317903,US
+2838317904,2838318511,NL
2838318512,2838318527,US
-2838318528,2838320191,NL
+2838318528,2838319135,NL
+2838319136,2838319167,US
+2838319168,2838320191,NL
2838320192,2838320192,US
2838320193,2838320543,NL
2838320544,2838320551,US
@@ -64641,9 +65315,7 @@
2838321472,2838321535,US
2838321536,2838323071,NL
2838323072,2838323103,US
-2838323104,2838323455,NL
-2838323456,2838323487,US
-2838323488,2838323535,NL
+2838323104,2838323535,NL
2838323536,2838323583,US
2838323584,2838324039,NL
2838324040,2838324047,US
@@ -64670,7 +65342,9 @@
2838330163,2838330575,NL
2838330576,2838330591,US
2838330592,2838330735,NL
-2838330736,2838330815,US
+2838330736,2838330751,US
+2838330752,2838330767,NL
+2838330768,2838330815,US
2838330816,2838331535,NL
2838331536,2838331551,US
2838331552,2838331567,NL
@@ -64686,9 +65360,7 @@
2838337296,2838337759,NL
2838337760,2838337761,IN
2838337762,2838337763,US
-2838337764,2838338177,NL
-2838338178,2838338179,IN
-2838338180,2838338271,NL
+2838337764,2838338271,NL
2838338272,2838338303,JP
2838338304,2838338567,NL
2838338568,2838338575,US
@@ -64701,9 +65373,7 @@
2838338816,2838338823,US
2838338824,2838339743,NL
2838339744,2838339759,US
-2838339760,2838339871,NL
-2838339872,2838339903,US
-2838339904,2838340015,NL
+2838339760,2838340015,NL
2838340016,2838340031,US
2838340032,2838340351,NL
2838340352,2838340383,US
@@ -64735,15 +65405,15 @@
2838345744,2838345751,US
2838345752,2838346015,NL
2838346016,2838346047,US
-2838346048,2838346559,NL
+2838346048,2838346239,NL
+2838346240,2838346271,US
+2838346272,2838346559,NL
2838346560,2838346591,US
2838346592,2838346623,NL
2838346624,2838346655,US
2838346656,2838346687,NL
2838346688,2838346719,US
-2838346720,2838347007,NL
-2838347008,2838347015,JP
-2838347016,2838347031,NL
+2838346720,2838347031,NL
2838347032,2838347039,US
2838347040,2838347231,NL
2838347232,2838347271,US
@@ -64767,7 +65437,9 @@
2838349808,2838349823,US
2838349824,2838350911,NL
2838350912,2838350927,US
-2838350928,2838351295,NL
+2838350928,2838351135,NL
+2838351136,2838351167,US
+2838351168,2838351295,NL
2838351296,2838351327,US
2838351328,2838351623,NL
2838351624,2838351631,US
@@ -64775,7 +65447,9 @@
2838351712,2838351743,CO
2838351744,2838352575,NL
2838352576,2838352583,US
-2838352584,2838352639,NL
+2838352584,2838352591,NL
+2838352592,2838352599,US
+2838352600,2838352639,NL
2838352640,2838352655,CO
2838352656,2838355151,NL
2838355152,2838355159,US
@@ -64850,12 +65524,20 @@
2838408896,2838409439,NL
2838409440,2838409471,US
2838409472,2838409479,NL
-2838409480,2838409487,US
-2838409488,2838410719,NL
-2838410720,2838410751,US
-2838410752,2838410895,NL
+2838409480,2838409503,US
+2838409504,2838410191,NL
+2838410192,2838410199,US
+2838410200,2838410367,NL
+2838410368,2838410399,US
+2838410400,2838410895,NL
2838410896,2838410911,US
-2838410912,2838429983,NL
+2838410912,2838411327,NL
+2838411328,2838411359,US
+2838411360,2838413311,NL
+2838413312,2838415359,US
+2838415360,2838415391,NL
+2838415392,2838415423,US
+2838415424,2838429983,NL
2838429984,2838430015,US
2838430016,2838431039,NL
2838431040,2838431135,US
@@ -64865,9 +65547,7 @@
2838432000,2838432127,US
2838432128,2838433183,NL
2838433184,2838433199,US
-2838433200,2838433201,NL
-2838433202,2838433202,US
-2838433203,2838433519,NL
+2838433200,2838433519,NL
2838433520,2838433535,US
2838433536,2838433599,NL
2838433600,2838433607,US
@@ -64875,27 +65555,43 @@
2838433792,2838433855,US
2838433856,2838433919,NL
2838433920,2838433951,US
-2838433952,2838434271,NL
-2838434272,2838434303,US
-2838434304,2838434311,NL
-2838434312,2838434319,US
-2838434320,2838435519,NL
+2838433952,2838435519,NL
2838435520,2838435551,US
2838435552,2838436815,NL
2838436816,2838436831,US
2838436832,2838437359,NL
2838437360,2838437361,US
-2838437362,2838438127,NL
+2838437362,2838437375,NL
+2838437376,2838437407,US
+2838437408,2838437631,NL
+2838437632,2838437663,US
+2838437664,2838438127,NL
2838438128,2838438135,US
-2838438136,2838438415,NL
-2838438416,2838438431,US
-2838438432,2838560767,NL
+2838438136,2838438975,NL
+2838438976,2838439007,US
+2838439008,2838439935,NL
+2838439936,2838439943,US
+2838439944,2838441215,NL
+2838441216,2838441247,US
+2838441248,2838441375,NL
+2838441376,2838441407,US
+2838441408,2838441535,NL
+2838441536,2838441567,US
+2838441568,2838441695,NL
+2838441696,2838441711,US
+2838441712,2838560767,NL
2838560768,2838626303,CH
-2838626304,2838626575,US
+2838626304,2838626399,US
+2838626400,2838626431,SA
+2838626432,2838626575,US
2838626576,2838626591,CN
2838626592,2838628319,US
2838628320,2838628351,DE
-2838628352,2838631871,US
+2838628352,2838629331,US
+2838629332,2838629333,SA
+2838629334,2838631367,US
+2838631368,2838631375,SA
+2838631376,2838631871,US
2838631872,2838631903,DE
2838631904,2838631967,US
2838631968,2838631999,DE
@@ -64903,17 +65599,13 @@
2838632096,2838632127,DE
2838632128,2838633295,US
2838633296,2838633311,SA
-2838633312,2838642719,US
-2838642720,2838642723,GB
-2838642724,2838643407,US
+2838633312,2838643407,US
2838643408,2838643408,GB
2838643409,2838643487,US
2838643488,2838643519,HK
2838643520,2838643696,US
2838643697,2838643697,GB
-2838643698,2838643951,US
-2838643952,2838643967,NL
-2838643968,2838645839,US
+2838643698,2838645839,US
2838645840,2838645855,GB
2838645856,2838646207,US
2838646208,2838646239,GB
@@ -64931,13 +65623,11 @@
2838653632,2838653639,GB
2838653640,2838655527,US
2838655528,2838655535,GB
-2838655536,2838657295,US
-2838657296,2838657299,GB
-2838657300,2838657343,US
-2838657344,2838657351,GB
-2838657352,2838658607,US
+2838655536,2838658607,US
2838658608,2838658623,NL
-2838658624,2838663167,US
+2838658624,2838659007,US
+2838659008,2838659023,GB
+2838659024,2838663167,US
2838663168,2838663175,NL
2838663176,2838663807,US
2838663808,2838663809,BO
@@ -64947,13 +65637,13 @@
2838664128,2838664135,ES
2838664136,2838664167,US
2838664168,2838664175,VN
-2838664176,2838665759,US
+2838664176,2838664727,US
+2838664728,2838664735,ZA
+2838664736,2838665759,US
2838665760,2838665791,JP
2838665792,2838667103,US
2838667104,2838667135,NL
-2838667136,2838675519,US
-2838675520,2838675527,GR
-2838675528,2838708223,US
+2838667136,2838708223,US
2838708224,2838724607,NO
2838724608,2838757375,US
2838757376,2838822911,CH
@@ -64983,9 +65673,7 @@
2838881408,2838881423,IN
2838881424,2838887271,US
2838887272,2838887279,IN
-2838887280,2838887455,US
-2838887456,2838887487,BO
-2838887488,2838887871,US
+2838887280,2838887871,US
2838887872,2838887887,EC
2838887888,2838902591,US
2838902592,2838902623,BO
@@ -65009,9 +65697,7 @@
2838933920,2838933951,NL
2838933952,2838938991,US
2838938992,2838939007,AU
-2838939008,2838942753,US
-2838942754,2838942755,IN
-2838942756,2838946735,US
+2838939008,2838946735,US
2838946736,2838946751,CA
2838946752,2838957535,US
2838957536,2838957551,HK
@@ -65031,7 +65717,9 @@
2838969536,2838969536,IL
2838969537,2838969737,US
2838969738,2838969738,ES
-2838969739,2838988639,US
+2838969739,2838969828,US
+2838969829,2838969829,NL
+2838969830,2838988639,US
2838988640,2838988671,CA
2838988672,2838988687,US
2838988688,2838988703,CA
@@ -65045,9 +65733,7 @@
2838996064,2838996095,HK
2838996096,2838998015,US
2838998016,2838998047,CA
-2838998048,2838998527,US
-2838998528,2838998559,CA
-2838998560,2839010815,US
+2838998048,2839010815,US
2839010816,2839010847,NL
2839010848,2839035903,US
2839035904,2839052287,KR
@@ -65211,12 +65897,14 @@
2852187136,2852189183,BR
2852189184,2852190207,TT
2852190208,2852192255,BR
-2852192256,2853306367,US
+2852192256,2852839423,US
+2852839424,2852847615,CA
+2852847616,2853306367,US
2853306368,2853371903,CL
2853371904,2853765119,US
2853765120,2853830655,MX
2853830656,2854289407,US
-2854289408,2854354943,MY
+2854289408,2854354943,SG
2854354944,2854617087,US
2854617088,2854682623,MY
2854748160,2855288831,US
@@ -65243,8 +65931,11 @@
2856714240,2856779775,MX
2856779776,2857082879,US
2857082880,2857086975,CA
-2857086976,2857238527,US
+2857086976,2857140223,US
+2857140224,2857140735,CA
+2857140736,2857238527,US
2857238528,2857248767,BR
+2857248768,2857249791,CO
2857249792,2857250815,AR
2857250816,2857252863,BR
2857252864,2857253887,CO
@@ -65259,25 +65950,73 @@
2857270272,2857271295,AR
2857271296,2857273343,BR
2857273344,2857274367,AR
-2857274368,2857281535,BR
-2857283584,2857285631,BR
+2857274368,2857285631,BR
2857285632,2857285887,AR
+2857285888,2857286143,CO
2857286144,2857286655,BR
2857286656,2857287679,MX
2857287680,2857288703,AR
2857288704,2857289727,BR
2857289728,2857290751,AR
-2857291776,2857293823,BR
+2857290752,2857294847,BR
2857294848,2857295871,AR
-2857295872,2857308159,BR
+2857295872,2857303039,BR
+2857303040,2857304063,CL
+2857304064,2857308159,BR
2857308160,2857309183,AR
2857309184,2857313279,BR
2857313280,2857314303,PE
2857314304,2857315327,CL
-2857315328,2857317375,BR
-2857323520,2857324031,BR
+2857315328,2857324031,BR
2857324032,2857324543,US
-2857336832,2857369599,BR
+2857324544,2857326591,BR
+2857326592,2857327615,CO
+2857327616,2857329663,BR
+2857329664,2857330687,CL
+2857330688,2857331711,BR
+2857331712,2857332735,PA
+2857332736,2857335807,BR
+2857335808,2857336831,MX
+2857336832,2857340927,BR
+2857340928,2857341951,DO
+2857341952,2857350143,BR
+2857350144,2857351167,AR
+2857351168,2857363455,BR
+2857363456,2857364479,CL
+2857364480,2857368575,BR
+2857368576,2857369599,AR
+2857369600,2857371647,BR
+2857371648,2857372671,CO
+2857372672,2857373695,BR
+2857373696,2857374719,NI
+2857374720,2857375743,GT
+2857375744,2857376767,AR
+2857376768,2857377791,MX
+2857377792,2857387007,BR
+2857388032,2857389055,CL
+2857389056,2857390079,BR
+2857392128,2857393151,CR
+2857393152,2857394175,CL
+2857394176,2857399295,BR
+2857399296,2857400319,AR
+2857400320,2857402367,BR
+2857403392,2857404415,BR
+2857404416,2857405439,AR
+2857405440,2857406463,HN
+2857406464,2857411583,BR
+2857412608,2857414655,AR
+2857414656,2857420799,BR
+2857420800,2857421823,AR
+2857421824,2857437183,BR
+2857437184,2857438207,DO
+2857440256,2857441279,BR
+2857441280,2857442303,CO
+2857443328,2857444351,CR
+2857444352,2857445375,BR
+2857446400,2857447423,BR
+2857448448,2857449471,HN
+2857451520,2857459711,BR
+2857466880,2857467903,HN
2857631744,2857633791,BR
2857633792,2857634815,TT
2857634816,2857643007,BR
@@ -65398,7 +66137,7 @@
2867403776,2867404799,AR
2867404800,2867414015,BR
2867414016,2867415039,AR
-2867415040,2867416063,GY
+2867415040,2867416063,GF
2867416064,2867420159,BR
2867420160,2867421183,AR
2867421184,2867426303,BR
@@ -65422,7 +66161,72 @@
2867457024,2867462143,BR
2867462144,2867593215,US
2867593216,2867724287,CH
-2867724288,2867789823,BR
+2867724288,2867725311,EC
+2867725312,2867726335,BR
+2867727360,2867728383,BR
+2867728384,2867729407,PY
+2867729408,2867730431,AR
+2867730432,2867731455,CL
+2867733504,2867734527,BR
+2867734528,2867735551,AR
+2867735552,2867740671,BR
+2867740672,2867741183,CO
+2867741184,2867741695,AR
+2867741696,2867751935,BR
+2867751936,2867752959,HN
+2867752960,2867756031,BR
+2867756032,2867757055,AR
+2867757056,2867767295,BR
+2867767296,2867767807,CO
+2867767808,2867768319,EC
+2867768320,2867775487,BR
+2867775488,2867776511,CL
+2867776512,2867777535,AR
+2867777536,2867780607,BR
+2867780608,2867781631,MX
+2867782144,2867782655,CO
+2867782656,2867784703,BR
+2867784704,2867785727,CO
+2867785728,2867787775,AR
+2867787776,2867788799,BR
+2867788800,2867789823,MX
+2867789824,2867791871,BR
+2867792896,2867793919,HT
+2867793920,2867796991,BR
+2867796992,2867799039,AR
+2867799040,2867802111,BR
+2867802112,2867803135,AR
+2867803136,2867804159,BR
+2867804160,2867805183,GT
+2867805184,2867806207,BR
+2867806208,2867807231,CL
+2867807232,2867811327,BR
+2867811328,2867812351,CL
+2867812352,2867813375,AR
+2867813376,2867815423,BR
+2867815424,2867816447,PE
+2867816448,2867819519,BR
+2867820544,2867821567,BO
+2867821568,2867822591,BR
+2867822592,2867823615,AR
+2867823616,2867827711,BR
+2867827712,2867828735,MX
+2867828736,2867829759,CL
+2867829760,2867831807,BR
+2867831808,2867832831,DO
+2867832832,2867834879,AR
+2867834880,2867835903,BR
+2867835904,2867836927,AR
+2867836928,2867837951,BR
+2867837952,2867838975,CL
+2867838976,2867842047,BR
+2867842048,2867843071,EC
+2867843072,2867848191,BR
+2867849216,2867850239,BR
+2867850240,2867851263,SV
+2867851264,2867852287,BR
+2867852288,2867853311,AR
+2867853312,2867855359,BR
2867855360,2868117503,US
2868379648,2868380159,IN
2868380160,2868380671,BR
@@ -65624,7 +66428,9 @@
2870091264,2870091775,BE
2870091776,2870149119,FR
2870149120,2870214655,HU
-2870214656,2870234111,DK
+2870214656,2870228223,DK
+2870228224,2870228991,US
+2870228992,2870234111,DK
2870234112,2870234367,SG
2870234368,2870280191,DK
2870280192,2870411263,NL
@@ -65726,10 +66532,12 @@
2890152960,2890153983,GR
2890153984,2890161151,US
2890161152,2890162175,ES
-2890162176,2890163199,US
+2890162176,2890163199,PA
2890163200,2890164223,PT
2890164224,2890165247,TH
-2890165248,2890956799,US
+2890165248,2890167295,US
+2890167296,2890168319,AU
+2890168320,2890956799,US
2890956800,2890989567,AE
2890989568,2891017215,US
2891017216,2891017471,JP
@@ -65788,17 +66596,18 @@
2891863040,2891863551,AU
2891863552,2891864063,JP
2891864064,2891864575,SG
-2891864576,2891865599,US
+2891864576,2891865087,US
+2891865088,2891865343,NL
+2891865344,2891865599,US
2891865600,2891865855,HK
2891865856,2891866111,US
-2891866112,2891866367,AU
-2891866368,2891866623,US
-2891866624,2891867391,AU
-2891867392,2891867903,US
-2891867904,2891868159,AU
-2891868160,2891869439,US
+2891866112,2891867647,AU
+2891867648,2891867903,US
+2891867904,2891868927,AU
+2891868928,2891869439,US
2891869440,2891869695,AT
-2891869696,2891870207,US
+2891869696,2891869951,US
+2891869952,2891870207,HK
2891870208,2891870975,RU
2891870976,2891871231,US
2891871232,2891871487,CA
@@ -65814,7 +66623,23 @@
2892050432,2892052479,CA
2892052480,2892053503,US
2892053504,2892054527,CA
-2892054528,2892068863,US
+2892054528,2892059263,US
+2892059264,2892059391,KP
+2892059392,2892059775,US
+2892059776,2892059903,BI
+2892059904,2892060031,US
+2892060032,2892060159,CC
+2892060160,2892060799,US
+2892060800,2892060927,WS
+2892060928,2892061055,US
+2892061056,2892061183,MU
+2892061184,2892061311,AD
+2892061312,2892061439,SL
+2892061440,2892061567,US
+2892061568,2892061695,PA
+2892061696,2892062079,US
+2892062080,2892062207,GU
+2892062208,2892068863,US
2892068864,2892069887,CA
2892069888,2892070911,US
2892070912,2892103679,CA
@@ -65842,7 +66667,17 @@
2892174336,2892177407,CA
2892177408,2892369919,US
2892369920,2892374015,CA
-2892374016,2892420607,US
+2892374016,2892399103,US
+2892399104,2892399231,TG
+2892399232,2892399615,US
+2892399616,2892399743,FJ
+2892399744,2892401023,US
+2892401024,2892401151,ER
+2892401152,2892401919,US
+2892401920,2892402047,MF
+2892402048,2892402175,US
+2892402176,2892402303,MP
+2892402304,2892420607,US
2892420608,2892420863,CA
2892420864,2892421631,US
2892421632,2892421887,CA
@@ -65855,7 +66690,29 @@
2892464128,2892496895,CA
2892496896,2892906495,US
2892906496,2892910591,CA
-2892910592,2892988415,US
+2892910592,2892943743,US
+2892943744,2892943871,LR
+2892943872,2892943999,MC
+2892944000,2892944127,SZ
+2892944128,2892944255,US
+2892944256,2892944383,BT
+2892944384,2892944767,US
+2892944768,2892944895,GQ
+2892944896,2892945023,US
+2892945024,2892945151,LS
+2892945152,2892945279,US
+2892945280,2892945407,LI
+2892945408,2892945791,US
+2892945792,2892945919,CV
+2892945920,2892946047,US
+2892946048,2892946175,LA
+2892946176,2892946303,US
+2892946304,2892946431,CF
+2892946432,2892946815,US
+2892946816,2892946943,SM
+2892946944,2892947327,US
+2892947328,2892947455,TO
+2892947456,2892988415,US
2892988416,2892988671,SC
2892988672,2892988927,HU
2892988928,2892989183,RO
@@ -65872,7 +66729,7 @@
2892992512,2892993023,IT
2892993024,2892993535,JP
2892993536,2892993791,BE
-2892993792,2892994047,AE
+2892993792,2892994047,PA
2892994048,2892994303,GB
2892994304,2892994559,US
2892994560,2892994815,JO
@@ -65892,20 +66749,22 @@
2892998912,2892999167,MX
2892999168,2892999423,CR
2892999424,2892999551,TW
-2892999552,2893000191,US
+2892999552,2892999935,US
+2892999936,2893000191,IT
2893000192,2893000447,JP
2893000448,2893000959,HK
2893000960,2893001215,CA
2893001216,2893001727,GB
-2893001728,2893001983,IT
-2893001984,2893002239,US
+2893001728,2893002239,IT
2893002240,2893002495,EE
-2893002496,2893003007,US
+2893002496,2893002751,PA
+2893002752,2893003007,NZ
2893003008,2893003263,KR
2893003264,2893003775,GB
2893003776,2893004031,DE
2893004032,2893004287,JP
-2893004288,2893004799,US
+2893004288,2893004543,DK
+2893004544,2893004799,US
2893004800,2893005311,HK
2893005312,2893005567,US
2893005568,2893005823,FR
@@ -65917,9 +66776,13 @@
2893007104,2893007359,US
2893007360,2893007615,IE
2893007616,2893007871,DE
-2893007872,2893009663,US
+2893007872,2893009151,US
+2893009152,2893009407,AM
+2893009408,2893009663,US
2893009664,2893010175,GB
-2893010176,2893010943,US
+2893010176,2893010431,US
+2893010432,2893010687,DE
+2893010688,2893010943,US
2893010944,2893011199,AT
2893011200,2893011455,US
2893011456,2893011711,SG
@@ -66082,9 +66945,7 @@
2916167376,2916167383,US
2916167384,2916168159,CA
2916168160,2916168167,US
-2916168168,2916169015,CA
-2916169016,2916169023,US
-2916169024,2916171775,CA
+2916168168,2916171775,CA
2916171776,2916184063,US
2916184064,2916196351,CA
2916196352,2916253695,US
@@ -66107,9 +66968,7 @@
2917040128,2917041407,NL
2917041408,2917045503,US
2917045504,2917045759,NL
-2917045760,2917048831,US
-2917048832,2917049343,NL
-2917049344,2917058559,US
+2917045760,2917058559,US
2917058560,2917059583,NL
2917059584,2917060607,US
2917060608,2917061631,NL
@@ -66209,16 +67068,10 @@
2918023168,2918043647,US
2918043648,2918047743,CA
2918047744,2918051839,US
-2918051840,2918110463,CA
-2918110464,2918110719,US
-2918110720,2918121471,CA
+2918051840,2918121471,CA
2918121472,2918154239,US
2918154240,2918170623,CA
-2918170624,2918171391,US
-2918171392,2918171647,SG
-2918171648,2918171903,US
-2918171904,2918172159,SG
-2918172160,2918172415,US
+2918170624,2918172415,US
2918172416,2918172416,SG
2918172417,2918174463,US
2918174464,2918174719,MX
@@ -66313,7 +67166,9 @@
2919174144,2919178239,CA
2919178240,2919186431,US
2919186432,2919190527,CA
-2919190528,2919204543,US
+2919190528,2919204527,US
+2919204528,2919204535,NL
+2919204536,2919204543,US
2919204544,2919204551,NL
2919204552,2919204747,US
2919204748,2919204755,NL
@@ -66737,8 +67592,7 @@
2954832288,2954832343,FR
2954832344,2954832347,CH
2954832348,2954832351,ES
-2954832352,2954832383,FR
-2954832384,2954832399,GB
+2954832352,2954832399,FR
2954832400,2954832415,FI
2954832416,2954832607,FR
2954832608,2954832639,PT
@@ -66875,9 +67729,7 @@
2954842412,2954842415,GB
2954842416,2954842471,FR
2954842472,2954842479,GB
-2954842480,2954842559,FR
-2954842560,2954842575,IE
-2954842576,2954843043,FR
+2954842480,2954843043,FR
2954843044,2954843047,GB
2954843048,2954843187,FR
2954843188,2954843191,GB
@@ -67119,7 +67971,9 @@
2954944512,2954946559,GB
2954946560,2954948607,DE
2954948608,2954950655,RU
-2954950656,2954952703,ES
+2954950656,2954951167,ES
+2954951168,2954951679,DE
+2954951680,2954952703,ES
2954952704,2955018239,TR
2955018240,2955027726,JP
2955027727,2955027727,IE
@@ -67139,7 +67993,9 @@
2955935744,2956230655,RU
2956230656,2956238847,SI
2956238848,2956242943,ES
-2956242944,2956244479,JO
+2956242944,2956243967,JO
+2956243968,2956244223,GR
+2956244224,2956244479,JO
2956244480,2956244991,SE
2956244992,2956245247,FR
2956245248,2956245503,RO
@@ -67359,7 +68215,7 @@
2959310848,2959343615,RU
2959343616,2959351807,UA
2959353856,2959355903,RU
-2959355904,2959357951,RO
+2959355904,2959357951,KZ
2959357952,2959359999,UA
2959360000,2959384575,RU
2959384576,2959392767,UA
@@ -67700,7 +68556,7 @@
2961057792,2961061887,RU
2961061888,2961062911,PL
2961062912,2961063935,UA
-2961063936,2961064191,US
+2961063936,2961064191,DE
2961064192,2961064447,NL
2961064448,2961064703,RU
2961064704,2961064959,BG
@@ -67710,8 +68566,7 @@
2961065728,2961066239,HK
2961066240,2961066751,DE
2961066752,2961067007,BG
-2961067008,2961067263,US
-2961067264,2961067519,DE
+2961067008,2961067519,DE
2961067520,2961067775,GB
2961067776,2961068543,DE
2961068544,2961068799,NL
@@ -67719,7 +68574,8 @@
2961069056,2961069311,SE
2961069312,2961069567,NL
2961069568,2961069823,SE
-2961069824,2961072127,US
+2961069824,2961070079,DE
+2961070080,2961072127,US
2961072128,2961088511,UA
2961088512,2961088767,SE
2961088768,2961089023,RU
@@ -67849,11 +68705,15 @@
2968648576,2968649727,FR
2968649728,2969042943,IT
2969042944,2969567231,GB
-2969567232,2975594495,BR
+2969567232,2972098569,BR
+2972098570,2972098570,US
+2972098571,2975594495,BR
2975594496,2975596543,PE
2975596544,2984247295,BR
2984247296,2984607743,MX
-2984607744,2984615935,US
+2984607744,2984613648,US
+2984613649,2984613649,MX
+2984613650,2984615935,US
2984615936,2984935423,MX
2984935424,2984936447,AR
2984936448,2984937471,BR
@@ -67971,7 +68831,9 @@
2987728896,2987730943,GB
2987730944,2987732991,IR
2987732992,2987735039,HU
-2987735040,2987737087,ES
+2987735040,2987736577,ES
+2987736578,2987736578,BY
+2987736579,2987737087,ES
2987737088,2987739135,RU
2987739136,2987742982,SE
2987742983,2987742983,DK
@@ -68160,7 +69022,9 @@
2988459648,2988459679,GB
2988459680,2988459687,FR
2988459688,2988459691,PL
-2988459692,2988459863,FR
+2988459692,2988459715,FR
+2988459716,2988459719,FI
+2988459720,2988459863,FR
2988459864,2988459867,ES
2988459868,2988460143,FR
2988460144,2988460147,GB
@@ -68186,8 +69050,8 @@
2988461708,2988461799,FR
2988461800,2988461807,ES
2988461808,2988462159,FR
-2988462160,2988462171,ES
-2988462172,2988462331,FR
+2988462160,2988462167,ES
+2988462168,2988462331,FR
2988462332,2988462335,ES
2988462336,2988462747,FR
2988462748,2988462751,ES
@@ -68223,12 +69087,7 @@
2988464788,2988464791,ES
2988464792,2988465215,FR
2988465216,2988465219,ES
-2988465220,2988465511,FR
-2988465512,2988465515,PT
-2988465516,2988465519,GB
-2988465520,2988465523,FR
-2988465524,2988465527,ES
-2988465528,2988465551,FR
+2988465220,2988465551,FR
2988465552,2988465563,ES
2988465564,2988466059,FR
2988466060,2988466063,CZ
@@ -68258,7 +69117,9 @@
2988479728,2988479735,DE
2988479736,2988479791,FR
2988479792,2988479807,GB
-2988479808,2988480011,FR
+2988479808,2988479903,FR
+2988479904,2988479935,PL
+2988479936,2988480011,FR
2988480012,2988480015,GB
2988480016,2988480063,FR
2988480064,2988480095,ES
@@ -68317,17 +69178,13 @@
2988484340,2988484343,PT
2988484344,2988484399,FR
2988484400,2988484403,PT
-2988484404,2988484483,FR
-2988484484,2988484487,DE
-2988484488,2988484831,FR
+2988484404,2988484831,FR
2988484832,2988484847,GB
2988484848,2988484879,FR
2988484880,2988484883,GB
2988484884,2988484891,FR
2988484892,2988484895,GB
-2988484896,2988485351,FR
-2988485352,2988485355,GB
-2988485356,2988485455,FR
+2988484896,2988485455,FR
2988485456,2988485471,GB
2988485472,2988485503,FR
2988485504,2988485519,GB
@@ -68339,7 +69196,8 @@
2988485800,2988485803,PT
2988485804,2988486083,FR
2988486084,2988486087,PT
-2988486088,2988486095,FR
+2988486088,2988486091,GB
+2988486092,2988486095,FR
2988486096,2988486099,GB
2988486100,2988486135,FR
2988486136,2988486139,ES
@@ -68574,7 +69432,9 @@
2988512996,2988512999,GB
2988513000,2988513003,FR
2988513004,2988513007,ES
-2988513008,2988513283,FR
+2988513008,2988513167,FR
+2988513168,2988513171,PT
+2988513172,2988513283,FR
2988513284,2988513287,ES
2988513288,2988513311,FR
2988513312,2988513327,PT
@@ -68605,7 +69465,9 @@
2988521952,2988521983,ES
2988521984,2988523599,FR
2988523600,2988523603,ES
-2988523604,2988523663,FR
+2988523604,2988523631,FR
+2988523632,2988523635,DE
+2988523636,2988523663,FR
2988523664,2988523667,IE
2988523668,2988523679,FR
2988523680,2988523711,ES
@@ -68929,9 +69791,7 @@
2988557540,2988557543,ES
2988557544,2988557631,FR
2988557632,2988557635,GB
-2988557636,2988558203,FR
-2988558204,2988558207,DE
-2988558208,2988558731,FR
+2988557636,2988558731,FR
2988558732,2988558735,PT
2988558736,2988558803,FR
2988558804,2988558807,ES
@@ -68997,7 +69857,9 @@
2988564404,2988564407,ES
2988564408,2988566331,FR
2988566332,2988566332,GB
-2988566333,2988572671,FR
+2988566333,2988569423,FR
+2988569424,2988569439,FI
+2988569440,2988572671,FR
2988572672,2988703743,RU
2988703744,2988834815,PL
2988834816,2988965887,CH
@@ -69070,7 +69932,11 @@
2991521792,2991538175,RS
2991538176,2991554559,SI
2991554560,2991570943,GB
-2991570944,2991587327,IT
+2991570944,2991581183,IT
+2991581184,2991582207,DE
+2991582208,2991583231,FR
+2991583232,2991585279,DE
+2991585280,2991587327,GB
2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
@@ -69133,16 +69999,23 @@
2996682752,2996699135,DK
2996699136,2996764671,UA
2996764672,2996768767,GB
-2996768768,2996773375,RU
-2996773376,2996773631,UA
+2996768768,2996773631,RU
2996773632,2996773887,KZ
-2996773888,2996774143,UA
-2996774144,2996774655,RU
-2996774656,2996776959,UA
-2996776960,2996781055,RU
+2996773888,2996774399,RU
+2996774400,2996774911,UA
+2996774912,2996775423,RU
+2996775424,2996775935,UA
+2996775936,2996781055,RU
2996781056,2996785151,RO
2996785152,2996789247,RU
-2996789248,2996797439,UA
+2996789248,2996789503,UA
+2996789504,2996789759,RU
+2996789760,2996790015,UA
+2996790016,2996790271,US
+2996790272,2996790527,TR
+2996790528,2996792063,UA
+2996792064,2996792319,US
+2996792320,2996797439,UA
2996797440,2996801535,PL
2996801536,2996805631,RO
2996805632,2996809727,PL
@@ -69155,7 +70028,8 @@
2996862976,2996895743,AM
2996895744,2996928511,KW
2996928512,2996994047,RU
-2996994048,2997026815,DE
+2996994048,2997010431,NL
+2997010432,2997026815,DE
2997026816,2997059583,RU
2997059584,2997092351,BY
2997092352,2997125119,NO
@@ -69195,12 +70069,14 @@
2997513355,2997515683,FR
2997515684,2997515684,GB
2997515685,2997518335,FR
-2997518336,2997520895,NL
+2997518336,2997520383,US
+2997520384,2997520895,NL
2997520896,2997521151,MT
2997521152,2997521407,US
2997521408,2997521663,UY
2997521664,2997521919,IN
-2997521920,2997522431,NL
+2997521920,2997522175,US
+2997522176,2997522431,NL
2997522432,2997522687,IT
2997522688,2997522943,BE
2997522944,2997523199,NO
@@ -69255,7 +70131,8 @@
3000008704,3000016895,RU
3000016896,3000020991,GB
3000020992,3000021247,DZ
-3000021248,3000025087,GB
+3000021248,3000021503,DE
+3000021504,3000025087,GB
3000025088,3000033279,GI
3000033280,3000041471,RU
3000041472,3000049663,BA
@@ -70026,14 +70903,9 @@
3007123456,3007143935,AR
3007143936,3007148031,CL
3007148032,3007152127,CO
-3007152128,3007152143,CL
-3007152144,3007152159,DE
-3007152160,3007152383,CL
+3007152128,3007152383,DE
3007152384,3007152639,US
-3007152640,3007152655,CL
-3007152656,3007152671,DE
-3007152672,3007152895,CL
-3007152896,3007153151,DE
+3007152640,3007153151,DE
3007153152,3007153167,CL
3007153168,3007153183,DE
3007153184,3007153279,CL
@@ -70048,9 +70920,7 @@
3007154944,3007155199,US
3007155200,3007155327,DE
3007155328,3007155711,US
-3007155712,3007155727,CL
-3007155728,3007155743,DE
-3007155744,3007155967,CL
+3007155712,3007155967,DE
3007155968,3007156223,US
3007156224,3007156351,DE
3007156352,3007156479,US
@@ -70311,8 +71181,9 @@
3025603092,3025603102,CN
3025603103,3025603103,IN
3025603104,3025603215,HK
-3025603216,3025603223,CN
-3025603224,3025603327,IN
+3025603216,3025603231,CN
+3025603232,3025603247,HK
+3025603248,3025603327,IN
3025603328,3025603335,GU
3025603336,3025603583,IN
3025603584,3025603839,SG
@@ -70367,10 +71238,12 @@
3025621760,3025622015,IN
3025622016,3025622275,SG
3025622276,3025622279,IN
-3025622280,3025622287,SG
-3025622288,3025623055,IN
+3025622280,3025622351,SG
+3025622352,3025623055,IN
3025623056,3025623103,SG
-3025623104,3025623295,IN
+3025623104,3025623247,IN
+3025623248,3025623251,HK
+3025623252,3025623295,IN
3025623296,3025623551,JP
3025623552,3025623807,SG
3025623808,3025624063,IN
@@ -70389,7 +71262,7 @@
3025625856,3025625887,IN
3025625888,3025625915,SG
3025625916,3025625919,IN
-3025625920,3025625927,SG
+3025625920,3025625927,KR
3025625928,3025625935,IN
3025625936,3025625983,SG
3025625984,3025626111,IN
@@ -70410,13 +71283,13 @@
3025631776,3025631839,HK
3025631840,3025631999,IN
3025632000,3025632255,HK
-3025632256,3025632423,SG
-3025632424,3025632447,IN
+3025632256,3025632427,SG
+3025632428,3025632447,IN
3025632448,3025632463,SG
3025632464,3025632479,HK
3025632480,3025632511,IN
-3025632512,3025633023,SG
-3025633024,3025633535,IN
+3025632512,3025633151,SG
+3025633152,3025633535,IN
3025633536,3025633791,HK
3025633792,3025633807,AU
3025633808,3025633823,IN
@@ -70431,10 +71304,11 @@
3025637376,3025637631,HK
3025637632,3025637887,MY
3025637888,3025638015,IN
-3025638016,3025638023,HK
-3025638024,3025638031,IN
+3025638016,3025638027,HK
+3025638028,3025638031,IN
3025638032,3025638047,HK
-3025638048,3025638279,IN
+3025638048,3025638063,MY
+3025638064,3025638279,IN
3025638280,3025638287,SG
3025638288,3025638399,IN
3025638400,3025638655,SG
@@ -70561,7 +71435,8 @@
3029604352,3029605375,AU
3029605376,3029606399,JP
3029606400,3029614591,IN
-3029614592,3029630975,AU
+3029614592,3029622783,AU
+3029622784,3029630975,NZ
3029630976,3029635071,VN
3029635072,3029637119,JP
3029637120,3029639167,CN
@@ -70581,7 +71456,9 @@
3029715200,3029715455,AU
3029715456,3029716991,JP
3029716992,3029721087,PK
-3029721088,3029723135,IN
+3029721088,3029722111,IN
+3029722112,3029722367,AU
+3029722368,3029723135,IN
3029723136,3029724159,BD
3029724160,3029725183,CN
3029725184,3029727231,IN
@@ -70780,7 +71657,9 @@
3039416736,3039416739,US
3039416740,3039416741,SG
3039416742,3039416831,CL
-3039416832,3039417599,BR
+3039416832,3039417087,BR
+3039417088,3039417343,DE
+3039417344,3039417599,BR
3039417600,3039417855,US
3039417856,3039418111,BR
3039418112,3039418623,US
@@ -70994,8 +71873,7 @@
3050708992,3050709007,AT
3050709008,3050709119,BR
3050709120,3050709247,US
-3050709248,3050709375,DE
-3050709376,3050709503,BR
+3050709248,3050709503,DE
3050709504,3050709519,TH
3050709520,3050709631,BR
3050709632,3050709759,US
@@ -71202,9 +72080,7 @@
3050805312,3050805375,FI
3050805376,3050805759,US
3050805760,3050805791,DK
-3050805792,3050827775,US
-3050827776,3050828799,IL
-3050828800,3050829567,US
+3050805792,3050829567,US
3050829568,3050829823,UA
3050829824,3050831871,US
3050831872,3051356159,BR
@@ -71566,9 +72442,7 @@
3088686592,3088687103,NL
3088687104,3088701439,US
3088701440,3088702463,NL
-3088702464,3088752639,US
-3088752640,3088752895,NL
-3088752896,3088753919,US
+3088702464,3088753919,US
3088753920,3088754175,NL
3088754176,3088785407,US
3088785408,3088786431,NL
@@ -71830,6 +72704,8 @@
3103870464,3103870719,MD
3103870976,3103871231,IT
3103871232,3103871487,RU
+3103871488,3103871743,SE
+3103872000,3103872511,UA
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
@@ -72008,7 +72884,7 @@
3104089088,3104090111,GB
3104090112,3104091135,CH
3104091136,3104092159,NO
-3104092160,3104094207,RU
+3104093184,3104094207,RU
3104094208,3104096255,ES
3104096256,3104097279,IE
3104097280,3104098303,GB
@@ -72401,7 +73277,9 @@
3104495616,3104496639,JO
3104496640,3104497663,DK
3104497664,3104498687,CH
-3104498688,3104500735,NL
+3104498688,3104499119,NL
+3104499120,3104499127,IT
+3104499128,3104500735,NL
3104500736,3104501759,CZ
3104501760,3104502783,LY
3104502784,3104503807,DE
@@ -73255,7 +74133,9 @@
3105373184,3105374207,SY
3105374208,3105375231,GB
3105375232,3105375295,IT
-3105375296,3105375375,CA
+3105375296,3105375327,DE
+3105375328,3105375367,CA
+3105375368,3105375375,DE
3105375376,3105375391,US
3105375392,3105375551,IT
3105375552,3105375615,DE
@@ -74898,7 +75778,8 @@
3106966528,3106967551,IT
3106967552,3106968575,CH
3106968576,3106969599,KZ
-3106969600,3106970623,DK
+3106969600,3106969631,DK
+3106969632,3106970623,NO
3106970624,3106971647,DE
3106971648,3106973695,GB
3106973696,3106974719,PL
@@ -75259,7 +76140,7 @@
3107337216,3107339263,PL
3107339264,3107340287,LB
3107340288,3107341311,GB
-3107341312,3107342335,DE
+3107341312,3107342335,NL
3107342336,3107343359,GB
3107343360,3107344383,DE
3107344384,3107345407,CH
@@ -75912,7 +76793,8 @@
3108001792,3108002815,GB
3108002816,3108003839,RO
3108003840,3108004863,DE
-3108004864,3108005887,RU
+3108004864,3108005375,RU
+3108005376,3108005887,GB
3108005888,3108006911,LT
3108006912,3108007935,NL
3108007936,3108008959,DE
@@ -76477,7 +77359,9 @@
3108592640,3108593663,NL
3108593664,3108594687,ES
3108594688,3108597759,CZ
-3108597760,3108598783,IR
+3108597760,3108598271,IR
+3108598272,3108598527,GB
+3108598528,3108598783,IR
3108598784,3108600831,CH
3108600832,3108601855,NL
3108601856,3108602879,US
@@ -76693,9 +77577,7 @@
3108844544,3108845567,LI
3108845568,3108846591,GB
3108846592,3108847615,BE
-3108847616,3108847959,GB
-3108847960,3108847967,IT
-3108847968,3108848639,GB
+3108847616,3108848639,GB
3108848640,3108849663,CH
3108849664,3108850687,GB
3108850688,3108851711,PL
@@ -76939,7 +77821,9 @@
3109082112,3109083135,PL
3109083136,3109084159,SE
3109084160,3109085183,NL
-3109085184,3109086207,AL
+3109085184,3109085439,AL
+3109085440,3109085695,BG
+3109085696,3109086207,AL
3109086208,3109087231,RU
3109087232,3109088255,NL
3109088256,3109089279,LV
@@ -76969,7 +77853,9 @@
3109113856,3109115903,AZ
3109115904,3109116927,AU
3109116928,3109117951,GE
-3109117952,3109118975,IR
+3109117952,3109118463,IR
+3109118464,3109118719,NL
+3109118720,3109118975,IR
3109118976,3109119999,DE
3109120000,3109121023,PL
3109121024,3109122047,SE
@@ -77317,7 +78203,9 @@
3109456896,3109457919,PS
3109457920,3109458943,RU
3109458944,3109459711,SE
-3109459712,3109459869,GB
+3109459712,3109459771,GB
+3109459772,3109459772,LV
+3109459773,3109459869,GB
3109459870,3109459870,LV
3109459871,3109459967,GB
3109459968,3109460991,TR
@@ -77692,8 +78580,7 @@
3109847040,3109848063,AE
3109848064,3109849087,BG
3109849088,3109852159,RU
-3109852160,3109853183,NL
-3109853184,3109854207,DE
+3109852160,3109854207,DE
3109854208,3109855231,PL
3109855232,3109856255,DE
3109856256,3109857279,IT
@@ -77719,17 +78606,18 @@
3109876736,3109877759,ES
3109877760,3109878783,PL
3109878784,3109879807,GB
-3109879808,3109880063,US
-3109880064,3109880831,CZ
+3109879808,3109880319,US
+3109880320,3109880831,CZ
3109880832,3109881087,GB
3109881088,3109881855,FR
3109881856,3109882879,AT
3109882880,3109883903,NL
-3109883904,3109884927,BE
+3109883904,3109884927,RO
3109884928,3109885951,GL
3109885952,3109886975,NL
3109886976,3109887999,GB
-3109888000,3109888767,PL
+3109888000,3109888255,CZ
+3109888256,3109888767,PL
3109888768,3109889023,RU
3109889024,3109890047,FR
3109890048,3109891071,RU
@@ -77804,8 +78692,7 @@
3109947392,3109948415,CH
3109948416,3109949439,SE
3109949440,3109949695,IT
-3109949696,3109949951,GB
-3109949952,3109950207,ES
+3109949696,3109950207,GB
3109950208,3109950463,DE
3109950464,3109951487,IT
3109951488,3109952511,DE
@@ -78060,8 +78947,8 @@
3110181888,3110182911,IT
3110182912,3110183935,GB
3110183936,3110184959,RU
-3110184960,3110185983,ES
-3110185984,3110187007,DE
+3110184960,3110185984,ES
+3110185985,3110187007,DE
3110187008,3110187263,BE
3110187264,3110189055,DE
3110189056,3110190079,FR
@@ -78254,7 +79141,10 @@
3110379520,3110380543,DE
3110380544,3110381567,IT
3110381568,3110382591,LB
-3110382592,3110383615,GB
+3110382592,3110382847,GB
+3110382848,3110383103,US
+3110383104,3110383359,GB
+3110383360,3110383615,US
3110383616,3110384639,IT
3110384640,3110385663,ES
3110385664,3110386687,FR
@@ -78413,7 +79303,9 @@
3110543360,3110545407,NL
3110545408,3110546431,UA
3110546432,3110547455,DE
-3110547456,3110548479,SE
+3110547456,3110547967,SE
+3110547968,3110548223,JP
+3110548224,3110548479,DE
3110548480,3110549503,IT
3110549504,3110550527,NL
3110550528,3110551551,RU
@@ -78428,7 +79320,8 @@
3110559744,3110560767,GB
3110560768,3110561791,RU
3110561792,3110562815,IE
-3110562816,3110563327,RU
+3110562816,3110563071,RU
+3110563072,3110563327,US
3110563328,3110563583,FI
3110563584,3110563839,RU
3110563840,3110564863,IT
@@ -78750,11 +79643,7 @@
3110914048,3110915071,AT
3110915072,3110916095,ES
3110916096,3110918143,RU
-3110918144,3110918607,DE
-3110918608,3110918623,CA
-3110918624,3110918911,DE
-3110918912,3110919135,CA
-3110919136,3110919167,DE
+3110918144,3110919167,DE
3110919168,3110920191,RU
3110920192,3110921215,NL
3110921216,3110922239,DE
@@ -78966,7 +79855,7 @@
3111144448,3111145471,ES
3111145472,3111145983,RU
3111145984,3111146239,FI
-3111146240,3111146495,RU
+3111146240,3111146495,US
3111146496,3111149567,IT
3111149568,3111150591,GB
3111150592,3111151615,RU
@@ -79005,7 +79894,7 @@
3111183360,3111184383,FR
3111184384,3111185407,IQ
3111185408,3111186431,RU
-3111186432,3111189503,GB
+3111187456,3111189503,GB
3111189504,3111190527,DE
3111190528,3111191551,GB
3111191552,3111192575,DE
@@ -79219,7 +80108,7 @@
3111397376,3111399423,NL
3111399424,3111400447,CZ
3111400448,3111402495,GB
-3111402496,3111403519,BE
+3111402496,3111403519,KE
3111403520,3111404543,IE
3111404544,3111405567,GB
3111405568,3111406591,BE
@@ -79471,8 +80360,7 @@
3111660544,3111661567,ES
3111661568,3111662591,FI
3111662592,3111663615,GB
-3111663616,3111663871,LB
-3111663872,3111664639,RU
+3111663616,3111664639,RU
3111664640,3111665663,DE
3111665664,3111666687,PL
3111666688,3111667711,CZ
@@ -79488,8 +80376,8 @@
3111676928,3111677951,AE
3111677952,3111678975,ES
3111678976,3111679231,GB
-3111679232,3111679487,NL
-3111679488,3111679999,GB
+3111679232,3111679743,NL
+3111679744,3111679999,GB
3111680000,3111681023,IR
3111681024,3111682047,IL
3111682048,3111683071,GB
@@ -79832,9 +80720,8 @@
3112034336,3112034336,IL
3112034337,3112034337,AE
3112034338,3112034338,SA
-3112034339,3112034569,DE
-3112034570,3112034573,US
-3112034574,3112034579,DE
+3112034339,3112034559,DE
+3112034560,3112034579,US
3112034580,3112034580,VE
3112034581,3112034581,CO
3112034582,3112034582,BR
@@ -79845,8 +80732,7 @@
3112034587,3112034587,PY
3112034588,3112034588,UY
3112034589,3112034589,MX
-3112034590,3112034815,DE
-3112034816,3112034835,US
+3112034590,3112034835,US
3112034836,3112034836,CA
3112034837,3112035091,US
3112035092,3112035092,CA
@@ -79882,10 +80768,10 @@
3112074240,3112075263,IR
3112075264,3112076287,RU
3112076288,3112077311,IR
-3112077312,3112078335,ES
+3112077312,3112078335,GB
3112078336,3112079359,IT
3112079360,3112080383,IR
-3112080384,3112081407,ES
+3112080384,3112081407,GB
3112081408,3112082431,DK
3112082432,3112083455,IR
3112083456,3112085503,GB
@@ -79903,12 +80789,12 @@
3112096768,3112097791,DE
3112097792,3112098815,TR
3112098816,3112099839,CH
-3112099840,3112100863,ES
+3112099840,3112100863,GB
3112100864,3112102911,FR
-3112102912,3112103935,ES
+3112102912,3112103935,GB
3112103936,3112104959,DE
3112104960,3112105983,FR
-3112105984,3112107007,ES
+3112105984,3112107007,GB
3112107008,3112108031,UA
3112108032,3112109055,LT
3112109056,3112110079,FR
@@ -80393,7 +81279,8 @@
3112635264,3112635391,DE
3112635392,3112636415,BE
3112636416,3112637439,AT
-3112637440,3112638463,CZ
+3112637440,3112637951,CZ
+3112637952,3112638463,SK
3112638464,3112639487,DE
3112639488,3112640511,IR
3112640512,3112641535,DE
@@ -80519,7 +81406,9 @@
3112764416,3112765439,NO
3112765440,3112766463,GB
3112766464,3112767487,DE
-3112767488,3112768511,NL
+3112767488,3112768018,NL
+3112768019,3112768019,RU
+3112768020,3112768511,NL
3112768512,3112769535,IE
3112769536,3112770559,IR
3112770560,3112771583,DE
@@ -80720,7 +81609,8 @@
3112972288,3112973311,US
3112973312,3112973567,SE
3112973568,3112973823,DE
-3112973824,3112974335,SE
+3112973824,3112974079,UA
+3112974080,3112974335,SE
3112974336,3112975359,IR
3112975360,3112977407,ES
3112977408,3112978431,FR
@@ -80762,7 +81652,6 @@
3113012224,3113013247,US
3113013248,3113014271,RU
3113014272,3113016319,ES
-3113016320,3113017343,FI
3113017344,3113018367,NL
3113018368,3113019391,LT
3113019392,3113020415,IR
@@ -80853,7 +81742,7 @@
3113102336,3113103359,ES
3113103360,3113104383,SK
3113104384,3113105407,FR
-3113105408,3113106431,US
+3113105408,3113106431,PS
3113106432,3113107455,ES
3113107456,3113108479,RU
3113108480,3113109503,IT
@@ -80872,7 +81761,7 @@
3113123840,3113124863,GB
3113124864,3113125887,RU
3113125888,3113126911,FR
-3113126912,3113127167,GB
+3113126912,3113127167,US
3113127168,3113127423,NL
3113127424,3113127935,AT
3113127936,3113128959,NL
@@ -80896,7 +81785,7 @@
3113149440,3113150463,DE
3113150464,3113151487,IR
3113151488,3113152511,NL
-3113152512,3113153535,NO
+3113152512,3113153535,SG
3113153536,3113154559,IT
3113154560,3113156607,NL
3113156608,3113157631,ES
@@ -81059,7 +81948,7 @@
3113297664,3113297887,DE
3113297888,3113297919,GB
3113297920,3113298943,ES
-3113298944,3113299199,MD
+3113298944,3113299199,RU
3113299200,3113299455,NL
3113299456,3113300991,GB
3113300992,3113303039,RU
@@ -81185,7 +82074,9 @@
3113425152,3113425407,SK
3113425408,3113425919,CZ
3113425920,3113426943,KW
-3113426944,3113427967,IM
+3113426944,3113427455,IM
+3113427456,3113427711,NL
+3113427712,3113427967,IM
3113427968,3113428991,RU
3113428992,3113430015,IR
3113430016,3113431039,CZ
@@ -81195,7 +82086,9 @@
3113434112,3113435135,TR
3113435136,3113436159,FR
3113436160,3113437183,PL
-3113437184,3113438207,DK
+3113437184,3113437439,DK
+3113437440,3113437567,GB
+3113437568,3113438207,DK
3113438208,3113439231,DE
3113439232,3113440255,RU
3113440256,3113441279,IR
@@ -81347,7 +82240,7 @@
3113596928,3113597951,CZ
3113597952,3113598975,IT
3113598976,3113599999,GB
-3113600000,3113601023,PA
+3113600000,3113601023,UA
3113601024,3113602047,PL
3113602048,3113603071,CZ
3113603072,3113604095,GB
@@ -81577,7 +82470,7 @@
3113762816,3113763839,SK
3113763840,3113764863,VA
3113764864,3113765887,IE
-3113765888,3113767935,RU
+3113766912,3113767935,RU
3113767936,3113768959,NL
3113768960,3113769983,TR
3113769984,3113771007,RU
@@ -81623,7 +82516,6 @@
3113814016,3113815039,FR
3113815040,3113816063,MD
3113816064,3113817087,ES
-3113817088,3113818111,GB
3113818112,3113819135,SI
3113819136,3113820159,FR
3113820160,3113822207,PL
@@ -81666,7 +82558,7 @@
3113859072,3113860095,IR
3113860096,3113861119,NL
3113861120,3113862143,CZ
-3113862144,3113863167,RU
+3113862144,3113863167,MD
3113863168,3113864191,LT
3113864192,3113865215,GB
3113865216,3113866239,IR
@@ -81829,8 +82721,7 @@
3114027008,3114028031,RU
3114028032,3114030079,FR
3114030080,3114031103,DE
-3114031104,3114032127,NO
-3114032128,3114033151,FI
+3114031104,3114033151,FI
3114033152,3114034175,DK
3114034176,3114035199,ES
3114035200,3114036223,GB
@@ -81910,7 +82801,8 @@
3114112000,3114113023,GB
3114113024,3114114047,ES
3114114048,3114115071,DE
-3114115072,3114116095,SE
+3114115072,3114115839,SE
+3114115840,3114116095,CA
3114116096,3114117119,PL
3114117120,3114118143,SE
3114118144,3114119167,PL
@@ -82011,13 +82903,11 @@
3114194944,3114195967,BY
3114195968,3114196991,GR
3114196992,3114198015,DE
-3114198016,3114198336,AT
-3114198337,3114198400,DE
-3114198401,3114198527,US
-3114198528,3114199039,AT
+3114198016,3114199039,AT
3114199040,3114201087,IT
3114201088,3114203135,GB
-3114203136,3114203647,NL
+3114203136,3114203391,RO
+3114203392,3114203647,NL
3114203648,3114204159,DE
3114204160,3114205183,ES
3114205184,3114206207,IT
@@ -82104,11 +82994,21 @@
3114285056,3114286079,NL
3114286080,3114288127,UA
3114288128,3114289151,IS
-3114289152,3114292223,BG
+3114289152,3114290175,BG
+3114290176,3114291199,MD
+3114291200,3114292223,BG
3114292224,3114293247,DE
3114293248,3114294271,UA
3114294272,3114295295,RO
-3114295296,3114297343,DE
+3114295296,3114296319,DE
+3114296320,3114296447,IE
+3114296448,3114296575,GB
+3114296576,3114296703,ES
+3114296704,3114296831,PT
+3114296832,3114296959,PL
+3114296960,3114297087,HR
+3114297088,3114297215,FR
+3114297216,3114297343,IT
3114297344,3114298367,IR
3114298368,3114299391,SK
3114299392,3114300415,IE
@@ -82196,7 +83096,7 @@
3114386432,3114387455,NL
3114387456,3114388479,US
3114388480,3114389503,HU
-3114389504,3114390527,UA
+3114389504,3114390527,NL
3114390528,3114391551,SE
3114391552,3114392575,MD
3114392576,3114393599,IT
@@ -82207,7 +83107,9 @@
3114397696,3114398719,CZ
3114398720,3114399743,AT
3114399744,3114400767,GB
-3114400768,3114401791,CZ
+3114400768,3114401023,SK
+3114401024,3114401279,CZ
+3114401280,3114401791,SK
3114401792,3114402815,HU
3114402816,3114403839,CZ
3114403840,3114404863,NL
@@ -82219,7 +83121,18 @@
3114409984,3114411007,RU
3114411008,3114412031,IT
3114412032,3114413055,IR
-3114413056,3114414079,DE
+3114413056,3114413119,LT
+3114413120,3114413183,EE
+3114413184,3114413247,LV
+3114413248,3114413311,PL
+3114413312,3114413439,DK
+3114413440,3114413567,DE
+3114413568,3114413631,CZ
+3114413632,3114413695,HU
+3114413696,3114413759,BG
+3114413760,3114413823,MD
+3114413824,3114413951,DE
+3114413952,3114414079,CH
3114414080,3114415103,IT
3114415104,3114416127,ES
3114416128,3114417151,NL
@@ -82338,7 +83251,18 @@
3114536960,3114537983,IL
3114537984,3114541055,SA
3114541056,3114542079,BA
-3114542080,3114543103,DE
+3114542080,3114542207,SE
+3114542208,3114542335,NO
+3114542336,3114542399,SI
+3114542400,3114542463,SK
+3114542464,3114542527,RO
+3114542528,3114542591,RS
+3114542592,3114542719,BE
+3114542720,3114542847,NL
+3114542848,3114542911,TH
+3114542912,3114542975,ID
+3114542976,3114543039,KR
+3114543040,3114543103,MY
3114543104,3114544127,ES
3114544128,3114545151,GB
3114545152,3114546175,MD
@@ -82397,14 +83321,26 @@
3114600448,3114603519,DE
3114603520,3114604543,TR
3114604544,3114605567,BG
-3114605568,3114606591,IR
+3114605568,3114606335,IR
+3114606336,3114606591,GB
3114606592,3114607615,FR
3114607616,3114608639,SK
3114608640,3114609663,IR
3114609664,3114610687,TR
3114610688,3114612735,NL
3114612736,3114613759,IT
-3114613760,3114614783,DE
+3114613760,3114613823,JP
+3114613824,3114613887,AU
+3114613888,3114613951,TW
+3114613952,3114614015,SG
+3114614016,3114614079,SA
+3114614080,3114614143,AE
+3114614144,3114614207,PK
+3114614208,3114614271,TR
+3114614272,3114614399,MX
+3114614400,3114614527,IN
+3114614528,3114614655,FI
+3114614656,3114614783,CA
3114614784,3114615807,FR
3114615808,3114616831,NL
3114616832,3114617855,DK
@@ -82496,14 +83432,14 @@
3114713088,3114714111,CH
3114714112,3114715135,RU
3114715136,3114716159,DE
-3114716160,3114717183,NO
-3114717184,3114718207,SE
+3114716160,3114718207,SE
3114718208,3114719231,ES
3114719232,3114721279,UA
3114721280,3114722303,GB
3114722304,3114723327,HU
3114723328,3114724351,SE
-3114724352,3114725375,NL
+3114724352,3114725119,NL
+3114725120,3114725375,US
3114725376,3114726399,RU
3114726400,3114727423,SE
3114727424,3114728447,BE
@@ -82545,10 +83481,9 @@
3114768384,3114769407,IL
3114769408,3114770431,DE
3114770432,3114771455,UA
-3114771456,3114771967,US
-3114771968,3114772479,DK
+3114771456,3114772479,DK
3114772480,3114773503,GB
-3114773504,3114774527,DE
+3114773504,3114774527,BG
3114774528,3114775551,SE
3114775552,3114776575,GB
3114776576,3114777599,CZ
@@ -82559,7 +83494,7 @@
3114781696,3114782719,NL
3114782720,3114783743,CZ
3114783744,3114784767,PL
-3114784768,3114785791,RU
+3114784768,3114785791,EE
3114785792,3114786815,FR
3114786816,3114787839,RU
3114787840,3114788863,GB
@@ -82588,7 +83523,8 @@
3114812416,3114813439,IL
3114813440,3114814463,NO
3114814464,3114815487,IT
-3114815488,3114816511,DE
+3114815488,3114815743,BE
+3114815744,3114816511,DE
3114816512,3114817535,NL
3114817536,3114818559,IT
3114818560,3114819583,GB
@@ -82683,11 +83619,11 @@
3114915840,3114916863,RU
3114916864,3114917887,LB
3114917888,3114918911,IT
-3114918912,3114919167,CH
-3114919168,3114919423,GI
+3114918912,3114919423,CH
3114919424,3114919679,UA
3114919680,3114919935,CH
-3114919936,3114920959,GB
+3114919936,3114920703,GB
+3114920704,3114920959,NL
3114920960,3114921983,IT
3114921984,3114923007,CH
3114923008,3114924031,GB
@@ -82821,8 +83757,7 @@
3115062272,3115063295,GB
3115063296,3115064319,EE
3115064320,3115066367,MD
-3115066368,3115066879,NL
-3115066880,3115067391,US
+3115066368,3115067391,NL
3115067392,3115068415,DE
3115068416,3115069439,HU
3115069440,3115070463,NL
@@ -82848,7 +83783,8 @@
3115090944,3115091967,NL
3115091968,3115092991,RU
3115092992,3115094015,IT
-3115094016,3115095039,NL
+3115094016,3115094527,DE
+3115094528,3115095039,NL
3115095040,3115096063,DE
3115096064,3115097087,FR
3115097088,3115098111,LT
@@ -82881,7 +83817,9 @@
3115127808,3115128831,NL
3115128832,3115129855,DE
3115129856,3115130879,BA
-3115130880,3115131903,DE
+3115130880,3115131135,DE
+3115131136,3115131391,PA
+3115131392,3115131903,DE
3115131904,3115132927,RU
3115132928,3115133951,KW
3115133952,3115134975,ES
@@ -82921,7 +83859,7 @@
3115171840,3115172863,GB
3115172864,3115173887,SE
3115173888,3115174911,FR
-3115174912,3115175935,RS
+3115174912,3115175935,AL
3115175936,3115176959,FI
3115176960,3115177983,IT
3115177984,3115179007,NL
@@ -82940,8 +83878,7 @@
3115192320,3115193343,HU
3115193344,3115194367,TR
3115194368,3115195391,FI
-3115195392,3115195647,DE
-3115195648,3115196415,TR
+3115195392,3115196415,DE
3115196416,3115197439,LI
3115197440,3115198463,DE
3115198464,3115199487,NL
@@ -83023,7 +83960,9 @@
3115276288,3115277311,NL
3115277312,3115278335,ES
3115278336,3115279359,NO
-3115279360,3115280383,GB
+3115279360,3115279871,GB
+3115279872,3115280127,DE
+3115280128,3115280383,FR
3115280384,3115281407,PL
3115281408,3115282431,IL
3115282432,3115283455,GB
@@ -83033,6 +83972,303 @@
3115286528,3115287551,RU
3115287552,3115288575,SK
3115288576,3115289599,GB
+3115289600,3115290623,CZ
+3115290624,3115291647,GB
+3115291648,3115292671,FR
+3115292672,3115293695,GB
+3115293696,3115294719,RU
+3115294720,3115295743,GB
+3115295744,3115296767,NL
+3115296768,3115297791,IE
+3115297792,3115298815,RU
+3115298816,3115299839,FI
+3115299840,3115300863,BE
+3115300864,3115301887,PT
+3115301888,3115302911,NL
+3115302912,3115303935,LT
+3115303936,3115305983,NL
+3115305984,3115306495,TR
+3115306496,3115307007,BE
+3115307008,3115308031,DE
+3115308032,3115309055,IT
+3115309056,3115310079,BE
+3115310080,3115311103,CZ
+3115311104,3115312127,RU
+3115312128,3115313151,SY
+3115313152,3115314175,DE
+3115314176,3115315199,UA
+3115315200,3115316223,IR
+3115316224,3115317247,UA
+3115317248,3115318271,JO
+3115318272,3115319295,AL
+3115319296,3115320319,IE
+3115320320,3115322367,ES
+3115322368,3115323391,IE
+3115323392,3115324415,DE
+3115324416,3115325439,IT
+3115325440,3115326463,RU
+3115326464,3115327487,SE
+3115327488,3115328511,IR
+3115328512,3115329535,NO
+3115329536,3115330559,BG
+3115330560,3115331583,JO
+3115331584,3115332607,NL
+3115332608,3115333631,IS
+3115333632,3115334655,IR
+3115334656,3115335679,LV
+3115335680,3115336703,FR
+3115336704,3115337727,ES
+3115337728,3115338751,SK
+3115338752,3115340799,GB
+3115340800,3115341823,ES
+3115341824,3115342847,GB
+3115342848,3115343871,RU
+3115343872,3115344895,SE
+3115344896,3115345919,IE
+3115345920,3115346943,ES
+3115346944,3115347967,UA
+3115347968,3115348991,GB
+3115348992,3115350015,LV
+3115350016,3115351039,PL
+3115351040,3115352063,GB
+3115352064,3115353087,IE
+3115353088,3115354111,GB
+3115354112,3115355135,CZ
+3115355136,3115356159,NL
+3115356160,3115357183,LB
+3115357184,3115358207,FR
+3115358208,3115362303,DE
+3115362304,3115363327,FR
+3115363328,3115364351,GB
+3115364352,3115365375,FR
+3115365376,3115366399,ES
+3115366400,3115367423,SE
+3115367424,3115368447,ES
+3115368448,3115369471,BG
+3115369472,3115370495,GB
+3115370496,3115371519,IT
+3115371520,3115372543,GB
+3115372544,3115373567,LB
+3115373568,3115374591,NO
+3115374592,3115375615,BG
+3115375616,3115376639,LV
+3115376640,3115377663,UA
+3115377664,3115378687,DE
+3115378688,3115379711,FR
+3115379712,3115380735,CH
+3115380736,3115381759,GB
+3115381760,3115382783,NO
+3115382784,3115383807,GB
+3115383808,3115384831,DE
+3115384832,3115385855,TJ
+3115385856,3115387903,SK
+3115387904,3115388927,MK
+3115388928,3115389951,AT
+3115389952,3115390463,GB
+3115390464,3115390719,RO
+3115390720,3115390975,NL
+3115390976,3115391999,GB
+3115392000,3115393023,AL
+3115393024,3115395071,IT
+3115395072,3115396095,ES
+3115396096,3115397119,FR
+3115397120,3115398143,GB
+3115398144,3115399167,RU
+3115399168,3115400191,BG
+3115400192,3115401215,RU
+3115401216,3115402239,GB
+3115402240,3115403263,NL
+3115403264,3115404287,ES
+3115404288,3115406335,GB
+3115406336,3115407359,DE
+3115407360,3115408383,CY
+3115408384,3115409407,MD
+3115409408,3115410431,RU
+3115410432,3115411455,NL
+3115411456,3115412479,AM
+3115412480,3115414527,RU
+3115414528,3115415551,DE
+3115415552,3115416575,DK
+3115416576,3115417599,MD
+3115417600,3115418623,DE
+3115418624,3115419647,IS
+3115419648,3115420671,NL
+3115420672,3115421695,DE
+3115421696,3115422719,NL
+3115422720,3115423743,DE
+3115423744,3115424767,ES
+3115424768,3115425791,IR
+3115425792,3115426815,DK
+3115426816,3115427839,TR
+3115427840,3115428863,ES
+3115428864,3115429887,US
+3115429888,3115430399,NL
+3115430400,3115430911,FI
+3115430912,3115431935,FR
+3115431936,3115432959,GB
+3115432960,3115433983,UA
+3115433984,3115435007,IT
+3115435008,3115436031,ES
+3115436032,3115437055,GB
+3115437056,3115438079,DE
+3115438080,3115439103,GB
+3115439104,3115440127,IT
+3115440128,3115441151,RU
+3115441152,3115442175,NL
+3115442176,3115443199,FR
+3115443200,3115444223,GB
+3115444224,3115445247,US
+3115445248,3115446271,RU
+3115446272,3115447295,UA
+3115447296,3115448319,IT
+3115448320,3115449343,DE
+3115449344,3115450367,BG
+3115450368,3115451391,AT
+3115451392,3115452415,BG
+3115452416,3115453439,IT
+3115453440,3115454463,MD
+3115454464,3115455487,ES
+3115455488,3115456511,DK
+3115456512,3115457535,DE
+3115457536,3115458559,FR
+3115458560,3115461631,DE
+3115461632,3115462655,UA
+3115462656,3115463679,GB
+3115463680,3115464703,FR
+3115464704,3115465727,TR
+3115465728,3115466751,CH
+3115466752,3115468799,IE
+3115468800,3115469823,DE
+3115469824,3115470847,FR
+3115470848,3115471871,ES
+3115471872,3115472895,PL
+3115472896,3115473919,UA
+3115473920,3115474943,IT
+3115474944,3115475967,PL
+3115475968,3115476991,IT
+3115476992,3115478015,IR
+3115478016,3115479039,DE
+3115479040,3115480063,DK
+3115480064,3115481087,DE
+3115481088,3115482111,CH
+3115482112,3115483135,SE
+3115483136,3115484159,RU
+3115484160,3115485183,FR
+3115485184,3115486207,ES
+3115486208,3115487231,SE
+3115487232,3115488255,NL
+3115488256,3115489279,SY
+3115489280,3115490303,US
+3115490304,3115491327,PL
+3115491328,3115492351,ES
+3115492352,3115493375,GB
+3115493376,3115494399,ES
+3115494400,3115495423,CZ
+3115495424,3115496447,GR
+3115496448,3115497471,SE
+3115497472,3115498495,FR
+3115498496,3115499519,GB
+3115499520,3115501567,DE
+3115501568,3115502591,NL
+3115502592,3115504639,RU
+3115504640,3115505663,DE
+3115505664,3115506687,GB
+3115506688,3115507711,IR
+3115507712,3115508735,SI
+3115508736,3115509759,RO
+3115509760,3115510783,NL
+3115510784,3115511807,PL
+3115511808,3115512831,TR
+3115512832,3115513855,RU
+3115513856,3115514879,FR
+3115514880,3115515903,IT
+3115515904,3115517951,RU
+3115517952,3115518975,KZ
+3115518976,3115519999,UA
+3115520000,3115521023,CH
+3115521024,3115522047,GB
+3115522048,3115523071,TR
+3115523072,3115524095,AL
+3115524096,3115525119,CZ
+3115525120,3115526143,RU
+3115526144,3115527167,IE
+3115527168,3115528191,BE
+3115528192,3115529215,SI
+3115529216,3115530239,ME
+3115530240,3115531263,PL
+3115531264,3115532287,AT
+3115532288,3115533311,DE
+3115533312,3115534335,MT
+3115534336,3115535359,RU
+3115535360,3115536383,IS
+3115536384,3115537407,BY
+3115537408,3115538431,RU
+3115538432,3115539455,NL
+3115539456,3115540479,ME
+3115540480,3115541503,DK
+3115541504,3115542527,DE
+3115542528,3115543551,ES
+3115543552,3115544575,IS
+3115544576,3115545599,NL
+3115545600,3115546623,FI
+3115546624,3115547647,GB
+3115547648,3115548671,RU
+3115548672,3115549695,NO
+3115549696,3115550719,PL
+3115550720,3115551743,RS
+3115551744,3115552767,ES
+3115552768,3115553791,RU
+3115553792,3115554815,FR
+3115554816,3115555839,DE
+3115555840,3115556863,RO
+3115556864,3115557887,RU
+3115557888,3115558911,DE
+3115558912,3115559935,IR
+3115559936,3115560959,RU
+3115560960,3115561983,FR
+3115561984,3115563007,DE
+3115563008,3115564031,ES
+3115564032,3115565055,RU
+3115565056,3115566079,FR
+3115566080,3115567103,RU
+3115567104,3115569151,NL
+3115569152,3115570175,GB
+3115570176,3115571199,UA
+3115571200,3115572223,SI
+3115572224,3115573247,IR
+3115573248,3115574271,RU
+3115574272,3115575295,GB
+3115575296,3115576319,ES
+3115576320,3115577343,FI
+3115577344,3115577567,IL
+3115577568,3115577583,US
+3115577584,3115577855,IL
+3115577856,3115578367,NL
+3115578368,3115579391,GB
+3115579392,3115580415,US
+3115580416,3115581439,GB
+3115581440,3115582463,CZ
+3115582464,3115583487,GB
+3115583488,3115584511,NL
+3115584512,3115585535,CZ
+3115585536,3115586559,RU
+3115586560,3115587583,CH
+3115587584,3115588607,DE
+3115588608,3115589631,TR
+3115589632,3115590655,GB
+3115590656,3115591423,GR
+3115591424,3115591679,NL
+3115591680,3115592703,CH
+3115592704,3115593727,BE
+3115593728,3115594751,GB
+3115594752,3115595775,IR
+3115595776,3115596799,RU
+3115596800,3115597823,IQ
+3115597824,3115598847,NO
+3115598848,3115599871,BE
+3115599872,3115600895,HU
+3115600896,3115601919,BE
+3115601920,3115602943,JO
3117416448,3117417471,FR
3120562176,3120594943,CO
3120594944,3120599039,AR
@@ -83332,7 +84568,9 @@
3154571776,3154575359,HU
3154575360,3154640895,FR
3154640896,3155165183,IT
-3155165184,3155427327,RU
+3155165184,3155312938,RU
+3155312939,3155312939,US
+3155312940,3155427327,RU
3155427328,3155689471,AT
3155689472,3155951615,RO
3155951616,3156213759,GB
@@ -83479,7 +84717,8 @@
3158852608,3158853119,ES
3158853120,3158853631,NL
3158853632,3158855679,RU
-3158855680,3158859903,NL
+3158855680,3158857727,US
+3158857728,3158859903,NL
3158859904,3158860031,CZ
3158860032,3158860287,GB
3158860288,3158860543,NL
@@ -83689,7 +84928,8 @@
3161833472,3161835519,RS
3161835520,3161841663,AT
3161841664,3161845759,RS
-3161845760,3161847807,AT
+3161845760,3161846271,GR
+3161846272,3161847807,AT
3161847808,3161849855,GR
3161849856,3161866239,BE
3161866240,3161882623,IR
@@ -83794,8 +85034,7 @@
3162682368,3162682879,MD
3162682880,3162683135,GB
3162683136,3162683391,ES
-3162683392,3162685439,RU
-3162685440,3162693631,EE
+3162683392,3162693631,EE
3162693632,3162701567,RU
3162701568,3162701823,UZ
3162701824,3162734591,MD
@@ -84253,7 +85492,8 @@
3168018688,3168020479,RO
3168020480,3168022527,MD
3168022528,3168035839,IR
-3168035840,3168037887,RO
+3168035840,3168036863,RO
+3168036864,3168037887,GB
3168037888,3168038399,SE
3168038400,3168038911,RO
3168038912,3168039935,MD
@@ -84273,8 +85513,8 @@
3168074240,3168074495,GB
3168074496,3168075263,RO
3168075264,3168075519,GB
-3168075520,3168077823,RO
-3168077824,3168079871,ES
+3168075520,3168076799,RO
+3168076800,3168079871,ES
3168079872,3168081919,RO
3168081920,3168083967,FR
3168083968,3168084991,RO
@@ -84471,12 +85711,16 @@
3169851392,3169853439,NL
3169853440,3169854463,AU
3169854464,3169855487,ES
-3169855488,3169862911,RO
+3169855488,3169856511,RO
+3169856512,3169857023,IT
+3169857024,3169862911,RO
3169862912,3169863167,IT
3169863168,3169863423,MD
3169863424,3169863679,RO
3169863680,3169864703,BG
-3169864704,3169867775,RO
+3169864704,3169866495,RO
+3169866496,3169866751,GB
+3169866752,3169867775,RO
3169867776,3169868031,GB
3169868032,3169869823,RO
3169869824,3169878015,MD
@@ -84519,7 +85763,9 @@
3169935360,3169937407,ES
3169937408,3169946623,RO
3169946624,3169947135,IT
-3169947136,3169951743,RO
+3169947136,3169950207,RO
+3169950208,3169950463,IT
+3169950464,3169951743,RO
3169951744,3169955839,SE
3169955840,3169959423,RO
3169959424,3169959935,IT
@@ -85710,11 +86956,13 @@
3210744704,3210744831,US
3210744832,3210744863,NZ
3210744864,3210744895,IS
-3210744896,3210745087,CL
+3210744896,3210744959,CL
+3210744960,3210745087,BR
3210745088,3210745343,US
3210745344,3210745359,RU
3210745360,3210745375,BR
-3210745376,3210745599,CL
+3210745376,3210745471,CL
+3210745472,3210745599,DE
3210745600,3210745855,US
3210745856,3210745871,IT
3210745872,3210745919,BR
@@ -85723,7 +86971,8 @@
3210746384,3210746623,BR
3210746624,3210746879,US
3210746880,3210746895,CH
-3210746896,3210747135,CL
+3210746896,3210747007,CL
+3210747008,3210747135,BR
3210747136,3210748159,US
3210748160,3210748175,JP
3210748176,3210748287,BR
@@ -85734,7 +86983,8 @@
3210752512,3210755839,US
3210755840,3210755855,MY
3210755856,3210755871,BR
-3210755872,3210756095,CL
+3210755872,3210755967,CL
+3210755968,3210756095,BR
3210756096,3210756351,SG
3210756352,3210756607,US
3210756608,3210756863,DE
@@ -85746,7 +86996,7 @@
3210764048,3210764063,BR
3210764064,3210764095,CL
3210764096,3210764159,US
-3210764160,3210764287,CL
+3210764160,3210764287,BR
3210764288,3210765055,US
3210765056,3210765071,SE
3210765072,3210765311,BR
@@ -85815,9 +87065,7 @@
3210786592,3210787071,CL
3210787072,3210788863,US
3210788864,3210789119,HR
-3210789120,3210792959,US
-3210792960,3210793471,CL
-3210793472,3210795007,US
+3210789120,3210795007,US
3210795008,3210796031,IL
3210796032,3210798847,US
3210798848,3210799103,ES
@@ -86010,7 +87258,15 @@
3211099936,3211100159,CL
3211100160,3211101951,US
3211101952,3211102207,SG
-3211102208,3211104767,AU
+3211102208,3211102335,AU
+3211102336,3211102463,BR
+3211102464,3211102591,AU
+3211102592,3211102719,BR
+3211102720,3211102847,AU
+3211102848,3211102975,BR
+3211102976,3211103103,AU
+3211103104,3211103231,BR
+3211103232,3211104767,AU
3211104768,3211105791,US
3211105792,3211106303,ES
3211106304,3211111423,US
@@ -86150,8 +87406,7 @@
3219802432,3219802495,US
3219802496,3219802623,BR
3219802624,3219802639,NL
-3219802640,3219808767,BR
-3219808768,3219816447,NL
+3219802640,3219816447,BR
3219816448,3219818495,US
3219818496,3219819007,BR
3219819008,3219819519,JP
@@ -86623,7 +87878,8 @@
3223634944,3223635455,GB
3223635456,3223637247,SE
3223637248,3223637503,GB
-3223637504,3223638271,SE
+3223637504,3223638015,SE
+3223638016,3223638271,NL
3223638272,3223638527,GB
3223638528,3223640831,SE
3223640832,3223641087,GB
@@ -86862,7 +88118,7 @@
3224795904,3224796415,US
3224796416,3224797439,DE
3224797440,3224797695,US
-3224797696,3224797951,NZ
+3224797696,3224797951,AU
3224797952,3224798207,US
3224798208,3224798463,CH
3224798464,3224798975,US
@@ -87855,7 +89111,8 @@
3227528448,3227528703,ZA
3227528704,3227528959,MU
3227528960,3227531519,ZA
-3227531520,3227532031,MU
+3227531520,3227531775,MU
+3227531776,3227532031,ZA
3227532032,3227532287,US
3227532288,3227532799,ZA
3227532800,3227534335,US
@@ -87875,8 +89132,8 @@
3227545088,3227547647,ZA
3227547648,3227551743,MU
3227551744,3227552255,MF
-3227552256,3227552511,ZA
-3227552512,3227553791,MU
+3227552256,3227552767,ZA
+3227552768,3227553791,MU
3227553792,3227554047,ZA
3227554304,3227554559,ZA
3227554560,3227554815,MU
@@ -88885,8 +90142,6 @@
3230093824,3230094079,NL
3230094080,3230094335,CA
3230094336,3230095615,US
-3230095616,3230095871,JP
-3230096384,3230096639,JP
3230096640,3230096895,US
3230096896,3230097151,JP
3230097408,3230100735,JP
@@ -89867,7 +91122,9 @@
3232100096,3232100351,IE
3232100352,3232101119,GB
3232101120,3232102144,SE
-3232102146,3232104447,SE
+3232102146,3232103167,SE
+3232103168,3232103423,FR
+3232103424,3232104447,SE
3232104448,3232106495,DE
3232107520,3232108543,RU
3232108544,3232112639,DE
@@ -90003,7 +91260,9 @@
3233453632,3233456191,US
3233456192,3233456255,LV
3233456256,3233456383,US
-3233456384,3233456447,UA
+3233456384,3233456391,UA
+3233456392,3233456399,NO
+3233456400,3233456447,UA
3233456448,3233456639,US
3233456640,3233456655,CA
3233456656,3233456671,US
@@ -90023,7 +91282,9 @@
3233458944,3233458959,BG
3233458960,3233458975,US
3233458976,3233459007,BG
-3233459008,3233484799,US
+3233459008,3233460511,US
+3233460512,3233460519,SE
+3233460520,3233484799,US
3233484800,3233487359,ES
3233487360,3233487871,US
3233487872,3233488895,CA
@@ -90047,7 +91308,6 @@
3233564672,3233564927,US
3233564928,3233566719,JP
3233567744,3233567999,US
-3233568000,3233568767,JP
3233568768,3233569023,CA
3233569536,3233569791,US
3233569792,3233570047,JP
@@ -90377,7 +91637,9 @@
3234227936,3234227951,CA
3234227952,3234228223,US
3234228224,3234228287,CA
-3234228288,3234230015,US
+3234228288,3234229215,US
+3234229216,3234229223,SE
+3234229224,3234230015,US
3234230016,3234230207,ES
3234230208,3234232319,US
3234232320,3234232575,EG
@@ -90471,7 +91733,6 @@
3234784000,3234794495,US
3234794496,3234794751,CA
3234794752,3234795007,US
-3234795008,3234795263,GB
3234795264,3234799359,US
3234799360,3234799615,NL
3234799616,3234799871,US
@@ -90559,7 +91820,9 @@
3235389440,3235389951,VE
3235389952,3235512319,US
3235512320,3235577855,JP
-3235577856,3235643135,CA
+3235577856,3235641855,CA
+3235641856,3235642111,US
+3235642112,3235643135,CA
3235643136,3235745791,US
3235745792,3235745792,DE
3235745793,3235747839,US
@@ -90883,7 +92146,9 @@
3237041408,3237041663,CA
3237041664,3237043967,US
3237043968,3237044223,CH
-3237044224,3237047039,US
+3237044224,3237046647,US
+3237046648,3237046655,SE
+3237046656,3237047039,US
3237047040,3237047295,FR
3237047296,3237048831,US
3237048832,3237049087,IN
@@ -91316,7 +92581,9 @@
3237867776,3237868031,GB
3237868032,3237868159,HK
3237868160,3237868287,AU
-3237868288,3237869311,US
+3237868288,3237868543,DK
+3237868544,3237868799,GB
+3237868800,3237869311,US
3237869312,3237869439,KR
3237869440,3237869567,JP
3237869568,3237869823,AU
@@ -91391,7 +92658,6 @@
3238018560,3238018815,FR
3238018816,3238019071,DE
3238019072,3238035711,PL
-3238035712,3238035967,DE
3238035968,3238037503,RU
3238037504,3238039039,LV
3238039040,3238039551,UA
@@ -92800,7 +94066,6 @@
3241035520,3241035775,SI
3241035776,3241036031,GB
3241036032,3241036287,CH
-3241036288,3241036543,RU
3241036544,3241036799,SI
3241036800,3241037055,GB
3241037056,3241037311,RU
@@ -93000,7 +94265,42 @@
3242475520,3242483711,LV
3242483712,3242524671,BG
3242524672,3242590207,NO
-3242590208,3242622975,FR
+3242590208,3242594463,FR
+3242594464,3242594495,ES
+3242594496,3242594559,FI
+3242594560,3242594635,FR
+3242594636,3242594639,GB
+3242594640,3242594663,FR
+3242594664,3242594667,DE
+3242594668,3242595967,FR
+3242595968,3242596095,ES
+3242596096,3242596415,FR
+3242596416,3242596479,PT
+3242596480,3242597343,FR
+3242597344,3242597375,NL
+3242597376,3242603119,FR
+3242603120,3242603135,GB
+3242603136,3242604755,FR
+3242604756,3242604756,NL
+3242604757,3242606975,FR
+3242606976,3242607039,ES
+3242607040,3242608383,FR
+3242608384,3242608639,GB
+3242608640,3242609919,FR
+3242609920,3242610047,GB
+3242610048,3242610271,FR
+3242610272,3242610303,FI
+3242610304,3242615167,FR
+3242615168,3242615295,IE
+3242615296,3242615871,FR
+3242615872,3242615935,PL
+3242615936,3242616191,FR
+3242616192,3242616319,ES
+3242616320,3242618239,FR
+3242618240,3242618241,NL
+3242618242,3242618431,FR
+3242618432,3242618495,PL
+3242618496,3242622975,FR
3242622976,3242655743,IT
3242655744,3242721279,NO
3242721280,3242852351,CH
@@ -94086,7 +95386,8 @@
3246120960,3246129151,GB
3246129152,3246131711,RU
3246131712,3246132735,SY
-3246132736,3246135807,RU
+3246132736,3246132991,DE
+3246132992,3246135807,RU
3246135808,3246136831,SY
3246136832,3246138879,RU
3246138880,3246139391,SY
@@ -94101,7 +95402,8 @@
3246148608,3246149631,DE
3246149632,3246150143,RU
3246150144,3246150655,SY
-3246150656,3246151167,RU
+3246150656,3246150911,DE
+3246150912,3246151167,RU
3246151168,3246151679,SY
3246151680,3246153727,RU
3246153728,3246157823,SY
@@ -94132,13 +95434,14 @@
3246350848,3246351103,ES
3246351616,3246352639,ES
3246360576,3246362623,US
-3246370816,3246371073,ES
+3246362624,3246371073,ES
3246371074,3246371074,PT
3246371075,3246374911,ES
3246378752,3246379007,ES
3246379008,3246381055,GB
3246383104,3246387199,US
3246387200,3246388223,GB
+3246389248,3246390783,ES
3246391296,3246547199,GB
3246547456,3246613503,GB
3246613504,3246614527,HU
@@ -94147,7 +95450,11 @@
3246825984,3246826239,US
3246826240,3246828066,CH
3246828068,3246915583,CH
-3246915584,3247046655,PT
+3246915584,3246979608,PT
+3246979609,3246979609,US
+3246979610,3246979783,PT
+3246979784,3246979784,US
+3246979785,3247046655,PT
3247046656,3247046911,AT
3247046912,3247047679,SI
3247048192,3247048703,NO
@@ -94329,9 +95636,7 @@
3247394048,3247394303,PL
3247394560,3247397887,FI
3247397888,3247398143,RU
-3247398144,3247398911,FI
-3247399424,3247399679,RU
-3247399680,3247404799,FI
+3247398144,3247404799,FI
3247404800,3247405055,RU
3247405056,3247405311,RO
3247405312,3247405567,PL
@@ -94498,18 +95803,8 @@
3248553984,3248554239,RO
3248557056,3248558079,UA
3248558080,3248560127,NO
-3248560896,3248561151,NO
-3248561664,3248561952,NO
-3248561953,3248561953,DK
-3248561954,3248561954,FI
-3248561955,3248561955,NO
-3248561956,3248561956,SE
-3248561957,3248562080,NO
-3248562081,3248562081,DK
-3248562082,3248562082,FI
-3248562083,3248562083,NO
-3248562084,3248562084,SE
-3248562085,3248575487,NO
+3248560896,3248561151,IN
+3248561664,3248575487,NO
3248575488,3248576511,CZ
3248576512,3248599039,NO
3248599040,3248603135,SE
@@ -95970,7 +97265,7 @@
3253617664,3253618687,GB
3253618688,3253619711,UA
3253619712,3253620735,IT
-3253620736,3253622783,GB
+3253620736,3253621759,GB
3253622784,3253623807,DE
3253623808,3253624831,PL
3253624832,3253625855,UA
@@ -96204,7 +97499,13 @@
3253778752,3253778879,BE
3253778880,3253779215,GB
3253779216,3253779247,DE
-3253779248,3253796863,GB
+3253779248,3253781423,GB
+3253781424,3253781431,DE
+3253781432,3253781615,GB
+3253781616,3253781631,FR
+3253781632,3253783487,GB
+3253783488,3253783519,DE
+3253783520,3253796863,GB
3253796864,3253862399,SE
3253862400,3253862655,GB
3253862656,3253882879,FR
@@ -96247,7 +97548,6 @@
3253899776,3253900287,PL
3253900288,3253901311,RU
3253901312,3253901567,PL
-3253901568,3253901823,RU
3253901824,3253902079,SI
3253902080,3253902335,DK
3253902336,3253904383,UA
@@ -96845,13 +98145,75 @@
3255435264,3255435295,EE
3255435296,3255435327,LT
3255435328,3255435359,LV
+3255435360,3255435367,AT
+3255435368,3255435375,CZ
+3255435392,3255435399,EE
+3255435400,3255435407,DE
+3255435424,3255435431,HU
+3255435432,3255435439,LV
+3255435456,3255435463,LT
+3255435464,3255435471,NL
+3255435488,3255435495,PL
+3255435496,3255435503,RO
3255435520,3255435551,IS
+3255435552,3255435559,BE
+3255435560,3255435567,DK
+3255435584,3255435591,FR
+3255435592,3255435599,IS
+3255435616,3255435623,IE
+3255435624,3255435631,LU
+3255435648,3255435655,CH
+3255435656,3255435663,GB
3255435776,3255435807,IS
+3255435808,3255435815,BE
+3255435816,3255435823,DK
+3255435840,3255435847,FR
+3255435848,3255435855,IS
+3255435872,3255435879,IE
+3255435880,3255435887,LU
+3255435904,3255435911,CH
+3255435912,3255435919,GB
3255436032,3255436063,EE
3255436064,3255436095,LT
3255436096,3255436127,LV
+3255436128,3255436135,AT
+3255436136,3255436143,CZ
+3255436160,3255436167,EE
+3255436168,3255436175,DE
+3255436192,3255436199,HU
+3255436200,3255436207,LV
+3255436224,3255436231,LT
+3255436232,3255436239,NL
+3255436256,3255436263,PL
+3255436264,3255436271,RO
3255436288,3255436319,MT
+3255436320,3255436327,BG
+3255436328,3255436335,HR
+3255436352,3255436359,CY
+3255436360,3255436367,FI
+3255436384,3255436391,GR
+3255436392,3255436399,IT
+3255436416,3255436423,MT
+3255436424,3255436431,NO
+3255436448,3255436455,PT
+3255436456,3255436463,SI
+3255436480,3255436487,ES
+3255436488,3255436495,SE
3255436544,3255436575,MT
+3255436576,3255436583,BG
+3255436584,3255436591,HR
+3255436608,3255436615,CY
+3255436616,3255436623,FI
+3255436640,3255436647,GR
+3255436648,3255436655,IT
+3255436672,3255436679,MT
+3255436680,3255436687,NO
+3255436704,3255436711,PT
+3255436712,3255436719,SI
+3255436736,3255436743,ES
+3255436744,3255436751,SE
+3255436800,3255436807,SK
+3255438352,3255438359,SK
3255451648,3255452671,FR
3255474176,3255476223,GB
3255483392,3255484415,DE
@@ -96918,7 +98280,9 @@
3255743744,3255743999,US
3255744000,3255752959,SE
3255752960,3255753215,LI
-3255753216,3255762431,SE
+3255753216,3255760895,SE
+3255760896,3255761151,FO
+3255761152,3255762431,SE
3255762432,3255762943,BE
3255762944,3255771135,DE
3255779328,3255787519,DE
@@ -97157,7 +98521,7 @@
3256963840,3256964095,PL
3256964096,3256965119,RU
3256966144,3256967167,RU
-3256967168,3256967423,NL
+3256967168,3256967423,LT
3256967424,3256967679,RU
3256967680,3256968191,CH
3256968192,3256969215,RO
@@ -97382,7 +98746,7 @@
3258064128,3258064383,FR
3258064384,3258065151,GB
3258065152,3258065407,DE
-3258065408,3258065663,LI
+3258065408,3258065663,CH
3258065664,3258065919,SA
3258065920,3258066175,DE
3258066176,3258066431,PL
@@ -97441,7 +98805,6 @@
3258085632,3258085887,DE
3258085888,3258086143,PA
3258086144,3258086399,AT
-3258086400,3258086655,RU
3258086656,3258086911,PL
3258086912,3258087167,GB
3258087168,3258087423,UA
@@ -97788,9 +99151,19 @@
3259320056,3259320063,AT
3259320064,3259320575,GB
3259320576,3259320583,FR
-3259320584,3259328190,GB
+3259320584,3259326975,GB
+3259326976,3259327487,IE
+3259327488,3259328190,GB
3259328191,3259328191,US
-3259328192,3259334655,GB
+3259328192,3259328511,GB
+3259328512,3259328703,EE
+3259328704,3259328799,GB
+3259328800,3259328863,EE
+3259328864,3259334495,GB
+3259334496,3259334527,IE
+3259334528,3259334543,GB
+3259334544,3259334551,IE
+3259334552,3259334655,GB
3259334656,3259338751,DE
3259338752,3259339263,GB
3259339520,3259341823,GB
@@ -97903,7 +99276,8 @@
3260554240,3260555263,CH
3260555264,3260563455,HU
3260563456,3260571647,GB
-3260571648,3260579839,BE
+3260571648,3260575743,BE
+3260575744,3260579839,GB
3260579840,3260580351,PL
3260580352,3260580863,HU
3260580864,3260581375,GB
@@ -97911,7 +99285,7 @@
3260581888,3260582399,IL
3260582400,3260583423,RU
3260583424,3260583679,GB
-3260583680,3260583935,PT
+3260583680,3260583935,IE
3260583936,3260584447,NO
3260584448,3260585471,RO
3260585472,3260586495,UA
@@ -98002,9 +99376,7 @@
3261532928,3261533183,GB
3261533184,3261533439,SE
3261533440,3261533695,US
-3261533696,3261534207,SE
-3261534208,3261534463,NL
-3261534464,3261534719,SE
+3261533696,3261534719,SE
3261534720,3261534975,US
3261534976,3261538559,SE
3261538560,3261538815,GB
@@ -98251,7 +99623,7 @@
3262422016,3262422527,SE
3262422528,3262423039,AT
3262423040,3262423551,GB
-3262423552,3262424063,UA
+3262423552,3262424063,US
3262424064,3262424575,IT
3262424576,3262424831,PL
3262424832,3262425087,GB
@@ -99137,9 +100509,7 @@
3262478032,3262478035,AT
3262478036,3262478039,DE
3262478040,3262478043,NL
-3262478044,3262478122,DE
-3262478123,3262478123,CY
-3262478124,3262478211,DE
+3262478044,3262478211,DE
3262478212,3262478215,NL
3262478216,3262478219,FR
3262478220,3262478223,SE
@@ -99212,9 +100582,7 @@
3262478922,3262478924,DE
3262478925,3262478925,NL
3262478926,3262478926,AT
-3262478927,3262478931,DE
-3262478932,3262478932,CH
-3262478933,3262478935,DE
+3262478927,3262478935,DE
3262478936,3262478937,CH
3262478938,3262478938,NL
3262478939,3262478939,GB
@@ -99295,8 +100663,7 @@
3262479054,3262479056,DE
3262479057,3262479057,GB
3262479058,3262479058,FR
-3262479059,3262479059,IT
-3262479060,3262479062,DE
+3262479059,3262479062,DE
3262479063,3262479063,CH
3262479064,3262479064,FR
3262479065,3262479065,DE
@@ -99389,9 +100756,7 @@
3262479190,3262479191,IT
3262479192,3262479192,FR
3262479193,3262479193,GB
-3262479194,3262479196,DE
-3262479197,3262479197,GB
-3262479198,3262479199,DE
+3262479194,3262479199,DE
3262479200,3262479200,NL
3262479201,3262479201,HU
3262479202,3262479202,FR
@@ -99410,8 +100775,8 @@
3262479234,3262479234,GB
3262479235,3262479238,DE
3262479239,3262479239,FR
-3262479240,3262479240,DE
-3262479241,3262479242,FR
+3262479240,3262479241,DE
+3262479242,3262479242,FR
3262479243,3262479243,NL
3262479244,3262479244,IT
3262479245,3262479249,DE
@@ -99490,9 +100855,7 @@
3262479357,3262479357,FR
3262479358,3262479361,DE
3262479362,3262479362,PT
-3262479363,3262479366,DE
-3262479367,3262479367,CH
-3262479368,3262479368,DE
+3262479363,3262479368,DE
3262479369,3262479369,FR
3262479370,3262479370,CH
3262479371,3262479371,GB
@@ -99558,7 +100921,7 @@
3262479472,3262479472,DE
3262479473,3262479473,CH
3262479474,3262479474,BE
-3262479475,3262479475,CH
+3262479475,3262479475,DE
3262479476,3262479476,GB
3262479477,3262479477,BE
3262479478,3262479478,IT
@@ -99629,14 +100992,14 @@
3262479586,3262479586,GR
3262479587,3262479588,DE
3262479589,3262479589,IT
-3262479590,3262479590,GB
+3262479590,3262479590,DE
3262479591,3262479591,NL
3262479592,3262479592,DE
3262479593,3262479593,FR
3262479594,3262479594,DE
3262479595,3262479595,FR
-3262479596,3262479598,DE
-3262479599,3262479600,IT
+3262479596,3262479599,DE
+3262479600,3262479600,IT
3262479601,3262479601,DE
3262479602,3262479602,GB
3262479603,3262479604,DE
@@ -99667,8 +101030,7 @@
3262479637,3262479637,ES
3262479638,3262479638,DE
3262479639,3262479639,AT
-3262479640,3262479640,FR
-3262479641,3262479641,IT
+3262479640,3262479641,DE
3262479642,3262479642,GB
3262479643,3262479643,DE
3262479644,3262479644,NL
@@ -99728,9 +101090,7 @@
3262479717,3262479717,BE
3262479718,3262479720,DE
3262479721,3262479721,AT
-3262479722,3262479724,DE
-3262479725,3262479725,AT
-3262479726,3262479727,DE
+3262479722,3262479727,DE
3262479728,3262479728,BE
3262479729,3262479729,DE
3262479730,3262479730,ES
@@ -99777,8 +101137,7 @@
3262479792,3262479793,DE
3262479794,3262479794,FR
3262479795,3262479795,CH
-3262479796,3262479796,DE
-3262479797,3262479797,AT
+3262479796,3262479797,DE
3262479798,3262479799,GB
3262479800,3262479808,DE
3262479809,3262479809,FR
@@ -99838,8 +101197,7 @@
3262480173,3262480173,NL
3262480174,3262480174,DE
3262480175,3262480175,NL
-3262480176,3262480176,DE
-3262480177,3262480177,CH
+3262480176,3262480177,DE
3262480178,3262480178,IT
3262480179,3262480179,DE
3262480180,3262480180,FR
@@ -99850,9 +101208,7 @@
3262480187,3262480187,DE
3262480188,3262480188,FI
3262480189,3262480189,CH
-3262480190,3262480190,DE
-3262480191,3262480191,NO
-3262480192,3262480194,DE
+3262480190,3262480194,DE
3262480195,3262480195,GB
3262480196,3262480197,DE
3262480198,3262480198,NL
@@ -99932,9 +101288,7 @@
3262480341,3262480341,CH
3262480342,3262480342,DE
3262480343,3262480343,DK
-3262480344,3262480344,DE
-3262480345,3262480345,CH
-3262480346,3262480346,DE
+3262480344,3262480346,DE
3262480347,3262480347,NL
3262480348,3262480352,DE
3262480353,3262480353,CH
@@ -99942,8 +101296,8 @@
3262480355,3262480355,GB
3262480356,3262480356,DE
3262480357,3262480357,GB
-3262480358,3262480359,CH
-3262480360,3262480365,DE
+3262480358,3262480358,CH
+3262480359,3262480365,DE
3262480366,3262480366,AT
3262480367,3262480367,DE
3262480368,3262480368,GB
@@ -100173,7 +101527,9 @@
3263514112,3263520767,GB
3263520768,3263525887,DE
3263525888,3263526143,ZA
-3263526144,3263545343,DE
+3263526144,3263527423,DE
+3263527424,3263527679,ZW
+3263527680,3263545343,DE
3263545344,3263561727,US
3263561728,3263627263,NL
3263627264,3263627519,RU
@@ -100192,7 +101548,8 @@
3263637248,3263637503,UA
3263637504,3263638527,RU
3263638528,3263639039,UA
-3263639040,3263639551,RU
+3263639040,3263639295,RU
+3263639296,3263639551,DE
3263639552,3263640575,GB
3263640576,3263647743,RU
3263647744,3263651619,LT
@@ -100202,7 +101559,8 @@
3263654400,3263654911,SY
3263654912,3263656959,RU
3263656960,3263657471,SY
-3263657472,3263660031,RU
+3263657472,3263657727,DE
+3263657728,3263660031,RU
3263660032,3263661055,DE
3263661056,3263666175,RU
3263666176,3263676415,AZ
@@ -100907,9 +102265,7 @@
3266805760,3266813951,AT
3266813952,3266822143,UA
3266822144,3266830335,FR
-3266830336,3266836479,BE
-3266836480,3266837503,LU
-3266837504,3266838527,BE
+3266830336,3266838527,BE
3266838528,3266969599,IT
3266969600,3267035135,RU
3267035136,3267039231,NO
@@ -100967,14 +102323,12 @@
3267097600,3267098623,KZ
3267098624,3267098879,GB
3267098880,3267098895,FR
-3267098912,3267099043,FR
+3267098944,3267099043,FR
3267099136,3267099263,DE
3267099264,3267099327,NL
3267099328,3267099383,GB
3267099384,3267099387,NL
-3267099388,3267099407,BE
-3267099408,3267099415,DE
-3267099416,3267099455,BE
+3267099388,3267099455,BE
3267099456,3267099463,GB
3267099464,3267099647,BE
3267099648,3267100671,IT
@@ -101029,7 +102383,9 @@
3267845632,3267846655,FR
3267846656,3267846911,MQ
3267846912,3267887103,FR
-3267887104,3268078591,GB
+3267887104,3268017469,GB
+3268017470,3268017470,KE
+3268017471,3268078591,GB
3268078848,3268139005,GB
3268139007,3268149247,GB
3268149248,3268165631,EE
@@ -101394,7 +102750,9 @@
3270672384,3270680575,GB
3270680576,3270684671,IL
3270684672,3270688767,FR
-3270688768,3270772079,IT
+3270688768,3270716167,IT
+3270716168,3270716171,SI
+3270716172,3270772079,IT
3270772080,3270772087,NL
3270772088,3270836223,IT
3270836224,3270901759,DE
@@ -103070,10 +104428,9 @@
3275439104,3275439679,GB
3275439688,3275439935,GB
3275439944,3275439951,GB
-3275439968,3275440655,GB
-3275440672,3275441407,GB
+3275439968,3275441407,GB
3275441424,3275441439,GB
-3275441472,3275441535,GB
+3275441472,3275441567,GB
3275441600,3275441823,GB
3275441832,3275441835,GB
3275441840,3275442723,GB
@@ -103091,7 +104448,7 @@
3275448320,3275449359,GB
3275449376,3275449399,GB
3275449440,3275449471,GB
-3275449480,3275449519,GB
+3275449488,3275449519,GB
3275449520,3275449527,FR
3275449528,3275449567,GB
3275449584,3275449887,GB
@@ -103150,7 +104507,7 @@
3275473232,3275473311,GB
3275473328,3275473359,GB
3275473368,3275473895,GB
-3275473904,3275474079,GB
+3275473904,3275474047,GB
3275474088,3275474735,GB
3275474752,3275474887,GB
3275474896,3275474911,GB
@@ -103160,8 +104517,7 @@
3275475292,3275475295,GB
3275475376,3275475399,GB
3275475408,3275475447,GB
-3275475456,3275475719,GB
-3275475728,3275475791,GB
+3275475456,3275475791,GB
3275475800,3275475831,GB
3275475840,3275475871,GB
3275475876,3275475879,GB
@@ -103169,7 +104525,7 @@
3275475968,3275476223,GB
3275476288,3275476479,GB
3275476608,3275476631,GB
-3275476656,3275476687,GB
+3275476640,3275476687,GB
3275476704,3275476735,GB
3275476920,3275476927,GB
3275476944,3275476959,GB
@@ -103472,9 +104828,7 @@
3276036544,3276036607,FR
3276036608,3276039263,GB
3276039264,3276039279,FR
-3276039280,3276042015,GB
-3276042016,3276042031,FR
-3276042032,3276042079,GB
+3276039280,3276042079,GB
3276042080,3276042095,FR
3276042096,3276045247,GB
3276045248,3276045255,FR
@@ -103628,7 +104982,6 @@
3276490776,3276490776,NL
3276490782,3276490782,AT
3276490783,3276490783,CH
-3276494480,3276494495,GB
3276499504,3276499567,DE
3276503040,3276505087,DE
3276509184,3276510207,IT
@@ -104130,9 +105483,7 @@
3276912672,3276912687,IT
3276912688,3276912879,GB
3276912880,3276912895,IT
-3276912896,3276917183,GB
-3276917184,3276917215,ES
-3276917216,3276917231,GB
+3276912896,3276917231,GB
3276917232,3276917247,FR
3276917248,3276917735,GB
3276917736,3276917739,ES
@@ -104341,8 +105692,8 @@
3277403312,3277403327,GB
3277403328,3277403359,FR
3277403360,3277403375,GB
-3277403376,3277403471,FR
-3277403472,3277403647,GB
+3277403376,3277403487,FR
+3277403488,3277403647,GB
3277403648,3277403807,ES
3277403808,3277404159,GB
3277404160,3277404415,DE
@@ -104677,11 +106028,9 @@
3278938648,3278938659,DE
3278938660,3278938663,CH
3278938664,3278938667,GB
-3278938668,3278938671,DE
-3278938672,3278938675,IT
+3278938668,3278938675,DE
3278938676,3278938679,FR
-3278938680,3278938683,NO
-3278938684,3278938687,DE
+3278938680,3278938687,DE
3278938688,3278938691,CH
3278938692,3278938695,DE
3278938696,3278938699,IT
@@ -104720,9 +106069,7 @@
3278938892,3278938895,DE
3278938896,3278938903,FR
3278938904,3278938911,GB
-3278938912,3278938919,DE
-3278938920,3278938923,SK
-3278938924,3278938927,DE
+3278938912,3278938927,DE
3278938928,3278938931,GB
3278938932,3278938943,DE
3278938944,3278938947,IT
@@ -104738,13 +106085,9 @@
3278938996,3278938999,DE
3278939000,3278939003,ES
3278939004,3278939007,NL
-3278939008,3278939011,IE
+3278939008,3278939011,DE
3278939012,3278939015,RU
-3278939016,3278939023,DE
-3278939024,3278939027,IT
-3278939028,3278939035,DE
-3278939036,3278939039,HU
-3278939040,3278939047,DE
+3278939016,3278939047,DE
3278939048,3278939055,FR
3278939056,3278939075,DE
3278939076,3278939079,CH
@@ -104756,9 +106099,7 @@
3278939100,3278939103,DE
3278939104,3278939107,CH
3278939108,3278939111,FR
-3278939112,3278939115,DE
-3278939116,3278939119,NL
-3278939120,3278939131,DE
+3278939112,3278939131,DE
3278939132,3278939135,NL
3278939136,3278939147,US
3278939148,3278939151,AR
@@ -104792,8 +106133,7 @@
3278939404,3278939407,CH
3278939408,3278939419,DE
3278939420,3278939423,IE
-3278939424,3278939427,GB
-3278939428,3278939439,DE
+3278939424,3278939439,DE
3278939440,3278939443,IT
3278939444,3278939459,DE
3278939460,3278939463,DK
@@ -104829,60 +106169,29 @@
3278939636,3278939639,DK
3278939640,3278939647,DE
3278939648,3278939651,FR
-3278939652,3278939655,DE
-3278939656,3278939659,FR
-3278939660,3278939663,TR
+3278939652,3278939663,DE
3278939664,3278939667,IT
-3278939668,3278939671,GB
-3278939672,3278939679,FR
-3278939680,3278939683,GR
-3278939684,3278939687,FR
-3278939688,3278939691,DE
-3278939692,3278939695,FR
-3278939696,3278939699,GR
-3278939700,3278939703,TR
-3278939704,3278939707,KE
-3278939708,3278939711,TR
-3278939712,3278939715,CY
-3278939716,3278939723,TR
-3278939724,3278939727,MC
-3278939728,3278939731,DE
-3278939732,3278939735,AT
-3278939736,3278939739,RU
-3278939740,3278939743,HU
+3278939668,3278939743,DE
3278939744,3278939747,GB
-3278939748,3278939751,ES
+3278939748,3278939751,DE
3278939752,3278939755,GR
3278939756,3278939759,DE
3278939760,3278939763,FR
-3278939764,3278939767,DE
-3278939768,3278939771,ES
-3278939772,3278939775,IT
-3278939776,3278939779,DE
-3278939780,3278939783,FR
+3278939764,3278939783,DE
3278939784,3278939787,BE
-3278939788,3278939791,DE
-3278939792,3278939795,ES
-3278939796,3278939799,DE
-3278939800,3278939803,ES
+3278939788,3278939803,DE
3278939804,3278939807,GB
-3278939808,3278939815,DE
-3278939816,3278939819,NL
-3278939820,3278939823,DE
+3278939808,3278939823,DE
3278939824,3278939827,HU
3278939828,3278939835,DE
3278939836,3278939839,FR
-3278939840,3278939843,IT
-3278939844,3278939847,BE
-3278939848,3278939855,DE
-3278939856,3278939859,FR
+3278939840,3278939859,DE
3278939860,3278939863,GB
3278939864,3278939867,IT
-3278939868,3278939871,CH
+3278939868,3278939871,DE
3278939872,3278939875,ES
3278939876,3278939879,IT
-3278939880,3278939883,ES
-3278939884,3278939887,DE
+3278939880,3278939887,DE
3278939888,3278939891,PL
3278939892,3278939899,ES
3278939900,3278939903,IT
@@ -104929,7 +106238,7 @@
3278940156,3278940159,PH
3278940160,3278940163,GR
3278940164,3278940167,CH
-3278940168,3278940171,DK
+3278940168,3278940171,DE
3278940172,3278940175,FR
3278940176,3278940179,GB
3278940180,3278940183,CH
@@ -104942,8 +106251,7 @@
3278940228,3278940231,DE
3278940232,3278940235,CH
3278940236,3278940239,ES
-3278940240,3278940243,CY
-3278940244,3278940247,DE
+3278940240,3278940247,DE
3278940248,3278940251,FR
3278940252,3278940255,IT
3278940256,3278940259,BE
@@ -104955,9 +106263,7 @@
3278940284,3278940291,NL
3278940292,3278940295,DE
3278940296,3278940299,IT
-3278940300,3278940303,FR
-3278940304,3278940307,DE
-3278940308,3278940311,CH
+3278940300,3278940311,DE
3278940312,3278940315,IT
3278940316,3278940319,DE
3278940320,3278940323,NL
@@ -104965,9 +106271,10 @@
3278940328,3278940335,DE
3278940336,3278940339,NL
3278940340,3278940347,DE
-3278940348,3278940355,GB
+3278940348,3278940351,GB
+3278940352,3278940355,DE
3278940356,3278940359,NL
-3278940360,3278940363,GR
+3278940360,3278940363,DE
3278940364,3278940367,IT
3278940368,3278940371,FR
3278940372,3278940375,GB
@@ -104976,14 +106283,10 @@
3278940384,3278940387,NL
3278940388,3278940391,IE
3278940392,3278940395,FR
-3278940396,3278940399,NL
-3278940400,3278940403,DE
+3278940396,3278940403,DE
3278940404,3278940407,FR
3278940408,3278940411,IT
-3278940412,3278940412,CH
-3278940413,3278940415,DE
-3278940416,3278940419,BE
-3278940420,3278940423,DE
+3278940412,3278940423,DE
3278940424,3278940427,CH
3278940428,3278940431,DE
3278940432,3278940435,CH
@@ -105023,8 +106326,7 @@
3278940604,3278940607,FR
3278940608,3278940611,ES
3278940612,3278940615,PT
-3278940616,3278940619,IT
-3278940620,3278940623,DE
+3278940616,3278940623,DE
3278940624,3278940631,IT
3278940632,3278940635,GB
3278940636,3278940639,BE
@@ -105034,8 +106336,7 @@
3278940652,3278940655,FR
3278940656,3278940663,DE
3278940664,3278940667,FR
-3278940668,3278940679,DE
-3278940680,3278940683,CH
+3278940668,3278940683,DE
3278940684,3278940691,NL
3278940692,3278940695,SE
3278940696,3278940707,DE
@@ -105077,8 +106378,7 @@
3278940892,3278940899,DE
3278940900,3278940903,FR
3278940904,3278940911,ES
-3278940912,3278940915,IT
-3278940916,3278940919,DE
+3278940912,3278940919,DE
3278940920,3278940923,PT
3278940924,3278940931,DE
3278940932,3278940935,NL
@@ -105093,8 +106393,7 @@
3278940968,3278940983,DE
3278940984,3278940987,IT
3278940988,3278940991,NL
-3278940992,3278940995,PT
-3278940996,3278940999,DE
+3278940992,3278940999,DE
3278941000,3278941003,NL
3278941004,3278941023,DE
3278941024,3278941027,IT
@@ -105108,8 +106407,7 @@
3278941060,3278941063,GB
3278941064,3278941067,IT
3278941068,3278941071,ES
-3278941072,3278941075,IT
-3278941076,3278941083,DE
+3278941072,3278941083,DE
3278941084,3278941087,GB
3278941088,3278941091,BE
3278941092,3278941095,DE
@@ -105245,9 +106543,7 @@
3278942168,3278942171,CH
3278942172,3278942179,DE
3278942180,3278942183,FR
-3278942184,3278942187,DE
-3278942188,3278942191,IT
-3278942192,3278942203,DE
+3278942184,3278942203,DE
3278942204,3278942207,CH
3278942208,3278942211,TW
3278942212,3278942227,AU
@@ -105443,9 +106739,7 @@
3278942880,3278942881,DE
3278942882,3278942882,CH
3278942883,3278942883,GB
-3278942884,3278942884,DE
-3278942885,3278942885,NL
-3278942886,3278942889,DE
+3278942884,3278942889,DE
3278942890,3278942890,ES
3278942891,3278942894,DE
3278942895,3278942895,NL
@@ -105495,8 +106789,7 @@
3278942969,3278942969,AT
3278942970,3278942970,ES
3278942971,3278942971,IT
-3278942972,3278942977,DE
-3278942978,3278942978,BE
+3278942972,3278942978,DE
3278942979,3278942979,FR
3278942980,3278942980,IT
3278942981,3278942984,DE
@@ -105612,8 +106905,7 @@
3278943141,3278943141,NL
3278943142,3278943142,FR
3278943143,3278943143,ES
-3278943144,3278943145,DE
-3278943146,3278943146,CH
+3278943144,3278943146,DE
3278943147,3278943147,NL
3278943148,3278943148,FR
3278943149,3278943149,BE
@@ -105847,9 +107139,7 @@
3278943469,3278943469,NL
3278943470,3278943471,ES
3278943472,3278943472,BE
-3278943473,3278943473,DE
-3278943474,3278943474,BE
-3278943475,3278943477,DE
+3278943473,3278943477,DE
3278943478,3278943478,NL
3278943479,3278943481,DE
3278943482,3278943482,IT
@@ -105857,11 +107147,9 @@
3278943490,3278943490,BE
3278943491,3278943491,DE
3278943492,3278943492,CH
-3278943493,3278943494,DE
-3278943495,3278943495,FR
+3278943493,3278943495,DE
3278943496,3278943496,GB
-3278943497,3278943499,DE
-3278943500,3278943500,IT
+3278943497,3278943500,DE
3278943501,3278943501,FR
3278943502,3278943505,DE
3278943506,3278943506,AT
@@ -106004,9 +107292,7 @@
3278943687,3278943687,CH
3278943688,3278943689,IT
3278943690,3278943690,ES
-3278943691,3278943693,DE
-3278943694,3278943694,GB
-3278943695,3278943695,DE
+3278943691,3278943695,DE
3278943696,3278943696,GB
3278943697,3278943697,DE
3278943698,3278943698,IT
@@ -106095,7 +107381,7 @@
3278943812,3278943812,IT
3278943813,3278943813,DE
3278943814,3278943814,ES
-3278943815,3278943815,MA
+3278943815,3278943815,DE
3278943816,3278943816,GB
3278943817,3278943817,FR
3278943818,3278943818,DE
@@ -106120,7 +107406,7 @@
3278943839,3278943839,IT
3278943840,3278943845,DE
3278943846,3278943846,GB
-3278943847,3278943847,FR
+3278943847,3278943847,DE
3278943848,3278943848,IT
3278943849,3278943849,DE
3278943850,3278943851,FR
@@ -106191,9 +107477,7 @@
3278943944,3278943944,IT
3278943945,3278943945,NL
3278943946,3278943946,LU
-3278943947,3278943947,DE
-3278943948,3278943948,ES
-3278943949,3278943950,DE
+3278943947,3278943950,DE
3278943951,3278943951,LU
3278943952,3278943953,DE
3278943954,3278943954,FR
@@ -106222,8 +107506,7 @@
3278943988,3278943988,ES
3278943989,3278943990,DE
3278943991,3278943991,NL
-3278943992,3278943992,IT
-3278943993,3278943995,DE
+3278943992,3278943995,DE
3278943996,3278943997,CH
3278943998,3278944001,DE
3278944002,3278944002,GB
@@ -106276,8 +107559,7 @@
3278944067,3278944067,DE
3278944068,3278944068,ES
3278944069,3278944069,PL
-3278944070,3278944070,DE
-3278944071,3278944071,DK
+3278944070,3278944071,DE
3278944072,3278944072,AT
3278944073,3278944073,FR
3278944074,3278944075,ES
@@ -106305,7 +107587,7 @@
3278944099,3278944099,GB
3278944100,3278944102,DE
3278944103,3278944104,IT
-3278944105,3278944105,FR
+3278944105,3278944105,DE
3278944106,3278944106,AT
3278944107,3278944108,DE
3278944109,3278944109,ES
@@ -106321,8 +107603,7 @@
3278944123,3278944123,IT
3278944124,3278944124,DE
3278944125,3278944125,SE
-3278944126,3278944126,ES
-3278944127,3278944127,DE
+3278944126,3278944127,DE
3278944128,3278944128,PT
3278944129,3278944129,BE
3278944130,3278944130,DE
@@ -106344,9 +107625,7 @@
3278944148,3278944148,ES
3278944149,3278944149,DE
3278944150,3278944150,IE
-3278944151,3278944151,DE
-3278944152,3278944152,IS
-3278944153,3278944158,DE
+3278944151,3278944158,DE
3278944159,3278944159,CH
3278944160,3278944160,FR
3278944161,3278944163,DE
@@ -106385,7 +107664,7 @@
3278944210,3278944210,AT
3278944211,3278944211,DE
3278944212,3278944212,FR
-3278944213,3278944213,DK
+3278944213,3278944213,DE
3278944214,3278944214,GB
3278944215,3278944215,IT
3278944216,3278944216,DE
@@ -106403,9 +107682,7 @@
3278944232,3278944232,NL
3278944233,3278944233,GB
3278944234,3278944234,AT
-3278944235,3278944235,DE
-3278944236,3278944236,IT
-3278944237,3278944238,DE
+3278944235,3278944238,DE
3278944239,3278944239,SE
3278944240,3278944240,FR
3278944241,3278944241,IT
@@ -106733,8 +108010,7 @@
3278945817,3278945821,DE
3278945822,3278945822,GR
3278945823,3278945823,CH
-3278945824,3278945826,DE
-3278945827,3278945827,DK
+3278945824,3278945827,DE
3278945828,3278945828,FR
3278945829,3278945829,DE
3278945830,3278945831,NL
@@ -107237,9 +108513,7 @@
3280658176,3280658431,DE
3280658432,3280660479,MT
3280660480,3280662527,RU
-3280662528,3280662543,CA
-3280662544,3280662575,DE
-3280662576,3280662591,CA
+3280662528,3280662591,DE
3280662592,3280662607,IT
3280662608,3280662623,DE
3280662624,3280662655,IT
@@ -107252,9 +108526,7 @@
3280663344,3280663391,IT
3280663392,3280663407,HK
3280663408,3280663423,IT
-3280663424,3280663519,DE
-3280663520,3280663551,CA
-3280663552,3280663999,DE
+3280663424,3280663999,DE
3280664000,3280664063,IT
3280664064,3280664319,CZ
3280664320,3280664831,DE
@@ -107292,11 +108564,7 @@
3280796672,3280797695,CZ
3280797696,3280863231,CH
3280863232,3280928767,TR
-3280928768,3280928831,GB
-3280928832,3280928847,RU
-3280928848,3280928855,GB
-3280928856,3280928863,RU
-3280928864,3280934927,GB
+3280928768,3280934927,GB
3280934928,3280934935,DE
3280934936,3280935055,GB
3280935056,3280935063,IT
@@ -107884,7 +109152,9 @@
3284030616,3284030623,SE
3284030624,3284030775,GB
3284030776,3284030783,SE
-3284030784,3284030991,GB
+3284030784,3284030799,GB
+3284030800,3284030815,SE
+3284030816,3284030991,GB
3284030992,3284031007,FR
3284031008,3284033535,GB
3284033536,3284041727,RU
@@ -108244,7 +109514,6 @@
3285449472,3285449727,RU
3285449728,3285450751,UA
3285451456,3285451471,GB
-3285451608,3285451615,GB
3285452354,3285452354,GB
3285452496,3285452511,GB
3285453440,3285453823,GB
@@ -108380,6 +109649,7 @@
3285929216,3285929231,DE
3285930752,3285931007,GB
3285931528,3285931559,DE
+3285931560,3285931567,HU
3285935872,3285936127,GB
3285936136,3285936147,FR
3285936152,3285936167,FR
@@ -108407,6 +109677,7 @@
3285961984,3285961991,GB
3285962752,3285963775,DE
3285964800,3285964935,DE
+3285964944,3285964959,DE
3285965056,3285966079,DE
3285968896,3285970943,GB
3285975040,3286013695,FR
@@ -108860,6 +110131,7 @@
3287467008,3287468031,SA
3287468032,3287469055,UA
3287469056,3287470079,DE
+3287471360,3287471615,CH
3287472128,3287472639,RU
3287472640,3287473151,UA
3287473152,3287474175,GB
@@ -108889,9 +110161,7 @@
3287572480,3287580671,DE
3287580672,3287588863,LV
3287588864,3287597055,BE
-3287597056,3287603082,GI
-3287603083,3287603083,US
-3287603084,3287605247,GI
+3287597056,3287605247,GI
3287605248,3287630335,DE
3287630336,3287631359,PL
3287631360,3287631871,IR
@@ -108921,7 +110191,7 @@
3287663616,3287663871,NL
3287663872,3287664127,PT
3287664128,3287664383,PL
-3287664384,3287664639,DE
+3287664384,3287664639,US
3287664640,3287664895,UA
3287664896,3287665151,GB
3287665152,3287665407,NO
@@ -109530,6 +110800,8 @@
3291043584,3291043839,KE
3291043840,3291044095,ZW
3291044096,3291044351,KE
+3291044352,3291044607,GN
+3291044608,3291044863,KE
3291044864,3291045119,AO
3291045120,3291045375,KE
3291045376,3291045631,NG
@@ -109721,6 +110993,7 @@
3291554304,3291554559,MZ
3291554816,3291555071,CD
3291555328,3291555583,CM
+3291555840,3291556095,GN
3291611136,3291611647,ZA
3291611648,3291611903,MU
3291676672,3291742207,ZA
@@ -110129,14 +111402,17 @@
3292267008,3292267263,KE
3292267520,3292267775,BW
3292268032,3292268287,CM
+3292268544,3292269055,ZA
+3292274688,3292274943,ZA
+3292275712,3292275967,KE
+3292276224,3292276479,GN
3292332032,3292334079,MU
3292334080,3292336127,TZ
3292336128,3292340223,ZA
3292340224,3292344319,GH
3292344320,3292345343,ZA
3292345344,3292346367,KE
-3292346368,3292348415,ZA
-3292349440,3292350463,ZA
+3292346368,3292350463,ZA
3292350464,3292351487,CD
3292351488,3292352511,AO
3292352512,3292364799,ZA
@@ -110175,7 +111451,9 @@
3301140480,3301146623,NG
3301146624,3301171199,ZA
3301171200,3301172223,IN
-3301172224,3301175295,ZA
+3301172224,3301173247,ZA
+3301173248,3301173759,UG
+3301173760,3301175295,ZA
3301175296,3301179391,EG
3301179392,3301179903,RU
3301179904,3301181183,SC
@@ -110582,6 +111860,7 @@
3304669184,3304685567,TZ
3304685568,3304701951,ZA
3304701952,3304718335,AO
+3304718336,3304849407,MU
3304849408,3305111551,ZA
3305111552,3307208703,TN
3307208704,3309305855,EG
@@ -110803,7 +112082,9 @@
3320905728,3320938495,DJ
3320938496,3320971263,AO
3320971264,3320979455,GA
-3320979456,3320985599,ZA
+3320979456,3320981503,ZA
+3320981504,3320981759,KE
+3320981760,3320985599,ZA
3320985600,3320985607,KE
3320985608,3320995839,ZA
3320995840,3321004031,NG
@@ -111030,9 +112311,7 @@
3322361907,3322361914,GB
3322361915,3322362367,US
3322362368,3322362431,DE
-3322362432,3322363039,US
-3322363040,3322363071,BR
-3322363072,3322609663,US
+3322362432,3322609663,US
3322609664,3322610687,SA
3322610688,3322678535,US
3322678536,3322678551,SA
@@ -111138,9 +112417,7 @@
3322890440,3322890447,QA
3322890448,3322890719,US
3322890720,3322890727,QA
-3322890728,3322891855,US
-3322891856,3322891871,BR
-3322891872,3322892631,US
+3322890728,3322892631,US
3322892632,3322892639,IN
3322892640,3322893063,US
3322893064,3322893071,BR
@@ -111166,9 +112443,7 @@
3322899088,3322899103,US
3322899104,3322899135,HK
3322899136,3322899143,IN
-3322899144,3322901007,US
-3322901008,3322901015,BR
-3322901016,3322902831,US
+3322899144,3322902831,US
3322902832,3322902847,IN
3322902848,3322903375,US
3322903376,3322903383,GB
@@ -111335,7 +112610,6 @@
3323027712,3323031807,US
3323032576,3323032831,US
3323032832,3323033087,IT
-3323033088,3323033343,JP
3323033344,3323033599,US
3323033600,3323034111,BR
3323034112,3323038719,US
@@ -111405,12 +112679,8 @@
3323244096,3323244319,US
3323244320,3323244327,IN
3323244328,3323244543,US
-3323244544,3323244703,CA
-3323244704,3323244735,US
-3323244736,3323244767,CA
-3323244768,3323244783,US
-3323244784,3323244799,CA
-3323244800,3323245311,US
+3323244544,3323244671,CA
+3323244672,3323245311,US
3323245312,3323245319,IN
3323245320,3323245327,CA
3323245328,3323245343,US
@@ -111431,16 +112701,9 @@
3323245536,3323245551,SG
3323245552,3323245559,GB
3323245560,3323245567,CN
-3323245568,3323245823,US
-3323245824,3323245951,GB
-3323245952,3323245959,US
-3323245960,3323245983,GB
-3323245984,3323246015,US
-3323246016,3323246079,GB
-3323246080,3323246463,US
+3323245568,3323246463,US
3323246464,3323246591,CN
-3323246592,3323246847,CA
-3323246848,3323247359,US
+3323246592,3323247359,US
3323247360,3323247423,CA
3323247424,3323247439,US
3323247440,3323247487,CA
@@ -111977,8 +113240,7 @@
3324587776,3324633087,US
3324633088,3324634111,PE
3324634112,3324635135,AR
-3324635136,3324635391,SG
-3324635392,3324635647,US
+3324635136,3324635647,US
3324635648,3324635903,HK
3324635904,3324636159,US
3324636160,3324637183,NZ
@@ -112501,7 +113763,9 @@
3325119888,3325119903,MX
3325119904,3325120076,US
3325120077,3325120081,MX
-3325120082,3325128703,US
+3325120082,3325120423,US
+3325120424,3325120431,IN
+3325120432,3325128703,US
3325128704,3325129215,TH
3325129216,3325131775,US
3325131776,3325132031,AU
@@ -113962,7 +115226,7 @@
3328774400,3328775935,CA
3328775936,3328789503,US
3328790016,3328794623,US
-3328795648,3328798719,US
+3328795648,3328796671,US
3328798720,3328799743,NL
3328800000,3328800255,NL
3328800256,3328800767,IT
@@ -114141,9 +115405,7 @@
3331371008,3331371071,NZ
3331371072,3331371327,US
3331371328,3331371343,SE
-3331371344,3331371975,US
-3331371976,3331371983,PK
-3331371984,3331372287,US
+3331371344,3331372287,US
3331372288,3331372319,FR
3331372320,3331527167,US
3331527168,3331527679,GB
@@ -114303,9 +115565,7 @@
3332833536,3332841471,CA
3332841472,3332841727,US
3332841728,3332866303,CA
-3332866304,3332869904,US
-3332869905,3332869905,BD
-3332869906,3332874239,US
+3332866304,3332874239,US
3332874240,3332875007,CA
3332875008,3332875263,US
3332875264,3332876287,CA
@@ -114544,58 +115804,9 @@
3335573760,3335574015,IN
3335574016,3335581695,US
3335581952,3335582463,US
-3335582720,3335660999,US
-3335661000,3335661040,GR
-3335661041,3335661057,US
-3335661058,3335661156,ID
-3335661157,3335661313,US
-3335661314,3335661412,BS
-3335661413,3335661668,US
-3335661669,3335661763,BD
-3335661764,3335661825,US
-3335661826,3335661924,NO
-3335661925,3335662014,AM
-3335662015,3335662023,US
-3335662024,3335662069,IT
-3335662070,3335662180,US
-3335662181,3335662278,IN
-3335662279,3335662279,US
-3335662280,3335662325,GB
-3335662326,3335662535,US
-3335662536,3335662586,JP
-3335662587,3335662692,US
-3335662693,3335662787,LA
-3335662788,3335662791,US
-3335662792,3335662827,TH
-3335662828,3335662849,US
-3335662850,3335662948,JP
-3335662949,3335663716,US
-3335663717,3335663811,JP
-3335663812,3335663972,US
-3335663973,3335664062,KR
-3335664063,3335664129,US
-3335664130,3335664228,JP
-3335664229,3335664323,TH
-3335664324,3335664385,US
-3335664386,3335664484,UA
-3335664485,3335664569,PL
-3335664570,3335664996,US
-3335664997,3335665071,LV
-3335665072,3335665252,US
+3335582720,3335665252,US
3335665253,3335665342,TH
-3335665343,3335665508,US
-3335665509,3335665598,TH
-3335665599,3335665764,US
-3335665765,3335665854,IN
-3335665855,3335666177,US
-3335666178,3335666276,ID
-3335666277,3335666532,US
-3335666533,3335666627,CN
-3335666628,3335666788,US
-3335666789,3335666878,IS
-3335666879,3335666945,US
-3335666946,3335667044,JO
-3335667045,3335719071,US
+3335665343,3335719071,US
3335719072,3335719087,IN
3335719088,3335747071,US
3335747072,3335749631,NL
@@ -114721,12 +115932,10 @@
3337961600,3337961615,RO
3337961616,3337961631,US
3337961632,3337961663,GB
-3337961664,3337961679,CA
-3337961680,3337962623,US
+3337961664,3337961671,CA
+3337961672,3337962623,US
3337962624,3337962751,CA
-3337962752,3337963135,US
-3337963136,3337963263,TR
-3337963264,3337963639,US
+3337962752,3337963639,US
3337963640,3337963647,CA
3337963648,3337963775,US
3337963776,3337963783,AZ
@@ -114984,7 +116193,9 @@
3339264000,3339270399,US
3339270400,3339270655,CA
3339271168,3339327999,US
-3339328512,3339328831,CA
+3339328512,3339328783,CA
+3339328784,3339328791,US
+3339328792,3339328831,CA
3339328832,3339328895,US
3339328896,3339328943,CA
3339328944,3339328959,AE
@@ -114994,9 +116205,7 @@
3339329280,3339329407,US
3339329408,3339329439,CA
3339329440,3339329455,GB
-3339329456,3339329519,CA
-3339329520,3339329527,GB
-3339329528,3339329535,CA
+3339329456,3339329535,CA
3339329536,3339338239,US
3339338240,3339338495,CA
3339338496,3339342847,US
@@ -115014,10 +116223,12 @@
3339707392,3339708415,BM
3339708416,3339722623,US
3339722624,3339722639,VN
-3339722640,3339722655,US
-3339722656,3339722687,IN
+3339722640,3339722671,US
+3339722672,3339722687,IN
3339722688,3339722703,EG
-3339722704,3339722751,VN
+3339722704,3339722719,CA
+3339722720,3339722735,VN
+3339722736,3339722751,ID
3339722752,3339727343,US
3339727344,3339727351,CA
3339727352,3339728895,US
@@ -115027,9 +116238,7 @@
3339729920,3339743231,US
3339743232,3339744255,CA
3339744256,3339747327,US
-3339747328,3339747583,CA
-3339747584,3339747839,FR
-3339747840,3339748351,CA
+3339747328,3339748351,CA
3339748352,3339753471,US
3339753472,3339754495,CA
3339754496,3339760639,US
@@ -115161,9 +116370,7 @@
3339965440,3339968511,CA
3339968512,3339975935,US
3339975936,3339976703,CA
-3339976704,3340059343,US
-3340059344,3340059359,CA
-3340059360,3340080127,US
+3339976704,3340080127,US
3340080128,3340081151,CA
3340081152,3340084223,US
3340084224,3340085247,KN
@@ -115185,9 +116392,7 @@
3340391818,3340391825,LK
3340391826,3340391833,US
3340391834,3340391841,LK
-3340391842,3340391925,US
-3340391926,3340391933,EG
-3340391934,3340392169,US
+3340391842,3340392169,US
3340392170,3340392190,LK
3340392191,3340418559,US
3340418560,3340419071,CA
@@ -115201,15 +116406,15 @@
3340481536,3340482559,CA
3340482560,3340490751,US
3340490752,3340492799,CA
-3340492800,3340584703,US
-3340584704,3340584959,KW
-3340584960,3340637439,US
+3340492800,3340637439,US
3340637440,3340637695,IE
3340637696,3340639231,US
3340639232,3340639295,IE
3340639296,3340677119,US
3340677120,3340679167,CA
-3340679168,3340694783,US
+3340679168,3340693679,US
+3340693680,3340693695,GB
+3340693696,3340694783,US
3340694784,3340695039,CA
3340695040,3340846111,US
3340846112,3340846119,CA
@@ -115384,29 +116589,24 @@
3341533952,3341534207,CA
3341534720,3341535007,US
3341535008,3341535015,ID
-3341535016,3341535023,US
-3341535024,3341535031,MY
+3341535016,3341535031,US
3341535032,3341535039,VN
3341535040,3341535047,MA
-3341535048,3341535055,SA
-3341535056,3341535087,US
-3341535088,3341535095,GB
-3341535096,3341535103,US
-3341535104,3341535135,HK
-3341535136,3341535151,US
-3341535152,3341535167,CN
-3341535168,3341535183,US
+3341535048,3341535087,US
+3341535088,3341535095,BD
+3341535096,3341535151,US
+3341535152,3341535171,CN
+3341535172,3341535183,US
3341535184,3341535187,ID
3341535188,3341535195,US
3341535196,3341535199,SA
3341535200,3341535231,US
3341535232,3341536255,GB
-3341536256,3341536383,HK
-3341536384,3341536415,US
-3341536416,3341536447,IN
-3341536448,3341536479,BR
-3341536480,3341536511,VN
-3341536512,3341546239,US
+3341536256,3341536319,US
+3341536320,3341536383,GB
+3341536384,3341536511,US
+3341536512,3341536767,CA
+3341536768,3341546239,US
3341546240,3341547007,CA
3341547008,3341547519,CH
3341547520,3341549311,CA
@@ -115490,8 +116690,8 @@
3342488897,3342488908,GB
3342488909,3342488909,US
3342488910,3342488925,GB
-3342488926,3342488959,US
-3342488960,3342489215,SC
+3342488926,3342489087,US
+3342489088,3342489215,SC
3342489216,3342489279,GB
3342489280,3342489301,US
3342489302,3342489311,AR
@@ -115505,7 +116705,6 @@
3342489504,3342489567,GB
3342489568,3342496767,US
3342496768,3342497791,CA
-3342497792,3342499839,GD
3342499840,3342505983,US
3342505984,3342507007,BB
3342507008,3342510079,US
@@ -115582,11 +116781,7 @@
3343047792,3343047799,PL
3343047800,3343047847,US
3343047848,3343047855,IT
-3343047856,3343047863,US
-3343047864,3343047865,RU
-3343047866,3343047866,US
-3343047867,3343047871,RU
-3343047872,3343055871,US
+3343047856,3343055871,US
3343055872,3343056895,CA
3343056896,3343108095,US
3343108096,3343108863,GB
@@ -115645,8 +116840,7 @@
3343378896,3343378911,US
3343378912,3343378919,VE
3343378920,3343378927,NL
-3343378928,3343378935,GB
-3343378936,3343378959,US
+3343378928,3343378959,US
3343378960,3343378967,RU
3343378968,3343379039,US
3343379040,3343379071,GB
@@ -115666,10 +116860,8 @@
3343379392,3343379399,NI
3343379400,3343379407,CO
3343379408,3343380479,US
-3343380480,3343384575,CA
-3343384576,3343457439,US
-3343457440,3343457455,GB
-3343457456,3343457527,US
+3343380480,3343384319,CA
+3343384320,3343457527,US
3343457528,3343457535,ID
3343457536,3343457607,US
3343457608,3343457615,AU
@@ -115681,7 +116873,9 @@
3343460864,3343461375,CA
3343461376,3343465471,US
3343465472,3343466495,JM
-3343466496,3343649791,US
+3343466496,3343563521,US
+3343563522,3343563522,SG
+3343563523,3343649791,US
3343649792,3343650815,VI
3343650816,3343653535,US
3343653536,3343653551,CA
@@ -115693,7 +116887,9 @@
3343656512,3343656575,VI
3343656576,3343656703,US
3343656704,3343656959,VI
-3343656960,3343858687,US
+3343656960,3343747583,US
+3343747584,3343748095,VE
+3343748096,3343858687,US
3343858688,3343859199,VG
3343859200,3343922975,US
3343922976,3343923007,PA
@@ -115755,9 +116951,7 @@
3344381224,3344381255,US
3344381256,3344381263,CA
3344381264,3344381271,MX
-3344381272,3344381935,US
-3344381936,3344381943,MX
-3344381944,3344406527,US
+3344381272,3344406527,US
3344406528,3344408575,CA
3344408576,3344415679,US
3344415680,3344415743,AR
@@ -115836,38 +117030,9 @@
3345299456,3345301503,CA
3345301504,3345303551,US
3345303552,3345304575,CA
-3345304576,3345309855,US
-3345309856,3345309871,BR
-3345309872,3345309959,US
-3345309960,3345309967,ES
-3345309968,3345310079,US
-3345310080,3345310143,PL
-3345310144,3345310223,US
-3345310224,3345310231,CA
-3345310232,3345310271,US
-3345310272,3345310279,BR
-3345310280,3345310287,US
-3345310288,3345310295,AR
-3345310296,3345310351,US
-3345310352,3345310367,BR
-3345310368,3345310383,US
-3345310384,3345310399,BR
-3345310400,3345310559,US
-3345310560,3345310575,IN
-3345310576,3345310975,US
-3345310976,3345311039,PL
-3345311040,3345311103,US
-3345311104,3345311119,BR
-3345311120,3345311135,US
-3345311136,3345311167,RO
-3345311168,3345311199,US
-3345311200,3345311207,BR
-3345311208,3345311215,SK
-3345311216,3345311223,US
-3345311224,3345311231,SK
-3345311232,3345311719,US
-3345311720,3345311727,BR
-3345311728,3345315071,US
+3345304576,3345310247,US
+3345310248,3345310255,GB
+3345310256,3345315071,US
3345315072,3345315327,TW
3345315328,3345315583,US
3345315584,3345315839,TW
@@ -115883,60 +117048,57 @@
3345332288,3345332295,BR
3345332296,3345332303,PK
3345332304,3345332311,US
-3345332312,3345332319,CY
+3345332312,3345332319,BR
3345332320,3345332327,PT
-3345332328,3345332331,US
-3345332332,3345332335,BR
-3345332336,3345332339,US
-3345332340,3345332343,ID
+3345332328,3345332339,US
+3345332340,3345332343,BR
3345332344,3345332347,VN
3345332348,3345332351,CY
3345332352,3345332375,US
3345332376,3345332383,CA
-3345332384,3345332387,BR
-3345332388,3345332399,US
-3345332400,3345332403,LK
-3345332404,3345332407,GB
-3345332408,3345332411,ID
+3345332384,3345332399,US
+3345332400,3345332403,BR
+3345332404,3345332411,ID
3345332412,3345332423,US
3345332424,3345332431,MY
3345332432,3345332435,VN
-3345332436,3345332439,US
-3345332440,3345332447,NL
-3345332448,3345332455,US
+3345332436,3345332439,GB
+3345332440,3345332455,US
3345332456,3345332459,MY
-3345332460,3345332487,US
-3345332488,3345332495,IN
+3345332460,3345332463,US
+3345332464,3345332471,BR
+3345332472,3345332475,US
+3345332476,3345332479,CN
+3345332480,3345332487,US
+3345332488,3345332495,AU
3345332496,3345332503,CA
3345332504,3345332511,US
3345332512,3345332519,ID
-3345332520,3345332535,US
-3345332536,3345332543,IN
-3345332544,3345332583,US
+3345332520,3345332583,US
3345332584,3345332587,CY
3345332588,3345332591,ID
-3345332592,3345332595,BR
+3345332592,3345332595,US
3345332596,3345332599,BD
-3345332600,3345332603,CN
+3345332600,3345332603,US
3345332604,3345332607,ID
-3345332608,3345332647,US
-3345332648,3345332655,BR
+3345332608,3345332655,US
3345332656,3345332659,CY
-3345332660,3345332663,US
-3345332664,3345332667,IN
+3345332660,3345332667,US
3345332668,3345332671,ID
3345332672,3345332735,HR
3345332736,3345332751,US
3345332752,3345332767,GB
3345332768,3345332799,US
3345332800,3345332815,GB
-3345332816,3345332831,BR
-3345332832,3345332863,IN
-3345332864,3345333119,VN
-3345333120,3345333183,US
+3345332816,3345332831,US
+3345332832,3345332863,GB
+3345332864,3345333055,VN
+3345333056,3345333183,US
3345333184,3345333215,IN
-3345333216,3345333223,MY
-3345333224,3345333247,US
+3345333216,3345333223,US
+3345333224,3345333227,MX
+3345333228,3345333231,CY
+3345333232,3345333247,US
3345333248,3345334271,GP
3345334272,3345339391,US
3345339392,3345340415,CA
@@ -115950,9 +117112,7 @@
3345398784,3345399807,BS
3345399808,3345401855,PR
3345401856,3345403903,CA
-3345403904,3345408017,US
-3345408018,3345408021,GB
-3345408022,3345408092,US
+3345403904,3345408092,US
3345408093,3345408094,GB
3345408095,3345408110,US
3345408111,3345408114,AU
@@ -115968,9 +117128,7 @@
3345408391,3345408394,GB
3345408395,3345408415,US
3345408416,3345408420,AU
-3345408421,3345408424,US
-3345408425,3345408428,GB
-3345408429,3345408460,US
+3345408421,3345408460,US
3345408461,3345408464,IN
3345408465,3345408496,US
3345408497,3345408497,GB
@@ -115989,9 +117147,7 @@
3345408652,3345408655,CA
3345408656,3345408667,US
3345408668,3345408671,CA
-3345408672,3345408697,US
-3345408698,3345408701,GB
-3345408702,3345408784,US
+3345408672,3345408784,US
3345408785,3345408788,CA
3345408789,3345408903,US
3345408904,3345408907,GB
@@ -116003,9 +117159,7 @@
3345409094,3345409097,CA
3345409098,3345409175,US
3345409176,3345409179,CN
-3345409180,3345409204,US
-3345409205,3345409212,AU
-3345409213,3345409558,US
+3345409180,3345409558,US
3345409559,3345409562,CA
3345409563,3345409578,US
3345409579,3345409580,GB
@@ -116073,7 +117227,8 @@
3345667120,3346194175,US
3346194432,3346196479,US
3346196480,3346197503,CA
-3346197504,3346201599,US
+3346197504,3346198527,US
+3346200576,3346201599,US
3346201600,3346202623,CA
3346202624,3346209279,US
3346209792,3346210241,JM
@@ -116123,11 +117278,7 @@
3346232960,3346232991,GB
3346232992,3346233023,US
3346233024,3346233087,GB
-3346233088,3346233256,US
-3346233257,3346233266,AR
-3346233267,3346233267,US
-3346233268,3346233268,AR
-3346233269,3346233279,US
+3346233088,3346233279,US
3346233280,3346233311,GB
3346233312,3346234367,US
3346234368,3346234687,CA
@@ -116156,13 +117307,9 @@
3346505784,3346505791,GB
3346505792,3346505895,US
3346505896,3346505903,AU
-3346505904,3346506039,US
-3346506040,3346506047,CA
-3346506048,3346506111,US
+3346505904,3346506111,US
3346506112,3346506119,JM
-3346506120,3346506159,US
-3346506160,3346506167,VE
-3346506168,3346506271,US
+3346506120,3346506271,US
3346506272,3346506279,GB
3346506280,3346506287,CA
3346506288,3346506311,US
@@ -116177,9 +117324,7 @@
3346506528,3346506535,GB
3346506536,3346506567,US
3346506568,3346506575,TR
-3346506576,3346506743,US
-3346506744,3346506751,CA
-3346506752,3346520063,US
+3346506576,3346520063,US
3346520064,3346521087,CA
3346521088,3346523135,US
3346523136,3346523391,BO
@@ -116204,12 +117349,12 @@
3346989056,3347014143,US
3347014144,3347014255,CA
3347014256,3347014271,CY
-3347014272,3347015551,CA
-3347015552,3347015615,US
-3347015616,3347015647,CA
+3347014272,3347014399,CA
+3347014400,3347014655,US
+3347014656,3347015423,CA
+3347015424,3347015647,US
3347015648,3347015663,AE
-3347015664,3347015679,CA
-3347015680,3347016703,US
+3347015664,3347016703,US
3347016704,3347017727,CA
3347017728,3347021823,US
3347021824,3347022847,CA
@@ -116261,9 +117406,7 @@
3349619392,3349619503,US
3349619504,3349619519,PA
3349619520,3349619583,CA
-3349619584,3349621243,US
-3349621244,3349621245,IN
-3349621246,3349621826,US
+3349619584,3349621826,US
3349621827,3349621828,DK
3349621829,3349637119,US
3349637120,3349639167,CA
@@ -116281,7 +117424,9 @@
3349649408,3349653503,CA
3349653504,3349702623,US
3349702624,3349702655,LK
-3349702656,3349723260,US
+3349702656,3349723199,US
+3349723200,3349723215,PK
+3349723216,3349723260,US
3349723261,3349723265,CA
3349723266,3349723360,US
3349723361,3349723367,CA
@@ -116291,11 +117436,14 @@
3349724192,3349724199,AF
3349724200,3349724207,US
3349724208,3349724215,CA
-3349724216,3349724415,US
+3349724216,3349724351,US
+3349724352,3349724359,PK
+3349724360,3349724415,US
3349724416,3349724447,AE
3349724448,3349724985,US
3349724986,3349724999,PK
-3349725000,3349727231,US
+3349725000,3349725183,US
+3349726208,3349727231,US
3349729280,3349731327,US
3349731328,3349732003,CA
3349732004,3349732007,US
@@ -116319,7 +117467,9 @@
3350146048,3350150143,US
3350150144,3350160639,CA
3350160640,3350160895,US
-3350160896,3350169855,CA
+3350160896,3350161919,CA
+3350161920,3350162431,US
+3350162432,3350169855,CA
3350169856,3350170111,US
3350170112,3350181887,CA
3350181888,3350183167,US
@@ -116360,9 +117510,7 @@
3350488960,3350489023,CN
3350489024,3350489063,US
3350489064,3350489071,CN
-3350489072,3350492369,US
-3350492370,3350492383,GB
-3350492384,3350492961,US
+3350489072,3350492961,US
3350492962,3350492990,GB
3350492991,3350501395,US
3350501396,3350501399,TR
@@ -116385,7 +117533,9 @@
3350518916,3350518919,TT
3350518920,3350519035,US
3350519036,3350519039,PA
-3350519040,3350548735,US
+3350519040,3350519059,US
+3350519060,3350519063,IN
+3350519064,3350548735,US
3350548736,3350548991,CA
3350549248,3350561279,US
3350561536,3350574591,US
@@ -116398,9 +117548,7 @@
3350618112,3350619135,CA
3350619136,3350620383,US
3350620384,3350620415,GB
-3350620416,3350620991,US
-3350620992,3350621023,KY
-3350621024,3350623231,US
+3350620416,3350623231,US
3350623232,3350624255,CA
3350624256,3350625279,US
3350626304,3350628351,CA
@@ -116434,13 +117582,7 @@
3350836268,3350836275,IN
3350836276,3350836279,ZA
3350836280,3350836283,CA
-3350836284,3350836287,US
-3350836288,3350836295,GB
-3350836296,3350836303,CO
-3350836304,3350836311,AR
-3350836312,3350836319,PH
-3350836320,3350836327,MX
-3350836328,3350836991,US
+3350836284,3350836991,US
3350836992,3350837247,CA
3350837248,3350837759,US
3350837760,3350843391,CA
@@ -116518,7 +117660,8 @@
3351035904,3351036927,US
3351036928,3351037951,CA
3351037952,3351043071,US
-3351043072,3351043583,FR
+3351043072,3351043327,CA
+3351043328,3351043583,FR
3351043584,3351044095,CA
3351044096,3351045311,US
3351045312,3351045343,EE
@@ -116527,53 +117670,27 @@
3351058944,3351059455,CA
3351059456,3351071743,US
3351071744,3351072767,CA
-3351072768,3351074240,US
-3351074241,3351074241,IN
-3351074242,3351074243,US
-3351074244,3351074249,IN
-3351074250,3351074250,US
-3351074251,3351074252,IN
-3351074253,3351074254,US
-3351074255,3351074255,TH
-3351074256,3351074256,IN
-3351074257,3351074257,PK
-3351074258,3351074258,IN
-3351074259,3351074260,US
+3351072768,3351074260,US
3351074261,3351074261,BR
-3351074262,3351074263,US
-3351074264,3351074264,MX
-3351074265,3351074266,IN
-3351074267,3351074267,US
-3351074268,3351074268,CY
-3351074269,3351074270,US
-3351074271,3351074271,PK
+3351074262,3351074271,US
3351074272,3351074272,GT
-3351074273,3351074279,US
-3351074280,3351074280,EG
-3351074281,3351074283,US
+3351074273,3351074283,US
3351074284,3351074284,BR
-3351074285,3351074286,US
-3351074287,3351074287,EG
-3351074288,3351074294,US
-3351074295,3351074296,GR
-3351074297,3351074297,EG
-3351074298,3351074300,US
-3351074301,3351074301,GR
+3351074285,3351074301,US
3351074302,3351074302,PT
3351074303,3351074303,BR
3351074304,3351074367,US
3351074368,3351074369,BR
3351074370,3351074373,US
-3351074374,3351074374,IN
+3351074374,3351074374,DE
3351074375,3351074375,BR
-3351074376,3351074376,US
-3351074377,3351074377,IN
-3351074378,3351074382,US
-3351074383,3351074383,IN
-3351074384,3351074384,US
+3351074376,3351074377,DE
+3351074378,3351074379,US
+3351074380,3351074380,DE
+3351074381,3351074384,US
3351074385,3351074385,CL
-3351074386,3351074386,RU
-3351074387,3351074387,US
+3351074386,3351074386,US
+3351074387,3351074387,BR
3351074388,3351074388,DE
3351074389,3351074389,US
3351074390,3351074390,DE
@@ -116583,123 +117700,70 @@
3351074394,3351074395,UA
3351074396,3351074396,BR
3351074397,3351074397,UA
-3351074398,3351074401,US
-3351074402,3351074402,UA
+3351074398,3351074402,US
3351074403,3351074403,BR
3351074404,3351074404,CL
3351074405,3351074405,US
3351074406,3351074406,CA
-3351074407,3351074407,RU
-3351074408,3351074408,DE
-3351074409,3351074409,IN
+3351074407,3351074409,BR
3351074410,3351074410,DE
3351074411,3351074411,US
-3351074412,3351074413,CO
-3351074414,3351074414,US
-3351074415,3351074415,BD
+3351074412,3351074413,PA
+3351074414,3351074415,US
3351074416,3351074417,BR
-3351074418,3351074419,US
-3351074420,3351074420,BR
-3351074421,3351074422,US
+3351074418,3351074418,US
+3351074419,3351074419,IN
+3351074420,3351074422,US
3351074423,3351074423,UA
3351074424,3351074426,US
3351074427,3351074427,DE
3351074428,3351074429,US
3351074430,3351074430,BR
-3351074431,3351074437,US
-3351074438,3351074438,BR
-3351074439,3351074445,US
+3351074431,3351074439,US
+3351074440,3351074440,CA
+3351074441,3351074444,US
+3351074445,3351074445,CA
3351074446,3351074446,CL
-3351074447,3351074449,US
-3351074450,3351074452,PH
+3351074447,3351074451,US
+3351074452,3351074452,IN
3351074453,3351074453,US
-3351074454,3351074457,PH
-3351074458,3351074458,US
-3351074459,3351074459,PH
-3351074460,3351074460,IN
-3351074461,3351074463,PH
-3351074464,3351074464,US
-3351074465,3351074466,PH
-3351074467,3351074470,US
-3351074471,3351074471,PH
-3351074472,3351074472,US
+3351074454,3351074457,IN
+3351074458,3351074463,US
+3351074464,3351074466,BR
+3351074467,3351074472,US
3351074473,3351074473,BR
3351074474,3351074474,US
3351074475,3351074475,BR
-3351074476,3351074481,US
-3351074482,3351074482,PH
-3351074483,3351074484,US
-3351074485,3351074485,PH
-3351074486,3351074486,US
+3351074476,3351074483,US
+3351074484,3351074484,CA
+3351074485,3351074486,US
3351074487,3351074487,DE
3351074488,3351074498,US
-3351074499,3351074501,PH
-3351074502,3351074502,GB
-3351074503,3351074503,PH
-3351074504,3351074504,RU
+3351074499,3351074499,CL
+3351074500,3351074504,US
3351074505,3351074505,DE
-3351074506,3351074506,GB
-3351074507,3351074516,US
+3351074506,3351074516,US
3351074517,3351074518,CA
3351074519,3351074524,US
3351074525,3351074528,CA
-3351074529,3351074529,US
-3351074530,3351074530,PH
-3351074531,3351074534,US
-3351074535,3351074537,RU
-3351074538,3351074552,US
-3351074553,3351074553,UA
-3351074554,3351074557,US
+3351074529,3351074557,US
3351074558,3351074558,CA
-3351074559,3351074687,US
-3351074688,3351074688,IN
-3351074689,3351074690,US
+3351074559,3351074690,US
3351074691,3351074691,BR
-3351074692,3351074693,US
-3351074694,3351074694,PK
-3351074695,3351074696,BR
-3351074697,3351074697,PE
-3351074698,3351074698,BR
-3351074699,3351074700,US
-3351074701,3351074701,IN
-3351074702,3351074702,PK
-3351074703,3351074703,CA
-3351074704,3351074704,US
-3351074705,3351074706,PK
-3351074707,3351074707,IN
-3351074708,3351074708,US
+3351074692,3351074708,US
3351074709,3351074709,CA
3351074710,3351074711,US
3351074712,3351074712,TR
-3351074713,3351074713,BR
-3351074714,3351074714,PK
-3351074715,3351074715,IN
-3351074716,3351074716,BR
-3351074717,3351074718,US
-3351074719,3351074720,IN
-3351074721,3351074721,PK
-3351074722,3351074722,US
-3351074723,3351074724,PK
-3351074725,3351074726,PA
-3351074727,3351074727,PK
-3351074728,3351074728,BR
+3351074713,3351074728,US
3351074729,3351074729,EG
-3351074730,3351074730,US
-3351074731,3351074731,PA
+3351074730,3351074731,US
3351074732,3351074732,BR
-3351074733,3351074733,PK
-3351074734,3351074734,RU
+3351074733,3351074734,US
3351074735,3351074735,BR
-3351074736,3351074738,US
-3351074739,3351074739,GB
-3351074740,3351074740,BR
-3351074741,3351074741,IN
-3351074742,3351074743,US
+3351074736,3351074743,US
3351074744,3351074745,BR
3351074746,3351074746,AU
-3351074747,3351074747,US
-3351074748,3351074749,IN
-3351074750,3351074750,BR
+3351074747,3351074750,US
3351074751,3351074751,HU
3351074752,3351074815,US
3351074816,3351076863,CA
@@ -116724,64 +117788,56 @@
3351196672,3351197695,US
3351197696,3351197711,PT
3351197712,3351197715,EG
-3351197716,3351197735,US
+3351197716,3351197719,CN
+3351197720,3351197735,US
3351197736,3351197739,CY
-3351197740,3351197743,CA
+3351197740,3351197743,BR
3351197744,3351197751,VN
3351197752,3351197759,PT
-3351197760,3351197763,ID
-3351197764,3351197775,US
+3351197760,3351197775,US
3351197776,3351197783,BR
3351197784,3351197787,US
-3351197788,3351197791,BR
+3351197788,3351197791,GT
3351197792,3351197795,IN
-3351197796,3351197799,US
-3351197800,3351197803,VN
+3351197796,3351197799,BR
+3351197800,3351197803,SI
3351197804,3351197807,AE
-3351197808,3351197823,US
-3351197824,3351197827,BD
+3351197808,3351197827,US
3351197828,3351197831,VN
-3351197832,3351197835,ID
-3351197836,3351197847,US
-3351197848,3351197851,RU
-3351197852,3351197859,US
-3351197860,3351197863,HK
+3351197832,3351197835,US
+3351197836,3351197839,BR
+3351197840,3351197843,US
+3351197844,3351197847,CN
+3351197848,3351197859,US
+3351197860,3351197863,CY
3351197864,3351197867,VN
3351197868,3351197871,CY
-3351197872,3351197879,US
-3351197880,3351197887,VN
+3351197872,3351197887,US
3351197888,3351197891,MX
-3351197892,3351197895,AE
-3351197896,3351197899,US
+3351197892,3351197895,VN
+3351197896,3351197899,BR
3351197900,3351197903,CY
3351197904,3351197911,VN
3351197912,3351197983,US
3351197984,3351198015,MX
-3351198016,3351198039,US
+3351198016,3351198031,US
+3351198032,3351198039,MD
3351198040,3351198047,AE
-3351198048,3351198063,US
-3351198064,3351198071,CN
+3351198048,3351198071,US
3351198072,3351198079,VN
-3351198080,3351198087,US
-3351198088,3351198091,BR
-3351198092,3351198095,US
-3351198096,3351198103,CN
+3351198080,3351198095,US
+3351198096,3351198103,MX
3351198104,3351198111,VN
-3351198112,3351198123,US
-3351198124,3351198127,HK
-3351198128,3351198131,GB
+3351198112,3351198131,US
3351198132,3351198135,BR
-3351198136,3351198139,US
-3351198140,3351198143,BR
-3351198144,3351198151,US
-3351198152,3351198155,HK
+3351198136,3351198151,US
+3351198152,3351198155,GB
3351198156,3351198159,EG
3351198160,3351198171,US
3351198172,3351198175,AU
-3351198176,3351198179,HK
-3351198180,3351198183,US
-3351198184,3351198187,VN
-3351198188,3351198191,HK
+3351198176,3351198179,BD
+3351198180,3351198187,US
+3351198188,3351198191,GH
3351198192,3351198195,CN
3351198196,3351198207,US
3351198208,3351198215,VN
@@ -116789,70 +117845,68 @@
3351198224,3351198231,US
3351198232,3351198235,CA
3351198236,3351198239,US
-3351198240,3351198247,CN
-3351198248,3351198255,HK
+3351198240,3351198251,ID
+3351198252,3351198255,GH
3351198256,3351198259,VN
-3351198260,3351198263,GH
+3351198260,3351198263,DE
3351198264,3351198271,US
-3351198272,3351198279,IL
+3351198272,3351198279,ID
3351198280,3351198335,US
3351198336,3351198351,CA
-3351198352,3351198359,BR
+3351198352,3351198359,US
3351198360,3351198363,GB
3351198364,3351198371,US
3351198372,3351198383,CA
-3351198384,3351198387,GB
+3351198384,3351198387,MX
3351198388,3351198391,US
3351198392,3351198399,TR
-3351198400,3351198403,GB
+3351198400,3351198403,US
3351198404,3351198407,IN
3351198408,3351198411,BR
3351198412,3351198415,GB
-3351198416,3351198423,US
+3351198416,3351198423,CL
3351198424,3351198427,RO
-3351198428,3351198431,ID
+3351198428,3351198431,US
3351198432,3351198439,IN
3351198440,3351198447,US
3351198448,3351198463,JO
-3351198464,3351198471,US
-3351198472,3351198475,PK
+3351198464,3351198475,US
3351198476,3351198479,CY
-3351198480,3351198487,VN
+3351198480,3351198487,BR
3351198488,3351198495,US
3351198496,3351198503,VN
3351198504,3351198507,US
3351198508,3351198511,CY
3351198512,3351198515,US
-3351198516,3351198519,GB
-3351198520,3351198527,US
+3351198516,3351198519,ID
+3351198520,3351198527,IN
3351198528,3351198535,RU
3351198536,3351198539,CY
-3351198540,3351198551,US
-3351198552,3351198559,MY
-3351198560,3351198567,CY
+3351198540,3351198559,US
+3351198560,3351198567,LK
3351198568,3351198575,US
3351198576,3351198579,CY
3351198580,3351198607,US
3351198608,3351198615,GR
3351198616,3351198619,MX
-3351198620,3351198623,CN
+3351198620,3351198623,BD
3351198624,3351198627,CY
3351198628,3351198631,CA
3351198632,3351198687,US
3351198688,3351198703,MA
-3351198704,3351198707,IN
-3351198708,3351198711,CN
+3351198704,3351198711,IN
3351198712,3351232511,US
3351232512,3351232767,IL
-3351232768,3351268111,US
+3351232768,3351267327,US
+3351267328,3351267583,HK
+3351267584,3351267839,JP
+3351267840,3351268111,US
3351268112,3351268115,GB
3351268116,3351268131,US
3351268132,3351268135,GB
3351268136,3351268493,US
3351268494,3351268494,DE
-3351268495,3351268505,US
-3351268506,3351268506,GB
-3351268507,3351268533,US
+3351268495,3351268533,US
3351268534,3351268534,CN
3351268535,3351268537,US
3351268538,3351268538,CN
@@ -117082,10 +118136,8 @@
3351895552,3351895807,CA
3351895808,3351904255,US
3351904256,3351912703,CA
-3351912704,3351914495,US
-3351914496,3351916543,CA
-3351916544,3351920639,US
-3351920640,3351933951,CA
+3351912704,3351912959,US
+3351912960,3351933951,CA
3351933952,3351939071,US
3351939072,3351959551,CA
3351959552,3351961599,US
@@ -117119,7 +118171,9 @@
3352563200,3352563455,US
3352563456,3352573951,CA
3352573952,3352574207,US
-3352574464,3352581631,CA
+3352574464,3352575743,CA
+3352575744,3352575999,US
+3352576000,3352581631,CA
3352581632,3352582143,US
3352582144,3352583935,CA
3352583936,3352584191,US
@@ -117130,42 +118184,33 @@
3352616960,3352887295,CA
3352887296,3352916379,US
3352916380,3352916380,VE
-3352916381,3352916488,US
-3352916489,3352916489,GB
-3352916490,3352916496,US
-3352916497,3352916503,RU
-3352916504,3352916504,PA
-3352916505,3352916507,US
-3352916508,3352916512,PK
-3352916513,3352916513,UA
-3352916514,3352916514,PK
-3352916515,3352916515,UA
-3352916516,3352916527,PK
-3352916528,3352916528,UA
-3352916529,3352916529,US
-3352916530,3352916530,UA
-3352916531,3352916533,PK
+3352916381,3352916479,US
+3352916480,3352916506,BR
+3352916507,3352916507,US
+3352916508,3352916512,BR
+3352916513,3352916513,US
+3352916514,3352916514,BR
+3352916515,3352916515,US
+3352916516,3352916527,BR
+3352916528,3352916530,US
+3352916531,3352916533,BR
3352916534,3352916534,US
-3352916535,3352916541,PK
+3352916535,3352916541,BR
3352916542,3352916542,US
-3352916543,3352916555,RU
-3352916556,3352916556,AR
-3352916557,3352916557,CO
-3352916558,3352916564,RU
-3352916565,3352916565,MY
-3352916566,3352916566,RU
-3352916567,3352916568,US
-3352916569,3352916571,GB
-3352916572,3352916588,US
-3352916589,3352916607,MY
-3352916608,3352916627,US
-3352916628,3352916631,PK
-3352916632,3352916638,US
+3352916543,3352916557,BR
+3352916558,3352916566,US
+3352916567,3352916584,BR
+3352916585,3352916607,US
+3352916608,3352916615,BR
+3352916616,3352916619,US
+3352916620,3352916635,BR
+3352916636,3352916636,US
+3352916637,3352916638,BR
3352916639,3352916639,DE
-3352916640,3352916732,US
-3352916733,3352916733,PK
-3352916734,3352916735,GB
-3352916736,3352918015,US
+3352916640,3352916640,BR
+3352916641,3352916648,US
+3352916649,3352916689,BR
+3352916690,3352918015,US
3352918016,3352919039,CA
3352919040,3353335303,US
3353335304,3353335309,NL
@@ -117185,8 +118230,8 @@
3353335354,3353335359,NL
3353335360,3353335361,US
3353335362,3353335363,NL
-3353335364,3353335372,US
-3353335373,3353335376,NL
+3353335364,3353335374,US
+3353335375,3353335376,NL
3353335377,3353335378,US
3353335379,3353335380,NL
3353335381,3353335382,US
@@ -117194,13 +118239,17 @@
3353335387,3353335388,US
3353335389,3353335390,NL
3353335391,3353335392,US
-3353335393,3353335406,NL
+3353335393,3353335394,NL
+3353335395,3353335396,US
+3353335397,3353335406,NL
3353335407,3353335407,US
3353335408,3353335411,NL
3353335412,3353335414,US
3353335415,3353335420,NL
3353335421,3353335422,US
-3353335423,3353335435,NL
+3353335423,3353335424,NL
+3353335425,3353335426,US
+3353335427,3353335435,NL
3353335436,3353335437,US
3353335438,3353335445,NL
3353335446,3353335447,US
@@ -117242,13 +118291,9 @@
3353335613,3353335614,US
3353335615,3353335616,NL
3353335617,3353335619,US
-3353335620,3353335635,NL
-3353335636,3353335637,US
-3353335638,3353335639,NL
-3353335640,3353335643,US
-3353335644,3353335655,NL
-3353335656,3353335660,US
-3353335661,3353335664,NL
+3353335620,3353335655,NL
+3353335656,3353335662,US
+3353335663,3353335664,NL
3353335665,3353335666,US
3353335667,3353335668,NL
3353335669,3353335670,US
@@ -117287,18 +118332,13 @@
3353731776,3353731823,IL
3353731824,3353731999,US
3353732000,3353732031,CN
-3353732032,3353732063,US
-3353732064,3353732071,RU
-3353732072,3353732127,US
-3353732128,3353732143,RU
-3353732144,3353732159,US
+3353732032,3353732159,US
3353732160,3353732191,CA
3353732192,3353732351,US
3353732352,3353732863,DE
3353732864,3353737215,US
3353737216,3353737471,GB
-3353737472,3353752581,US
-3353752582,3353752585,FR
+3353737472,3353752585,US
3353752586,3353752589,BE
3353752590,3353753055,US
3353753056,3353753059,BR
@@ -117352,15 +118392,7 @@
3353982720,3353983231,CA
3353983232,3353989631,US
3353989632,3353989887,CA
-3353989888,3353995647,US
-3353995648,3353995711,GB
-3353995712,3353996047,US
-3353996048,3353996055,BR
-3353996056,3353996735,US
-3353996736,3353996767,IN
-3353996768,3353996815,US
-3353996816,3353996823,BR
-3353996824,3354066943,US
+3353989888,3354066943,US
3354066944,3354132479,CA
3354132480,3354467748,US
3354467749,3354467749,BL
@@ -117387,17 +118419,17 @@
3354501120,3354503167,CA
3354503168,3354507271,US
3354507272,3354507279,ID
-3354507280,3354507283,PH
-3354507284,3354507287,FR
+3354507280,3354507283,NZ
+3354507284,3354507287,US
3354507288,3354507291,CY
-3354507292,3354507295,GB
+3354507292,3354507295,BR
3354507296,3354507299,VN
3354507300,3354507303,US
-3354507304,3354507307,BR
-3354507308,3354507311,GH
-3354507312,3354507315,CN
+3354507304,3354507307,IN
+3354507308,3354507311,MA
+3354507312,3354507315,BR
3354507316,3354507327,US
-3354507328,3354507335,CY
+3354507328,3354507335,MD
3354507336,3354507343,US
3354507344,3354507347,IN
3354507348,3354507351,BR
@@ -117406,77 +118438,67 @@
3354507364,3354507367,CY
3354507368,3354507375,CA
3354507376,3354507383,ID
-3354507384,3354507387,BD
+3354507384,3354507387,BR
3354507388,3354507391,CN
3354507392,3354507399,CA
3354507400,3354507403,EG
3354507404,3354507407,CN
-3354507408,3354507415,US
-3354507416,3354507423,GB
-3354507424,3354507427,US
-3354507428,3354507431,IN
-3354507432,3354507439,US
+3354507408,3354507439,US
3354507440,3354507443,CY
3354507444,3354507447,JO
3354507448,3354507459,US
-3354507460,3354507463,PK
-3354507464,3354507467,HK
+3354507460,3354507463,BR
+3354507464,3354507467,GH
3354507468,3354507471,CY
3354507472,3354507475,MY
3354507476,3354507479,CY
-3354507480,3354507483,VN
-3354507484,3354507487,US
-3354507488,3354507503,VN
-3354507504,3354507507,US
+3354507480,3354507483,BR
+3354507484,3354507507,US
3354507508,3354507511,PK
3354507512,3354507519,MA
3354507520,3354507535,US
3354507536,3354507539,CN
3354507540,3354507543,HU
3354507544,3354507551,US
-3354507552,3354507559,BD
-3354507560,3354507567,BR
-3354507568,3354507575,GB
+3354507552,3354507567,CN
+3354507568,3354507575,VN
3354507576,3354507583,AE
3354507584,3354507591,US
3354507592,3354507599,CY
3354507600,3354507607,US
3354507608,3354507611,CN
-3354507612,3354507615,HK
+3354507612,3354507615,US
3354507616,3354507623,IN
3354507624,3354507631,EG
3354507632,3354507639,US
-3354507640,3354507647,VN
-3354507648,3354507655,ID
-3354507656,3354507659,US
+3354507640,3354507647,MD
+3354507648,3354507655,US
+3354507656,3354507659,ID
3354507660,3354507667,CY
-3354507668,3354507671,RO
+3354507668,3354507671,BR
3354507672,3354507683,IN
3354507684,3354507687,PT
3354507688,3354507691,CA
3354507692,3354507703,US
3354507704,3354507711,NZ
-3354507712,3354507719,ID
+3354507712,3354507719,LK
3354507720,3354507723,VN
3354507724,3354507727,US
3354507728,3354507735,BR
-3354507736,3354507743,LK
+3354507736,3354507743,IN
3354507744,3354507747,TH
3354507748,3354507751,US
3354507752,3354507755,ID
3354507756,3354507759,IN
3354507760,3354507767,LK
-3354507768,3354507775,BD
+3354507768,3354507775,US
3354507776,3354507779,CY
3354507780,3354507787,US
3354507788,3354507791,CY
3354507792,3354507803,US
3354507804,3354507807,CY
3354507808,3354507815,BR
-3354507816,3354507823,CY
-3354507824,3354507827,US
-3354507828,3354507831,BR
-3354507832,3354507835,US
+3354507816,3354507835,US
3354507836,3354507839,CY
3354507840,3354507847,CN
3354507848,3354507855,CY
@@ -117485,15 +118507,13 @@
3354507872,3354507887,US
3354507888,3354507895,BR
3354507896,3354507903,CY
-3354507904,3354507907,BR
-3354507908,3354507911,BD
-3354507912,3354507915,PK
+3354507904,3354507907,US
+3354507908,3354507911,IN
+3354507912,3354507915,ID
3354507916,3354507919,FR
-3354507920,3354507923,AU
-3354507924,3354507927,US
-3354507928,3354507931,CY
-3354507932,3354507935,IN
-3354507936,3354507943,CY
+3354507920,3354507927,AU
+3354507928,3354507931,US
+3354507932,3354507943,CY
3354507944,3354507959,US
3354507960,3354507967,AE
3354507968,3354507983,MX
@@ -117501,35 +118521,37 @@
3354507992,3354507999,PK
3354508000,3354508015,US
3354508016,3354508031,MX
-3354508032,3354508039,BR
+3354508032,3354508035,US
+3354508036,3354508039,BR
3354508040,3354508043,US
-3354508044,3354508047,CN
-3354508048,3354508059,US
+3354508044,3354508047,DK
+3354508048,3354508051,US
+3354508052,3354508055,VN
+3354508056,3354508059,AU
3354508060,3354508063,BR
3354508064,3354508067,EG
3354508068,3354508071,US
3354508072,3354508075,CY
3354508076,3354508079,RU
3354508080,3354508095,US
-3354508096,3354508099,BD
+3354508096,3354508099,CY
3354508100,3354508107,US
3354508108,3354508111,BD
3354508112,3354508115,CY
-3354508116,3354508119,BD
+3354508116,3354508119,US
3354508120,3354508123,BR
-3354508124,3354508127,CN
+3354508124,3354508127,US
3354508128,3354508135,ID
-3354508136,3354508139,HR
-3354508140,3354508143,US
+3354508136,3354508139,IN
+3354508140,3354508143,CY
3354508144,3354508147,MY
-3354508148,3354508151,NZ
+3354508148,3354508151,BB
3354508152,3354508163,US
3354508164,3354508167,CY
-3354508168,3354508171,US
-3354508172,3354508175,RU
-3354508176,3354508187,US
+3354508168,3354508187,US
3354508188,3354508191,VN
-3354508192,3354508199,IN
+3354508192,3354508195,IN
+3354508196,3354508199,CY
3354508200,3354508203,CA
3354508204,3354508207,US
3354508208,3354508211,VN
@@ -117538,11 +118560,11 @@
3354508220,3354508223,IN
3354508224,3354508235,US
3354508236,3354508239,CA
-3354508240,3354508255,US
+3354508240,3354508247,US
+3354508248,3354508251,VN
+3354508252,3354508255,US
3354508256,3354508259,EG
-3354508260,3354508263,BR
-3354508264,3354508267,VN
-3354508268,3354508271,US
+3354508260,3354508271,US
3354508272,3354508275,TW
3354508276,3354508287,US
3354508288,3354508303,CY
@@ -117557,10 +118579,10 @@
3354508360,3354508367,AU
3354508368,3354508375,BD
3354508376,3354508383,MA
-3354508384,3354508395,US
+3354508384,3354508391,US
+3354508392,3354508395,BR
3354508396,3354508399,VN
-3354508400,3354508415,US
-3354508416,3354508423,GB
+3354508400,3354508423,US
3354508424,3354508431,MD
3354508432,3354508439,RO
3354508440,3354508447,AE
@@ -117572,13 +118594,12 @@
3354508516,3354508519,VN
3354508520,3354508527,IN
3354508528,3354508535,AE
-3354508536,3354508543,US
+3354508536,3354508543,BD
3354508544,3354508559,GR
-3354508560,3354508567,US
-3354508568,3354508579,BD
-3354508580,3354508583,US
-3354508584,3354508591,TH
-3354508592,3354508603,US
+3354508560,3354508571,US
+3354508572,3354508575,CN
+3354508576,3354508579,BR
+3354508580,3354508603,US
3354508604,3354508607,CY
3354508608,3354508623,US
3354508624,3354508639,MX
@@ -117587,20 +118608,19 @@
3354508672,3354508679,US
3354508680,3354508683,CY
3354508684,3354508687,PK
-3354508688,3354508703,US
+3354508688,3354508695,AR
+3354508696,3354508703,US
3354508704,3354508735,AE
3354508736,3354508743,PK
3354508744,3354508751,IN
-3354508752,3354508759,US
+3354508752,3354508759,MD
3354508760,3354508767,SE
3354508768,3354508775,GB
-3354508776,3354508799,US
-3354508800,3354508831,CN
-3354508832,3354508847,US
+3354508776,3354508847,US
3354508848,3354508855,MA
3354508856,3354508863,RO
3354508864,3354508895,CY
-3354508896,3354508927,VN
+3354508896,3354508927,US
3354508928,3354508943,GB
3354508944,3354508951,VN
3354508952,3354508959,PK
@@ -117610,24 +118630,18 @@
3354509004,3354509007,VN
3354509008,3354509019,US
3354509020,3354509023,GR
-3354509024,3354509027,CN
+3354509024,3354509027,BR
3354509028,3354509031,US
3354509032,3354509039,CY
-3354509040,3354509047,MX
-3354509048,3354509135,US
-3354509136,3354509143,BR
-3354509144,3354509151,US
-3354509152,3354509159,HK
-3354509160,3354509183,US
+3354509040,3354509183,US
3354509184,3354509191,BR
-3354509192,3354509199,EG
-3354509200,3354509247,US
+3354509192,3354509247,US
3354509248,3354509255,BR
-3354509256,3354509263,GB
+3354509256,3354509263,US
3354509264,3354509279,BR
3354509280,3354509283,AU
3354509284,3354509287,ID
-3354509288,3354509291,PK
+3354509288,3354509291,CY
3354509292,3354509295,US
3354509296,3354509299,CA
3354509300,3354509391,US
@@ -117721,29 +118735,22 @@
3355389696,3355389951,JP
3355389952,3355407359,US
3355407360,3355408383,PR
-3355408384,3355412735,US
-3355412736,3355412767,PK
-3355412768,3355412771,BR
+3355408384,3355412771,US
3355412772,3355412775,CY
-3355412776,3355412783,MD
-3355412784,3355412791,BR
+3355412776,3355412791,US
3355412792,3355412795,CY
-3355412796,3355412799,US
+3355412796,3355412799,ID
3355412800,3355412803,CY
3355412804,3355412807,CN
3355412808,3355412815,US
3355412816,3355412823,EG
-3355412824,3355412831,US
-3355412832,3355412863,VN
+3355412824,3355412863,US
3355412864,3355412927,FR
3355412928,3355412991,US
3355412992,3355413087,IN
-3355413088,3355413183,US
-3355413184,3355413247,IN
-3355413248,3355417735,US
+3355413088,3355417735,US
3355417736,3355417743,BR
-3355417744,3355417759,IN
-3355417760,3355417799,US
+3355417744,3355417799,US
3355417800,3355417803,CN
3355417804,3355417991,US
3355417992,3355417999,ID
@@ -117755,28 +118762,26 @@
3355418080,3355418111,CN
3355418112,3355418367,US
3355418368,3355418371,BR
-3355418372,3355418379,US
+3355418372,3355418375,US
+3355418376,3355418379,VN
3355418380,3355418383,BR
-3355418384,3355418391,US
-3355418392,3355418395,BR
+3355418384,3355418395,US
3355418396,3355418399,GT
3355418400,3355418431,BE
-3355418432,3355418439,GB
-3355418440,3355418447,VN
-3355418448,3355418455,IN
+3355418432,3355418455,GB
3355418456,3355418463,AE
3355418464,3355418527,US
3355418528,3355418535,BR
3355418536,3355418543,VN
-3355418544,3355418551,NZ
+3355418544,3355418551,BR
3355418552,3355418555,CY
-3355418556,3355418559,HK
-3355418560,3355418567,US
+3355418556,3355418567,US
3355418568,3355418575,MX
3355418576,3355418591,GB
3355418592,3355418607,US
3355418608,3355418615,MX
-3355418616,3355418623,IN
+3355418616,3355418619,US
+3355418620,3355418623,CY
3355418624,3355432959,US
3355432960,3355435007,CA
3355435008,3355443199,US
@@ -117860,7 +118865,6 @@
3355516928,3355525119,AR
3355525120,3355535359,CO
3355535360,3355537407,TT
-3355537408,3355537663,BR
3355537664,3355537919,AR
3355538176,3355538431,CL
3355538432,3355539199,AR
@@ -117981,7 +118985,10 @@
3355924480,3355926527,TT
3355926528,3355927039,NL
3355927040,3355928063,US
-3355928064,3355930623,PA
+3355928064,3355928575,CA
+3355928576,3355929087,GB
+3355929088,3355929599,US
+3355929600,3355930623,PA
3355930624,3355934719,BR
3355934720,3355939839,AR
3355939840,3355940863,SR
@@ -119137,7 +120144,9 @@
3362692864,3362695167,AR
3362695168,3362697215,CO
3362697216,3362703359,AR
-3362703360,3362709503,CO
+3362703360,3362705407,CO
+3362705408,3362707455,AR
+3362707456,3362709503,CO
3362709504,3362711551,AR
3362711552,3362713599,EC
3362713600,3362714623,VE
@@ -119251,7 +120260,7 @@
3367841792,3368052991,BR
3368052992,3368053247,PE
3368053248,3368053503,CO
-3368053760,3368086527,BR
+3368053504,3368086527,BR
3368086528,3368087551,CR
3368087552,3368601799,BR
3368601801,3370188799,BR
@@ -119709,7 +120718,6 @@
3389284352,3389292543,BD
3389292544,3389300735,CN
3389300736,3389301247,ID
-3389301248,3389301759,AU
3389301760,3389302015,IN
3389302016,3389302527,AU
3389302528,3389302783,PK
@@ -121208,7 +122216,7 @@
3393858816,3393859071,ID
3393859072,3393859327,AU
3393859328,3393859583,JP
-3393859584,3393860095,AU
+3393859840,3393860095,AU
3393860096,3393860607,HK
3393860608,3393860863,CN
3393860864,3393861375,IN
@@ -121254,7 +122262,16 @@
3393974272,3393976319,SG
3393976320,3393977343,MO
3393977344,3393978367,CN
-3393978368,3394011135,HK
+3393978368,3393995775,HK
+3393995776,3393996031,DE
+3393996032,3393999615,HK
+3393999616,3393999871,JP
+3393999872,3394000127,HK
+3394000128,3394000383,SG
+3394000384,3394000639,TW
+3394000640,3394005759,HK
+3394005760,3394006015,US
+3394006016,3394011135,HK
3394011136,3394027519,AU
3394027520,3394035711,JP
3394035712,3394039807,MY
@@ -121309,7 +122326,9 @@
3394234368,3394236415,VN
3394236416,3394238463,JP
3394238464,3394239487,CN
-3394239488,3394248703,HK
+3394239488,3394244095,HK
+3394244096,3394244607,TW
+3394244608,3394248703,HK
3394248704,3394252799,VU
3394252800,3394256895,IN
3394256896,3394265087,AU
@@ -121409,14 +122428,29 @@
3394754560,3394756607,MY
3394756608,3394760703,JP
3394760704,3394764799,ID
-3394764800,3394772991,HK
+3394764800,3394765311,HK
+3394765312,3394765567,JP
+3394765568,3394765823,DE
+3394765824,3394768639,HK
+3394768640,3394768895,US
+3394768896,3394769151,HK
+3394769152,3394769407,SG
+3394769408,3394769919,HK
+3394769920,3394770431,TW
+3394770432,3394770687,HK
+3394770688,3394770943,SG
+3394770944,3394771711,HK
+3394771712,3394771967,TW
+3394771968,3394772991,HK
3394772992,3394774015,CN
3394774016,3394775039,HK
3394775040,3394776063,BD
3394776064,3394777087,NZ
3394777088,3394781183,JP
3394781184,3394789375,MP
-3394789376,3394797567,HK
+3394789376,3394791167,HK
+3394791168,3394791423,US
+3394791424,3394797567,HK
3394797568,3394813951,IN
3394813952,3394815999,JP
3394816000,3394818047,HK
@@ -121833,7 +122867,6 @@
3397793024,3397793279,NZ
3397793280,3397793535,VN
3397793536,3397793791,HK
-3397793792,3397794303,PH
3397794304,3397794559,CN
3397794560,3397794815,IN
3397794816,3397812223,HK
@@ -122195,8 +123228,7 @@
3399995392,3399999487,KR
3399999488,3400000475,JP
3400000476,3400000479,US
-3400000480,3400000487,AU
-3400000488,3400002303,JP
+3400000480,3400002303,JP
3400002304,3400002367,HK
3400002368,3400003583,JP
3400003584,3400005631,AU
@@ -122292,7 +123324,6 @@
3400359936,3400364031,JP
3400364032,3400365055,CN
3400365056,3400366079,US
-3400366080,3400367103,CN
3400367104,3400368127,IN
3400368128,3400388607,AU
3400388608,3400392703,TH
@@ -124247,7 +125278,6 @@
3411189760,3411197951,AU
3411197952,3411202047,BD
3411202048,3411204607,AU
-3411204608,3411204863,IN
3411204864,3411205631,KR
3411205632,3411206143,HK
3411206144,3411210239,CN
@@ -124290,7 +125320,9 @@
3411341312,3411345407,KR
3411345408,3411354879,HK
3411354880,3411355647,SG
-3411355648,3411410943,HK
+3411355648,3411376127,HK
+3411376128,3411376383,US
+3411376384,3411410943,HK
3411410944,3411443711,CN
3411443712,3411460095,HK
3411460096,3411464191,NZ
@@ -125236,7 +126268,6 @@
3417264128,3417268223,JP
3417272320,3417274367,NZ
3417274368,3417275391,AU
-3417275392,3417276415,PH
3417276416,3417284607,CN
3417284608,3417288703,SG
3417288704,3417289215,IN
@@ -125264,8 +126295,7 @@
3417354240,3417356287,ID
3417356288,3417357311,AU
3417357312,3417357567,NZ
-3417357568,3417357823,AU
-3417357824,3417358335,PK
+3417357568,3417358335,PK
3417358336,3417374719,HK
3417374720,3417440255,PH
3417440256,3417833471,JP
@@ -125382,7 +126412,6 @@
3418308608,3418324991,CN
3418324992,3418326271,AU
3418326272,3418326527,CN
-3418326528,3418327039,PH
3418327040,3418329087,JP
3418329088,3418333183,CN
3418333184,3418345471,AU
@@ -125398,6 +126427,8 @@
3418399232,3418399247,PH
3418400862,3418400862,SG
3418401456,3418401459,TW
+3418401632,3418401647,PH
+3418405936,3418405939,PH
3418406912,3418423295,IN
3418423296,3418444091,HK
3418444092,3418444095,CN
@@ -126510,14 +127541,12 @@
3448990720,3448991743,IN
3448991744,3449001245,US
3449001246,3449001246,MC
-3449001247,3449098239,US
-3449098240,3449098495,GB
+3449001247,3449098751,US
3449098752,3449099263,DE
-3449099776,3449100287,US
+3449099264,3449100287,US
3449100288,3449100799,HK
3449100800,3449101311,AU
-3449101312,3449101823,US
-3449102336,3449159679,US
+3449101312,3449159679,US
3449159680,3449168639,CA
3449168640,3449168895,US
3449168896,3449169151,CA
@@ -128106,7 +129135,9 @@
3468598016,3468598143,US
3468598144,3468598175,SG
3468598176,3468598271,US
-3468598272,3468599039,SG
+3468598272,3468598391,SG
+3468598392,3468598399,NL
+3468598400,3468599039,SG
3468599040,3468599295,HK
3468599296,3468613631,US
3468613632,3468614655,PR
@@ -128213,6 +129244,7 @@
3470750208,3470752767,US
3470752768,3470753023,CO
3470753024,3470754047,US
+3470754048,3470754303,CA
3470754304,3470754559,PE
3470754560,3470755839,US
3470755840,3470756095,MU
@@ -128227,8 +129259,8 @@
3470886656,3470886911,GB
3470886912,3471057919,US
3471057920,3471058943,VE
-3471058944,3471059455,US
-3471059456,3471060223,ES
+3471058944,3471059967,US
+3471059968,3471060223,ES
3471060224,3471060991,US
3471060992,3471061247,NL
3471061248,3471061503,US
@@ -128316,9 +129348,7 @@
3475670848,3475671039,AG
3475671040,3475681279,US
3475681280,3475685375,HN
-3475685376,3475879279,US
-3475879280,3475879287,TT
-3475879288,3475882767,US
+3475685376,3475882767,US
3475882768,3475882783,FR
3475882784,3475882799,US
3475882800,3475882815,FR
@@ -128391,7 +129421,9 @@
3476447232,3476455423,CA
3476455424,3476881407,US
3476881408,3476946943,CA
-3476946944,3477384735,US
+3476946944,3477384711,US
+3477384712,3477384719,CN
+3477384720,3477384735,US
3477384736,3477384743,IE
3477384744,3477384783,US
3477384784,3477384799,IE
@@ -128415,7 +129447,9 @@
3478275984,3478275999,GB
3478276000,3478277951,US
3478277952,3478277983,GB
-3478277984,3478286591,US
+3478277984,3478278399,US
+3478278400,3478278655,GB
+3478278656,3478286591,US
3478286592,3478286847,GB
3478286848,3478288607,US
3478288608,3478288615,GB
@@ -128692,7 +129726,9 @@
3482775552,3482779647,PR
3482779648,3482910719,US
3482910720,3482927103,CA
-3482927104,3483435007,US
+3482927104,3483025407,US
+3483025408,3483029503,DE
+3483029504,3483435007,US
3483435008,3483533311,CA
3483533312,3483631615,US
3483631616,3483697151,CA
@@ -129123,7 +130159,7 @@
3489153536,3489154047,HN
3489154048,3489155583,MX
3489155584,3489156607,AR
-3489156608,3489157119,MX
+3489156608,3489157375,MX
3489157376,3489157631,CO
3489157632,3489158399,MX
3489158400,3489158655,AR
@@ -130038,7 +131074,19 @@
3509157888,3509166079,CA
3509166080,3509215231,US
3509215232,3509223423,CA
-3509223424,3509305599,US
+3509223424,3509239807,US
+3509239808,3509242879,NL
+3509242880,3509243135,US
+3509243136,3509244159,NL
+3509244160,3509244415,US
+3509244416,3509245231,NL
+3509245232,3509245239,US
+3509245240,3509245279,NL
+3509245280,3509245295,US
+3509245296,3509249279,NL
+3509249280,3509249535,US
+3509249536,3509256191,NL
+3509256192,3509305599,US
3509305600,3509305615,GB
3509305616,3509346303,US
3509346304,3509350711,CA
@@ -130227,7 +131275,9 @@
3510935552,3510943743,CA
3510943744,3511140351,US
3511140352,3511156735,CA
-3511156736,3511812095,US
+3511156736,3511257855,US
+3511257856,3511258111,CN
+3511258112,3511812095,US
3511812096,3511844863,CA
3511844864,3512012095,US
3512012096,3512012159,GB
@@ -130399,9 +131449,7 @@
3514723697,3514723697,BZ
3514723698,3514724455,US
3514724456,3514724456,BZ
-3514724457,3514724635,US
-3514724636,3514724636,UA
-3514724637,3514724707,US
+3514724457,3514724707,US
3514724708,3514724708,BZ
3514724709,3514826751,US
3514826752,3514843135,CA
@@ -130646,7 +131694,9 @@
3518062592,3518066687,CA
3518066688,3518075647,US
3518075648,3518075903,AU
-3518075904,3518076671,US
+3518075904,3518076079,US
+3518076080,3518076087,AU
+3518076088,3518076671,US
3518076672,3518076927,PA
3518076928,3518374719,US
3518374720,3518374783,IN
@@ -130698,7 +131748,9 @@
3519723520,3519724031,CA
3519724032,3519741951,US
3519741952,3519758335,ZA
-3519758336,3519873023,US
+3519758336,3519864831,US
+3519864832,3519868927,CA
+3519868928,3519873023,US
3519873024,3519874559,CA
3519874560,3519875071,US
3519875072,3519877119,CA
@@ -130718,7 +131770,37 @@
3519884288,3519901695,CA
3519901696,3519930367,US
3519934464,3519938559,CA
-3519938560,3519967231,US
+3519938560,3519938815,AT
+3519938816,3519939071,BE
+3519939072,3519939327,BG
+3519939328,3519939583,HR
+3519939584,3519939839,CY
+3519939840,3519940095,CZ
+3519940096,3519940351,DK
+3519940352,3519940607,FI
+3519940608,3519940863,FR
+3519940864,3519941119,GI
+3519941120,3519941375,GR
+3519941376,3519941631,HU
+3519941632,3519941887,IE
+3519941888,3519942143,IT
+3519942144,3519942399,LV
+3519942400,3519942655,LT
+3519942656,3519942911,LU
+3519942912,3519943167,NO
+3519943168,3519943423,PL
+3519943424,3519943679,PT
+3519943680,3519943935,RO
+3519943936,3519944191,RU
+3519944192,3519944447,SK
+3519944448,3519944703,SI
+3519944704,3519944959,ES
+3519944960,3519945215,SE
+3519945216,3519945471,CH
+3519945472,3519945727,TR
+3519945728,3519945983,UA
+3519945984,3519946751,IL
+3519946752,3519967231,US
3519967232,3519969279,CA
3519969280,3519971071,US
3519971072,3519971327,CA
@@ -130800,9 +131882,7 @@
3522125056,3522125311,GB
3522125312,3522130302,US
3522130303,3522130303,BZ
-3522130304,3522130307,US
-3522130308,3522130308,BZ
-3522130309,3522131858,US
+3522130304,3522131858,US
3522131859,3522131859,DE
3522131860,3522132227,US
3522132228,3522132228,BZ
@@ -131065,9 +132145,7 @@
3524827552,3524827615,JP
3524827616,3524828127,SG
3524828128,3524828159,JP
-3524828160,3524828415,SG
-3524828416,3524828671,JP
-3524828672,3524828927,SG
+3524828160,3524828927,SG
3524828928,3524829183,JP
3524829184,3524829439,SG
3524829440,3524829695,JP
@@ -131223,7 +132301,13 @@
3534863445,3534867711,HK
3534867968,3534880767,HK
3534880768,3535273983,KR
-3535273984,3535339519,HK
+3535273984,3535279103,HK
+3535279104,3535279359,US
+3535279360,3535280895,HK
+3535280896,3535281151,SG
+3535281152,3535292671,HK
+3535292672,3535292927,SG
+3535292928,3535339519,HK
3535339520,3535355903,NZ
3535355904,3535372287,AU
3535372288,3535380479,JP
@@ -131529,8 +132613,8 @@
3558178816,3558187007,BG
3558187008,3558195199,DE
3558195200,3558196327,GB
-3558196328,3558196335,IT
-3558196336,3558197247,GB
+3558196328,3558196343,IT
+3558196344,3558197247,GB
3558197248,3558199295,US
3558199296,3558203391,GB
3558203392,3558211583,ES
@@ -131542,9 +132626,7 @@
3558231552,3558231807,SK
3558231808,3558232063,FR
3558232064,3558232575,LB
-3558232576,3558235647,RU
-3558235648,3558235903,LB
-3558235904,3558236159,RU
+3558232576,3558236159,RU
3558236160,3558244351,GB
3558244352,3558252543,IT
3558252544,3558260735,KE
@@ -131686,9 +132768,7 @@
3559091200,3559093247,BE
3559093248,3559093311,GB
3559093312,3559093319,BE
-3559093320,3559093695,GB
-3559093696,3559093703,BE
-3559093704,3559094303,GB
+3559093320,3559094303,GB
3559094304,3559094319,BE
3559094320,3559095455,GB
3559095456,3559095456,BE
@@ -131940,9 +133020,7 @@
3560898560,3560906751,FI
3560906752,3560923135,DE
3560923136,3560931327,ES
-3560931328,3560939523,DE
-3560939524,3560939527,AT
-3560939528,3560939535,DE
+3560931328,3560939535,DE
3560939536,3560939539,PT
3560939540,3560939543,IT
3560939544,3560939555,DE
@@ -131951,15 +133029,11 @@
3560939568,3560939571,NL
3560939572,3560939579,ES
3560939580,3560939583,BE
-3560939584,3560939587,DE
-3560939588,3560939591,BE
-3560939592,3560939607,DE
+3560939584,3560939607,DE
3560939608,3560939611,IT
3560939612,3560939643,DE
3560939644,3560939647,BE
-3560939648,3560939655,DE
-3560939656,3560939659,CH
-3560939660,3560939679,DE
+3560939648,3560939679,DE
3560939680,3560939683,IT
3560939684,3560939687,AT
3560939688,3560939691,ES
@@ -131967,7 +133041,10 @@
3560939696,3560939719,DE
3560939720,3560939727,GR
3560939728,3560939735,NL
-3560939736,3560939751,FR
+3560939736,3560939739,FR
+3560939740,3560939743,DE
+3560939744,3560939747,FR
+3560939748,3560939751,DE
3560939752,3560939755,IT
3560939756,3560939759,DE
3560939760,3560939763,IT
@@ -131975,21 +133052,17 @@
3560939768,3560939771,IE
3560939772,3560939775,CZ
3560939776,3560939779,BE
-3560939780,3560939791,DE
-3560939792,3560939795,FR
+3560939780,3560939795,DE
3560939796,3560939799,GB
-3560939800,3560939803,DE
-3560939804,3560939807,IT
+3560939800,3560939807,DE
3560939808,3560939811,FR
-3560939812,3560939815,DE
-3560939816,3560939819,CH
-3560939820,3560939827,DE
+3560939812,3560939827,DE
3560939828,3560939831,FR
3560939832,3560939839,DE
3560939840,3560939843,GB
-3560939844,3560939847,ES
+3560939844,3560939847,DE
3560939848,3560939851,BE
-3560939852,3560939855,ES
+3560939852,3560939855,DE
3560939856,3560939859,FR
3560939860,3560939863,HU
3560939864,3560939867,ES
@@ -131999,13 +133072,11 @@
3560939896,3560939899,ES
3560939900,3560939903,GB
3560939904,3560939907,BR
-3560939908,3560939911,NL
-3560939912,3560939915,DE
+3560939908,3560939915,DE
3560939916,3560939919,ES
3560939920,3560939927,DE
3560939928,3560939931,NL
-3560939932,3560939935,IT
-3560939936,3560939943,DE
+3560939932,3560939943,DE
3560939944,3560939951,FR
3560939952,3560939955,DE
3560939956,3560939959,AT
@@ -132038,8 +133109,8 @@
3560940104,3560940115,DE
3560940116,3560940119,FR
3560940120,3560940123,GB
-3560940124,3560940127,DE
-3560940128,3560940135,IT
+3560940124,3560940131,DE
+3560940132,3560940135,IT
3560940136,3560940139,AT
3560940140,3560940147,DE
3560940148,3560940151,IT
@@ -132066,8 +133137,8 @@
3560940244,3560940247,GB
3560940248,3560940251,DE
3560940252,3560940255,CH
-3560940256,3560940267,DE
-3560940268,3560940275,GB
+3560940256,3560940271,DE
+3560940272,3560940275,GB
3560940276,3560940279,FR
3560940280,3560940283,AT
3560940284,3560940287,DE
@@ -132098,8 +133169,7 @@
3560940444,3560940447,SL
3560940448,3560940451,DE
3560940452,3560940455,NL
-3560940456,3560940459,DE
-3560940460,3560940463,HU
+3560940456,3560940463,DE
3560940464,3560940467,CY
3560940468,3560940471,DE
3560940472,3560940475,FR
@@ -132116,20 +133186,19 @@
3560940528,3560940531,DE
3560940532,3560940535,FR
3560940536,3560940539,HU
-3560940540,3560940543,IT
-3560940544,3560940547,DE
+3560940540,3560940547,DE
3560940548,3560940551,IE
3560940552,3560940563,DE
3560940564,3560940567,GB
3560940568,3560940571,DE
3560940572,3560940575,DK
-3560940576,3560940579,ES
+3560940576,3560940579,DE
3560940580,3560940583,IT
3560940584,3560940587,FR
3560940588,3560940591,IT
3560940592,3560940595,GR
3560940596,3560940599,CH
-3560940600,3560940603,MA
+3560940600,3560940603,DE
3560940604,3560940607,GB
3560940608,3560940611,FR
3560940612,3560940619,DE
@@ -132141,8 +133210,7 @@
3560940640,3560940647,GB
3560940648,3560940655,DE
3560940656,3560940663,IT
-3560940664,3560940683,DE
-3560940684,3560940687,DK
+3560940664,3560940687,DE
3560940688,3560940691,IT
3560940692,3560940695,NO
3560940696,3560940699,FR
@@ -132176,15 +133244,13 @@
3560940832,3560940839,DE
3560940840,3560940843,IT
3560940844,3560940851,ES
-3560940852,3560940859,DE
-3560940860,3560940863,PT
+3560940852,3560940863,DE
3560940864,3560940867,IT
3560940868,3560940879,DE
3560940880,3560940883,IT
3560940884,3560940887,NL
3560940888,3560940891,LU
-3560940892,3560940895,ES
-3560940896,3560940899,DE
+3560940892,3560940899,DE
3560940900,3560940903,NL
3560940904,3560940907,DE
3560940908,3560940915,GB
@@ -132200,14 +133266,12 @@
3560940972,3560940979,DE
3560940980,3560940983,LU
3560940984,3560940987,IT
-3560940988,3560940995,DE
-3560940996,3560940999,DK
+3560940988,3560940999,DE
3560941000,3560941003,ES
3560941004,3560941019,DE
3560941020,3560941023,IT
3560941024,3560941027,FR
-3560941028,3560941031,CH
-3560941032,3560941047,DE
+3560941028,3560941047,DE
3560941048,3560941051,GR
3560941052,3560941059,FR
3560941060,3560941067,DE
@@ -132228,11 +133292,9 @@
3560941132,3560941135,GB
3560941136,3560941147,DE
3560941148,3560941151,IT
-3560941152,3560941155,DK
+3560941152,3560941155,DE
3560941156,3560941159,ES
-3560941160,3560941167,DE
-3560941168,3560941171,NL
-3560941172,3560941175,DE
+3560941160,3560941175,DE
3560941176,3560941179,ES
3560941180,3560941183,GB
3560941184,3560941187,IT
@@ -132249,9 +133311,9 @@
3560941232,3560941235,FR
3560941236,3560941243,DE
3560941244,3560941251,IT
-3560941252,3560941255,FR
+3560941252,3560941255,DE
3560941256,3560941259,AT
-3560941260,3560941263,GB
+3560941260,3560941263,DE
3560941264,3560941271,ES
3560941272,3560941275,DE
3560941276,3560941279,GR
@@ -132263,8 +133325,8 @@
3560941304,3560941307,FR
3560941308,3560941315,DE
3560941316,3560941319,SE
-3560941320,3560941323,ES
-3560941324,3560941331,IT
+3560941320,3560941327,DE
+3560941328,3560941331,IT
3560941332,3560941335,PT
3560941336,3560941339,BE
3560941340,3560941343,GB
@@ -132272,15 +133334,11 @@
3560941348,3560941351,IE
3560941352,3560941355,NL
3560941356,3560941359,ES
-3560941360,3560941367,DE
-3560941368,3560941371,DK
-3560941372,3560941379,DE
+3560941360,3560941379,DE
3560941380,3560941383,CH
3560941384,3560941387,IE
3560941388,3560941391,SE
-3560941392,3560941395,DK
-3560941396,3560941399,IS
-3560941400,3560941407,DE
+3560941392,3560941407,DE
3560941408,3560941411,CH
3560941412,3560941415,IT
3560941416,3560941419,DE
@@ -132299,15 +133357,12 @@
3560941484,3560941487,ES
3560941488,3560941491,DE
3560941492,3560941495,GB
-3560941496,3560941499,FR
-3560941500,3560941503,ES
-3560941504,3560941507,DE
+3560941496,3560941507,DE
3560941508,3560941511,IT
3560941512,3560941515,AT
3560941516,3560941519,SE
3560941520,3560941523,NO
-3560941524,3560941535,DE
-3560941536,3560941539,DK
+3560941524,3560941539,DE
3560941540,3560941543,FR
3560941544,3560941547,GB
3560941548,3560941551,DE
@@ -132321,11 +133376,9 @@
3560941600,3560941603,FR
3560941604,3560941607,CH
3560941608,3560941611,GB
-3560941612,3560941623,DE
-3560941624,3560941627,GB
-3560941628,3560941631,ES
+3560941612,3560941631,DE
3560941632,3560941635,NL
-3560941636,3560941639,BE
+3560941636,3560941639,DE
3560941640,3560941643,GB
3560941644,3560941647,BE
3560941648,3560941651,NO
@@ -132351,7 +133404,9 @@
3560941748,3560941751,ES
3560941752,3560941755,BE
3560941756,3560941771,DE
-3560941772,3560941787,GB
+3560941772,3560941779,GB
+3560941780,3560941783,DE
+3560941784,3560941787,GB
3560941788,3560941791,DE
3560941792,3560941795,ES
3560941796,3560941799,FR
@@ -132361,11 +133416,9 @@
3560941812,3560941815,NO
3560941816,3560941819,FR
3560941820,3560941823,NL
-3560941824,3560941827,DE
-3560941828,3560941831,ES
+3560941824,3560941831,DE
3560941832,3560941835,GB
-3560941836,3560941843,DE
-3560941844,3560941847,IT
+3560941836,3560941847,DE
3560941848,3560941851,BE
3560941852,3560941855,CH
3560941856,3560941859,BE
@@ -132380,14 +133433,9 @@
3560941896,3560941899,ES
3560941900,3560941903,DE
3560941904,3560941907,GB
-3560941908,3560941911,DE
-3560941912,3560941919,FR
-3560941920,3560941931,DE
-3560941932,3560941935,CH
-3560941936,3560941947,DE
-3560941948,3560941951,DK
-3560941952,3560941955,IT
-3560941956,3560941959,DE
+3560941908,3560941915,DE
+3560941916,3560941919,FR
+3560941920,3560941959,DE
3560941960,3560941963,LU
3560941964,3560941967,FR
3560941968,3560941971,DE
@@ -132412,28 +133460,24 @@
3560942056,3560942059,IS
3560942060,3560942063,DE
3560942064,3560942067,ES
-3560942068,3560942071,BE
-3560942072,3560942083,DE
+3560942068,3560942083,DE
3560942084,3560942087,FR
3560942088,3560942095,DE
3560942096,3560942099,FR
3560942100,3560942103,DE
3560942104,3560942107,NL
-3560942108,3560942115,DE
-3560942116,3560942119,HU
+3560942108,3560942119,DE
3560942120,3560942123,AT
-3560942124,3560942127,BE
-3560942128,3560942131,DE
+3560942124,3560942131,DE
3560942132,3560942135,ES
3560942136,3560942143,DE
3560942144,3560942147,GB
3560942148,3560942151,DE
3560942152,3560942155,IT
-3560942156,3560942159,ES
-3560942160,3560942163,DE
+3560942156,3560942163,DE
3560942164,3560942171,ES
3560942172,3560942175,SE
-3560942176,3560942179,BE
+3560942176,3560942179,DE
3560942180,3560942183,ES
3560942184,3560942191,DE
3560942192,3560942195,HU
@@ -132470,8 +133514,8 @@
3560942352,3560942355,ES
3560942356,3560942359,IT
3560942360,3560942363,AT
-3560942364,3560942367,DE
-3560942368,3560942375,FR
+3560942364,3560942371,DE
+3560942372,3560942375,FR
3560942376,3560942379,DE
3560942380,3560942383,GB
3560942384,3560942387,DE
@@ -132480,10 +133524,7 @@
3560942408,3560942411,GB
3560942412,3560942415,DE
3560942416,3560942419,IT
-3560942420,3560942423,FR
-3560942424,3560942427,NO
-3560942428,3560942447,DE
-3560942448,3560942455,CH
+3560942420,3560942455,DE
3560942456,3560942459,ES
3560942460,3560942463,RU
3560942464,3560942467,BE
@@ -132493,28 +133534,20 @@
3560942480,3560942483,ES
3560942484,3560942487,HU
3560942488,3560942495,FR
-3560942496,3560942499,ES
-3560942500,3560942503,DE
+3560942496,3560942503,DE
3560942504,3560942511,ES
-3560942512,3560942515,IT
-3560942516,3560942523,DE
+3560942512,3560942523,DE
3560942524,3560942527,NL
-3560942528,3560942535,DE
-3560942536,3560942539,FR
-3560942540,3560942547,DE
-3560942548,3560942551,DK
-3560942552,3560942555,DE
+3560942528,3560942555,DE
3560942556,3560942559,FR
3560942560,3560942563,IT
3560942564,3560942567,ES
-3560942568,3560942571,DE
-3560942572,3560942579,FR
+3560942568,3560942575,DE
+3560942576,3560942579,FR
3560942580,3560942583,DE
3560942584,3560942587,GB
3560942588,3560942590,ES
-3560942591,3560942599,DE
-3560942600,3560942603,DK
-3560942604,3560942619,DE
+3560942591,3560942619,DE
3560942620,3560942623,BE
3560942624,3560942627,IT
3560942628,3560942631,GB
@@ -132528,9 +133561,7 @@
3560942668,3560942671,DE
3560942672,3560942675,IT
3560942676,3560942679,BE
-3560942680,3560942683,DE
-3560942684,3560942687,BE
-3560942688,3560942691,NL
+3560942680,3560942691,DE
3560942692,3560942695,LU
3560942696,3560942699,DE
3560942700,3560942703,ES
@@ -132538,7 +133569,8 @@
3560942708,3560942711,IT
3560942712,3560942715,LU
3560942716,3560942719,BE
-3560942720,3560942727,IT
+3560942720,3560942723,DE
+3560942724,3560942727,IT
3560942728,3560942731,GB
3560942732,3560942735,DE
3560942736,3560942739,CH
@@ -132552,8 +133584,7 @@
3560942788,3560942791,HU
3560942792,3560942795,DE
3560942796,3560942799,FR
-3560942800,3560942803,AT
-3560942804,3560942807,DE
+3560942800,3560942807,DE
3560942808,3560942811,AT
3560942812,3560942815,FR
3560942816,3560942819,DE
@@ -132561,16 +133592,11 @@
3560942824,3560942827,GB
3560942828,3560942831,AT
3560942832,3560942835,IT
-3560942836,3560942839,CH
-3560942840,3560942843,BE
+3560942836,3560942843,DE
3560942844,3560942847,ES
3560942848,3560942851,IT
3560942852,3560942855,ES
-3560942856,3560942859,DE
-3560942860,3560942863,IT
-3560942864,3560942871,DE
-3560942872,3560942875,IT
-3560942876,3560942879,DE
+3560942856,3560942879,DE
3560942880,3560942883,GB
3560942884,3560942887,DE
3560942888,3560942891,FR
@@ -132592,8 +133618,9 @@
3560942960,3560942963,GB
3560942964,3560942983,DE
3560942984,3560942987,BE
-3560942988,3560942999,IT
-3560943000,3560943003,PL
+3560942988,3560942991,DE
+3560942992,3560942999,IT
+3560943000,3560943003,DE
3560943004,3560943007,DK
3560943008,3560943011,CH
3560943012,3560943015,IT
@@ -132604,15 +133631,13 @@
3560943032,3560943035,FR
3560943036,3560943039,PL
3560943040,3560943043,NO
-3560943044,3560943047,ES
+3560943044,3560943047,DE
3560943048,3560943051,HR
3560943052,3560943055,CY
3560943056,3560943059,BE
3560943060,3560943075,DE
3560943076,3560943079,ES
-3560943080,3560943095,DE
-3560943096,3560943099,PL
-3560943100,3560943110,DE
+3560943080,3560943110,DE
3560943111,3560943111,ES
3560943112,3560943113,DE
3560943114,3560943115,ES
@@ -132620,8 +133645,7 @@
3560943117,3560943117,IL
3560943118,3560943118,DE
3560943119,3560943119,IT
-3560943120,3560943120,DE
-3560943121,3560943121,CH
+3560943120,3560943121,DE
3560943122,3560943122,ES
3560943123,3560943125,DE
3560943126,3560943126,FR
@@ -132637,8 +133661,7 @@
3560943140,3560943140,ES
3560943141,3560943142,DE
3560943143,3560943145,HU
-3560943146,3560943146,IE
-3560943147,3560943149,DE
+3560943146,3560943149,DE
3560943150,3560943150,ES
3560943151,3560943151,IT
3560943152,3560943152,HU
@@ -132646,13 +133669,11 @@
3560943155,3560943155,FR
3560943156,3560943157,DE
3560943158,3560943158,FR
-3560943159,3560943159,IT
-3560943160,3560943160,DE
-3560943161,3560943161,BE
+3560943159,3560943161,DE
3560943162,3560943162,GR
3560943163,3560943163,DE
3560943164,3560943164,PL
-3560943165,3560943165,FR
+3560943165,3560943165,DE
3560943166,3560943166,GB
3560943167,3560943167,FR
3560943168,3560943168,ES
@@ -132661,8 +133682,8 @@
3560943171,3560943171,IT
3560943172,3560943172,ES
3560943173,3560943173,BE
-3560943174,3560943175,DE
-3560943176,3560943177,CH
+3560943174,3560943176,DE
+3560943177,3560943177,CH
3560943178,3560943178,IT
3560943179,3560943179,PL
3560943180,3560943180,GB
@@ -132672,8 +133693,7 @@
3560943185,3560943185,DE
3560943186,3560943186,ES
3560943187,3560943187,PT
-3560943188,3560943188,IT
-3560943189,3560943192,DE
+3560943188,3560943192,DE
3560943193,3560943193,ES
3560943194,3560943195,DE
3560943196,3560943197,IT
@@ -132698,17 +133718,17 @@
3560943225,3560943226,GR
3560943227,3560943227,DE
3560943228,3560943230,NL
-3560943231,3560943232,FR
+3560943231,3560943231,FR
+3560943232,3560943232,DE
3560943233,3560943233,PL
3560943234,3560943234,EE
3560943235,3560943235,CH
-3560943236,3560943237,NL
-3560943238,3560943238,DE
+3560943236,3560943236,NL
+3560943237,3560943238,DE
3560943239,3560943239,FR
3560943240,3560943240,GB
3560943241,3560943241,FR
-3560943242,3560943242,DE
-3560943243,3560943243,FR
+3560943242,3560943243,DE
3560943244,3560943244,PL
3560943245,3560943245,CH
3560943246,3560943247,DE
@@ -132759,9 +133779,7 @@
3560943302,3560943302,ES
3560943303,3560943303,IT
3560943304,3560943304,FR
-3560943305,3560943306,DE
-3560943307,3560943307,ES
-3560943308,3560943309,DE
+3560943305,3560943309,DE
3560943310,3560943311,IT
3560943312,3560943312,PL
3560943313,3560943313,DE
@@ -132777,8 +133795,8 @@
3560943324,3560943324,DE
3560943325,3560943325,CH
3560943326,3560943326,RU
-3560943327,3560943329,DE
-3560943330,3560943331,IT
+3560943327,3560943330,DE
+3560943331,3560943331,IT
3560943332,3560943335,DE
3560943336,3560943336,ES
3560943337,3560943337,IT
@@ -132821,11 +133839,9 @@
3560943387,3560943387,GB
3560943388,3560943391,DE
3560943392,3560943392,GB
-3560943393,3560943393,DE
-3560943394,3560943394,ES
+3560943393,3560943394,DE
3560943395,3560943395,NL
-3560943396,3560943396,BE
-3560943397,3560943397,DE
+3560943396,3560943397,DE
3560943398,3560943398,BE
3560943399,3560943399,CH
3560943400,3560943400,IT
@@ -132856,8 +133872,7 @@
3560943427,3560943427,FR
3560943428,3560943428,NO
3560943429,3560943430,NL
-3560943431,3560943432,DE
-3560943433,3560943433,GB
+3560943431,3560943433,DE
3560943434,3560943434,SE
3560943435,3560943435,DE
3560943436,3560943436,FR
@@ -132905,16 +133920,13 @@
3560943488,3560943488,ES
3560943489,3560943489,DE
3560943490,3560943490,GB
-3560943491,3560943491,DE
-3560943492,3560943493,FR
+3560943491,3560943492,DE
+3560943493,3560943493,FR
3560943494,3560943494,GB
3560943495,3560943495,IT
-3560943496,3560943499,DE
-3560943500,3560943500,CH
+3560943496,3560943500,DE
3560943501,3560943501,ES
-3560943502,3560943507,DE
-3560943508,3560943508,DK
-3560943509,3560943510,DE
+3560943502,3560943510,DE
3560943511,3560943511,IT
3560943512,3560943512,DE
3560943513,3560943513,LU
@@ -132970,7 +133982,7 @@
3560943571,3560943572,DE
3560943573,3560943573,FR
3560943574,3560943574,NO
-3560943575,3560943575,BE
+3560943575,3560943575,DE
3560943576,3560943576,IT
3560943577,3560943577,DK
3560943578,3560943578,ES
@@ -132984,7 +133996,7 @@
3560943587,3560943587,DE
3560943588,3560943588,IT
3560943589,3560943589,NL
-3560943590,3560943590,HU
+3560943590,3560943590,DE
3560943591,3560943591,AT
3560943592,3560943592,SK
3560943593,3560943593,PL
@@ -133002,8 +134014,7 @@
3560943611,3560943611,FR
3560943612,3560943612,DE
3560943613,3560943613,ES
-3560943614,3560943617,DE
-3560943618,3560943618,FR
+3560943614,3560943618,DE
3560943619,3560943620,ES
3560943621,3560943621,SE
3560943622,3560943622,BE
@@ -133098,7 +134109,7 @@
3560943729,3560943729,DE
3560943730,3560943730,NL
3560943731,3560943731,IT
-3560943732,3560943732,FR
+3560943732,3560943732,DE
3560943733,3560943733,NO
3560943734,3560943736,DE
3560943737,3560943737,GR
@@ -133140,7 +134151,7 @@
3560943783,3560943783,BE
3560943784,3560943786,DE
3560943787,3560943787,ES
-3560943788,3560943788,DK
+3560943788,3560943788,DE
3560943789,3560943789,IT
3560943790,3560943790,DE
3560943791,3560943791,IT
@@ -133157,14 +134168,14 @@
3560943804,3560943804,ES
3560943805,3560943805,DE
3560943806,3560943806,ES
-3560943807,3560943807,DK
-3560943808,3560943810,DE
+3560943807,3560943810,DE
3560943811,3560943811,ES
3560943812,3560943812,IT
3560943813,3560943813,CH
3560943814,3560943814,DE
3560943815,3560943815,IT
-3560943816,3560943817,FR
+3560943816,3560943816,DE
+3560943817,3560943817,FR
3560943818,3560943818,PT
3560943819,3560943819,DE
3560943820,3560943820,FR
@@ -133322,9 +134333,7 @@
3560944624,3560944627,CL
3560944628,3560944631,DE
3560944632,3560944635,CA
-3560944636,3560944731,DE
-3560944732,3560944735,TR
-3560944736,3560944779,DE
+3560944636,3560944779,DE
3560944780,3560944783,ES
3560944784,3560944787,FR
3560944788,3560944791,NL
@@ -133342,7 +134351,7 @@
3560944840,3560944847,DE
3560944848,3560944855,FR
3560944856,3560944859,NL
-3560944860,3560944863,DK
+3560944860,3560944863,DE
3560944864,3560944871,FR
3560944872,3560944875,DE
3560944876,3560944879,ES
@@ -134008,7 +135017,9 @@
3562078208,3562086399,SK
3562094592,3562102449,GB
3562102450,3562102450,DE
-3562102451,3562110975,GB
+3562102451,3562110607,GB
+3562110608,3562110623,FR
+3562110624,3562110975,GB
3562110976,3562143743,ES
3562143744,3562151935,GB
3562151936,3562160127,DE
@@ -134052,7 +135063,7 @@
3562414080,3562422271,DE
3562422272,3562430463,IR
3562430464,3562431231,UA
-3562431232,3562431487,RU
+3562431232,3562431487,BZ
3562431488,3562438655,UA
3562438656,3562463231,DE
3562463232,3562471423,UA
@@ -134097,9 +135108,8 @@
3562799104,3562807295,HU
3562807296,3562815487,ES
3562815488,3562823679,NL
-3562823680,3562827775,RU
-3562827776,3562830847,NL
-3562830848,3562831359,RU
+3562823680,3562825727,RU
+3562825728,3562831359,NL
3562831360,3562831615,FR
3562831616,3562848255,RU
3562848256,3562856447,HR
@@ -134121,15 +135131,9 @@
3562995712,3563003903,AT
3563003904,3563005183,DE
3563005184,3563005311,KZ
-3563005312,3563005439,DE
-3563005440,3563005695,TR
-3563005696,3563005951,DE
-3563005952,3563006463,TR
-3563006464,3563006591,DE
+3563005312,3563006591,DE
3563006592,3563006719,CA
-3563006720,3563007487,DE
-3563007488,3563007999,TR
-3563008000,3563008255,DE
+3563006720,3563008255,DE
3563008256,3563008511,PL
3563008512,3563010815,DE
3563010816,3563011071,PL
@@ -134402,8 +135406,8 @@
3564572428,3564572431,ES
3564572432,3564572527,GB
3564572528,3564572531,DK
-3564572532,3564574847,GB
-3564574848,3564574975,NL
+3564572532,3564574719,GB
+3564574720,3564574975,NL
3564574976,3564575487,GB
3564575488,3564575615,DE
3564575616,3564576767,GB
@@ -134748,7 +135752,9 @@
3567427584,3567435775,SE
3567435776,3567453079,GB
3567453080,3567453087,ES
-3567453088,3567453695,GB
+3567453088,3567453407,GB
+3567453408,3567453439,ES
+3567453440,3567453695,GB
3567453696,3567453951,ES
3567453952,3567456407,GB
3567456408,3567456415,ES
@@ -135204,7 +136210,31 @@
3572170752,3572203519,IL
3572203520,3572236287,SI
3572236288,3572301823,AT
-3572301824,3572367359,DK
+3572301824,3572318207,IT
+3572318208,3572326399,GB
+3572326400,3572330495,DK
+3572330496,3572334591,IQ
+3572334592,3572338687,DK
+3572338688,3572340735,SE
+3572340736,3572342783,LU
+3572342784,3572346879,DE
+3572346880,3572348927,DK
+3572348928,3572350975,RS
+3572350976,3572355071,SE
+3572355072,3572356095,DK
+3572356096,3572357119,GB
+3572357120,3572358143,NL
+3572358144,3572360191,GB
+3572360192,3572361215,ES
+3572361216,3572362239,LT
+3572362240,3572363263,DK
+3572363264,3572364287,RS
+3572364288,3572365311,DE
+3572365312,3572366335,DK
+3572366336,3572366591,IT
+3572366592,3572366847,NL
+3572366848,3572367103,DE
+3572367104,3572367359,ES
3572367360,3572432895,NL
3572432896,3572465663,IT
3572465664,3572498431,BE
@@ -135294,9 +136324,7 @@
3574464512,3574530047,TR
3574530048,3574530207,SE
3574530208,3574530239,DE
-3574530240,3574531631,SE
-3574531632,3574531639,GB
-3574531640,3574594559,SE
+3574530240,3574594559,SE
3574594560,3574595583,GB
3574595584,3574596607,GP
3574596608,3574596863,MF
@@ -135358,7 +136386,9 @@
3575653760,3575653887,ES
3575653888,3575655039,FR
3575655040,3575655103,ES
-3575655104,3575656287,FR
+3575655104,3575655615,FR
+3575655616,3575655623,IE
+3575655624,3575656287,FR
3575656288,3575656319,PT
3575656320,3575657087,FR
3575657088,3575657215,ES
@@ -135376,7 +136406,9 @@
3575660160,3575660223,ES
3575660224,3575660351,FR
3575660352,3575660415,PT
-3575660416,3575669375,FR
+3575660416,3575667791,FR
+3575667792,3575667807,FI
+3575667808,3575669375,FR
3575669376,3575669503,IE
3575669504,3575670911,FR
3575670912,3575671039,ES
@@ -135389,10 +136421,12 @@
3575672880,3575672895,GB
3575672896,3575673087,FR
3575673088,3575673343,GB
-3575673344,3575693311,FR
+3575673344,3575676255,FR
+3575676256,3575676271,GB
+3575676272,3575693311,FR
3575693312,3575697407,DE
3575697408,3575701503,IT
-3575701504,3575703551,DK
+3575701504,3575703551,GB
3575703552,3575705599,SE
3575705600,3575707647,DK
3575707648,3575708671,LU
@@ -135562,7 +136596,9 @@
3576110016,3576110939,GB
3576110940,3576110943,NL
3576110944,3576111103,GB
-3576111104,3576116127,FR
+3576111104,3576114463,FR
+3576114464,3576114471,US
+3576114472,3576116127,FR
3576116128,3576116135,DE
3576116136,3576119295,FR
3576119296,3576120315,GB
@@ -135605,9 +136641,7 @@
3576258928,3576258935,FR
3576258936,3576260607,GB
3576260608,3576260623,FR
-3576260624,3576260863,GB
-3576260864,3576260871,FR
-3576260872,3576261631,GB
+3576260624,3576261631,GB
3576261632,3576262655,FR
3576262656,3576263919,GB
3576263920,3576263935,FR
@@ -136048,7 +137082,7 @@
3582238720,3582251319,NL
3582251320,3582251327,FI
3582251328,3582255103,NL
-3582255104,3582263039,KW
+3582255104,3582263295,KW
3582263296,3582271487,ME
3582271488,3582279679,NL
3582279680,3582283775,GB
@@ -136161,7 +137195,9 @@
3583107072,3583115263,AT
3583115264,3583123455,CH
3583123456,3583131647,PL
-3583131648,3583148031,DE
+3583131648,3583131709,DE
+3583131710,3583131710,DK
+3583131711,3583148031,DE
3583148032,3583160319,GB
3583160320,3583161343,DE
3583161344,3583164415,GB
@@ -136273,7 +137309,7 @@
3583959040,3583967231,NO
3583967232,3583969279,TR
3583969280,3583969791,FR
-3583969792,3583970815,NL
+3583969792,3583970815,GB
3583970816,3583971327,US
3583971328,3583973887,NL
3583973888,3583974399,IT
@@ -136679,7 +137715,9 @@
3586628288,3586628319,GB
3586628320,3586628351,AT
3586628352,3586629631,GB
-3586629632,3586633727,IE
+3586629632,3586631935,IE
+3586631936,3586632191,CN
+3586632192,3586633727,IE
3586633728,3586634079,NL
3586634080,3586634087,IE
3586634088,3586634175,NL
@@ -136789,7 +137827,9 @@
3587235840,3587237887,NL
3587237888,3587239487,GB
3587239488,3587239495,NL
-3587239496,3587239583,GB
+3587239496,3587239551,GB
+3587239552,3587239552,NL
+3587239553,3587239583,GB
3587239584,3587239599,NL
3587239600,3587239711,GB
3587239712,3587239727,NL
@@ -136894,7 +137934,9 @@
3588456448,3588464639,NL
3588464640,3588465151,AT
3588465152,3588465663,FR
-3588465664,3588472831,AT
+3588465664,3588466431,AT
+3588466432,3588466687,AU
+3588466688,3588472831,AT
3588472832,3588489215,UA
3588489216,3588505599,FR
3588505600,3588521983,RU
@@ -137210,7 +138252,7 @@
3624443920,3624452095,CA
3624452096,3624480767,US
3624480768,3624484863,CA
-3624484864,3624529919,US
+3624484864,3624525823,US
3624529920,3624534015,CA
3624534016,3624587263,US
3624587264,3624591359,JM
@@ -137745,7 +138787,9 @@
3634759936,3634880511,US
3634880512,3634888703,CA
3634888704,3634913279,US
-3634913280,3634915663,CA
+3634913280,3634914815,CA
+3634914816,3634915071,US
+3634915072,3634915663,CA
3634915664,3634915679,US
3634915680,3634921471,CA
3634921472,3634925567,US
@@ -137853,9 +138897,9 @@
3635970048,3636014553,US
3636014555,3636019199,US
3636019200,3636027391,CA
-3636027392,3636031517,SG
-3636031518,3636031518,US
-3636031519,3636035583,SG
+3636027392,3636031487,SG
+3636031488,3636031743,US
+3636031744,3636035583,SG
3636035584,3636064255,US
3636064256,3636068351,CA
3636068352,3636150783,US
@@ -137949,7 +138993,7 @@
3638250560,3638250623,GB
3638250624,3638304767,US
3638304768,3638312959,CA
-3638312960,3638370303,US
+3638312960,3638366207,US
3638370304,3638386687,CA
3638386688,3638399743,US
3638399744,3638399999,CH
@@ -138077,9 +139121,7 @@
3639737375,3639737599,GB
3639737600,3639737629,US
3639737630,3639737630,GB
-3639737631,3639868159,US
-3639868160,3639868415,MX
-3639868416,3639902207,US
+3639737631,3639902207,US
3639902208,3639918591,PE
3639918592,3639934975,AR
3639934976,3640023079,US
@@ -138338,9 +139380,9 @@
3642032128,3642036223,PS
3642036224,3642040319,HU
3642040320,3642048511,BY
-3642048512,3642053439,GB
-3642053440,3642053631,TZ
-3642053632,3642056703,GB
+3642048512,3642048767,IL
+3642048768,3642049023,DE
+3642049024,3642056703,GB
3642056704,3642060799,RU
3642060800,3642064895,KE
3642064896,3642068991,IT
@@ -138485,9 +139527,11 @@
3642535936,3642540031,IS
3642540032,3642544127,SE
3642544128,3642552319,RU
-3642552320,3642553936,UA
+3642552320,3642553935,UA
+3642553936,3642553936,RU
3642553937,3642553937,US
-3642553938,3642554111,UA
+3642553938,3642553951,RU
+3642553952,3642554111,UA
3642554112,3642554367,RU
3642554368,3642554623,LT
3642554624,3642554720,UA
@@ -138618,7 +139662,8 @@
3645009920,3645014015,FR
3645014016,3645018111,DE
3645018112,3645022207,RU
-3645022208,3645030399,CZ
+3645022208,3645030143,CZ
+3645030144,3645030399,SK
3645030400,3645038591,IR
3645038592,3645046783,PS
3645046784,3645050879,RU
@@ -138932,9 +139977,7 @@
3645763739,3645763740,ES
3645763741,3645763742,DE
3645763743,3645763743,IT
-3645763744,3645763744,DE
-3645763745,3645763745,FR
-3645763746,3645763746,DE
+3645763744,3645763746,DE
3645763747,3645763752,NL
3645763753,3645763753,ES
3645763754,3645763755,NL
@@ -138957,8 +140000,7 @@
3645763774,3645763774,NL
3645763775,3645763775,DE
3645763776,3645763776,NL
-3645763777,3645763777,BE
-3645763778,3645763781,DE
+3645763777,3645763781,DE
3645763782,3645763782,NL
3645763783,3645763783,DE
3645763784,3645763784,NL
@@ -139030,7 +140072,7 @@
3645763895,3645763895,ES
3645763896,3645763896,DE
3645763897,3645763897,BE
-3645763898,3645763898,NL
+3645763898,3645763898,DE
3645763899,3645763899,ES
3645763900,3645763900,NL
3645763901,3645763902,LU
@@ -139069,8 +140111,7 @@
3645763937,3645763937,FR
3645763938,3645763938,DE
3645763939,3645763939,NL
-3645763940,3645763941,DE
-3645763942,3645763942,CH
+3645763940,3645763942,DE
3645763943,3645763943,ES
3645763944,3645763944,CH
3645763945,3645763945,DE
@@ -139084,8 +140125,7 @@
3645763955,3645763955,FR
3645763956,3645763956,DE
3645763957,3645763957,GB
-3645763958,3645763958,AT
-3645763959,3645763959,DE
+3645763958,3645763959,DE
3645763960,3645763960,IT
3645763961,3645763961,DE
3645763962,3645763962,ES
@@ -139098,7 +140138,7 @@
3645763970,3645763970,DE
3645763971,3645763971,ES
3645763972,3645763972,IT
-3645763973,3645763973,BE
+3645763973,3645763973,DE
3645763974,3645763974,GB
3645763975,3645763975,AT
3645763976,3645763976,IT
@@ -139191,7 +140231,7 @@
3645764104,3645764105,IT
3645764106,3645764106,NL
3645764107,3645764107,GR
-3645764108,3645764108,PL
+3645764108,3645764108,DE
3645764109,3645764109,CH
3645764110,3645764110,DK
3645764111,3645764111,DE
@@ -139216,8 +140256,7 @@
3645764131,3645764131,DE
3645764132,3645764132,ES
3645764133,3645764133,CY
-3645764134,3645764134,DE
-3645764135,3645764135,IT
+3645764134,3645764135,DE
3645764136,3645764136,BE
3645764137,3645764137,DE
3645764138,3645764138,CH
@@ -139274,18 +140313,17 @@
3645764202,3645764202,IT
3645764203,3645764203,DE
3645764204,3645764204,ES
-3645764205,3645764206,DE
-3645764207,3645764207,IT
+3645764205,3645764207,DE
3645764208,3645764208,NO
3645764209,3645764210,DE
3645764211,3645764211,FR
3645764212,3645764212,NL
-3645764213,3645764213,GB
+3645764213,3645764213,DE
3645764214,3645764214,NL
3645764215,3645764216,DE
3645764217,3645764217,IT
3645764218,3645764218,CH
-3645764219,3645764219,FR
+3645764219,3645764219,DE
3645764220,3645764220,NL
3645764221,3645764221,IT
3645764222,3645764222,BE
@@ -139298,8 +140336,7 @@
3645764229,3645764229,PL
3645764230,3645764230,NL
3645764231,3645764231,CH
-3645764232,3645764234,DE
-3645764235,3645764235,FR
+3645764232,3645764235,DE
3645764236,3645764236,IT
3645764237,3645764238,DE
3645764239,3645764240,ES
@@ -139309,8 +140346,7 @@
3645764244,3645764244,FR
3645764245,3645764246,NL
3645764247,3645764247,IT
-3645764248,3645764250,DE
-3645764251,3645764251,FR
+3645764248,3645764251,DE
3645764252,3645764253,ES
3645764254,3645764254,DE
3645764255,3645764255,CH
@@ -139327,15 +140363,14 @@
3645764271,3645764271,IT
3645764272,3645764272,DE
3645764273,3645764273,IT
-3645764274,3645764274,DE
-3645764275,3645764275,FR
-3645764276,3645764277,DE
+3645764274,3645764277,DE
3645764278,3645764278,NL
3645764279,3645764279,ES
3645764280,3645764280,IT
3645764281,3645764281,DE
3645764282,3645764282,NL
-3645764283,3645764284,FR
+3645764283,3645764283,DE
+3645764284,3645764284,FR
3645764285,3645764285,IT
3645764286,3645764286,NL
3645764287,3645764287,BE
@@ -139344,7 +140379,8 @@
3645764290,3645764290,DE
3645764291,3645764291,NL
3645764292,3645764292,FR
-3645764293,3645764294,IT
+3645764293,3645764293,IT
+3645764294,3645764294,DE
3645764295,3645764295,ES
3645764296,3645764297,DE
3645764298,3645764298,GR
@@ -139377,7 +140413,7 @@
3645764330,3645764330,DE
3645764331,3645764331,RU
3645764332,3645764332,NL
-3645764333,3645764333,GR
+3645764333,3645764333,DE
3645764334,3645764334,ES
3645764335,3645764335,DE
3645764336,3645764336,MY
@@ -139396,10 +140432,9 @@
3645764351,3645764356,DE
3645764357,3645764357,RU
3645764358,3645764358,FR
-3645764359,3645764359,IT
-3645764360,3645764360,DE
+3645764359,3645764360,DE
3645764361,3645764361,CH
-3645764362,3645764362,GB
+3645764362,3645764362,DE
3645764363,3645764363,NL
3645764364,3645764364,DE
3645764365,3645764365,BE
@@ -139408,8 +140443,8 @@
3645764369,3645764369,DE
3645764370,3645764370,GB
3645764371,3645764371,ES
-3645764372,3645764373,FR
-3645764374,3645764375,DE
+3645764372,3645764372,FR
+3645764373,3645764375,DE
3645764376,3645764377,NL
3645764378,3645764378,DE
3645764379,3645764380,GB
@@ -139435,7 +140470,7 @@
3645764409,3645764409,FR
3645764410,3645764410,DE
3645764411,3645764411,FR
-3645764412,3645764412,NL
+3645764412,3645764412,DE
3645764413,3645764413,FR
3645764414,3645764414,NL
3645764415,3645764415,DE
@@ -139537,25 +140572,21 @@
3645764567,3645764568,NL
3645764569,3645764569,DE
3645764570,3645764570,MA
-3645764571,3645765127,DE
-3645765128,3645765131,GR
-3645765132,3645765135,DE
+3645764571,3645765135,DE
3645765136,3645765139,BE
3645765140,3645765143,IT
3645765144,3645765147,DE
3645765148,3645765151,IT
3645765152,3645765155,BE
-3645765156,3645765171,IT
+3645765156,3645765167,IT
+3645765168,3645765171,DE
3645765172,3645765175,NO
3645765176,3645765179,DE
3645765180,3645765183,FR
3645765184,3645765187,GR
3645765188,3645765195,DE
3645765196,3645765199,CH
-3645765200,3645765203,GB
-3645765204,3645765207,DE
-3645765208,3645765211,FR
-3645765212,3645765215,DE
+3645765200,3645765215,DE
3645765216,3645765219,ES
3645765220,3645765223,PL
3645765224,3645765227,BE
@@ -139568,27 +140599,25 @@
3645765252,3645765255,DE
3645765256,3645765259,GR
3645765260,3645765263,PL
-3645765264,3645765267,IT
+3645765264,3645765267,DE
3645765268,3645765271,PL
3645765272,3645765275,IT
-3645765276,3645765279,FR
-3645765280,3645765283,DE
+3645765276,3645765283,DE
3645765284,3645765287,ES
3645765288,3645765295,DE
3645765296,3645765299,ES
-3645765300,3645765303,FR
-3645765304,3645765311,IT
+3645765300,3645765307,DE
+3645765308,3645765311,IT
3645765312,3645765315,TR
3645765316,3645765319,IT
-3645765320,3645765323,FR
+3645765320,3645765323,DE
3645765324,3645765331,ES
-3645765332,3645765335,FR
+3645765332,3645765335,DE
3645765336,3645765339,IT
3645765340,3645765343,FR
-3645765344,3645765347,PL
+3645765344,3645765347,DE
3645765348,3645765351,GR
-3645765352,3645765355,IT
-3645765356,3645765359,ES
+3645765352,3645765359,DE
3645765360,3645765363,FR
3645765364,3645765367,ES
3645765368,3645765371,IT
@@ -139598,15 +140627,13 @@
3645765384,3645765387,NL
3645765388,3645765391,DE
3645765392,3645765399,ES
-3645765400,3645765403,DE
-3645765404,3645765407,GR
+3645765400,3645765407,DE
3645765408,3645765411,DK
3645765412,3645765415,IT
3645765416,3645765419,FR
3645765420,3645765423,DE
3645765424,3645765427,IT
-3645765428,3645765443,DE
-3645765444,3645765447,FR
+3645765428,3645765447,DE
3645765448,3645765451,ES
3645765452,3645765455,FR
3645765456,3645765459,AT
@@ -139621,14 +140648,13 @@
3645765500,3645765503,NL
3645765504,3645765507,CH
3645765508,3645765511,IT
-3645765512,3645765519,GB
-3645765520,3645765523,FR
+3645765512,3645765515,GB
+3645765516,3645765523,DE
3645765524,3645765527,IT
3645765528,3645765535,FR
3645765536,3645765539,SE
3645765540,3645765543,IL
-3645765544,3645765547,BE
-3645765548,3645765559,DE
+3645765544,3645765559,DE
3645765560,3645765563,IE
3645765564,3645765567,ES
3645765568,3645765571,FR
@@ -139636,12 +140662,9 @@
3645765576,3645765579,IT
3645765580,3645765591,DE
3645765592,3645765595,IE
-3645765596,3645765611,DE
-3645765612,3645765615,IT
-3645765616,3645765619,GB
+3645765596,3645765619,DE
3645765620,3645765623,CH
-3645765624,3645765627,FR
-3645765628,3645765639,DE
+3645765624,3645765639,DE
3645765640,3645765643,DK
3645765644,3645765647,GB
3645765648,3645765651,NL
@@ -139649,13 +140672,11 @@
3645765672,3645765675,FR
3645765676,3645765679,DE
3645765680,3645765683,FR
-3645765684,3645765687,NL
+3645765684,3645765687,DE
3645765688,3645765691,FR
3645765692,3645765695,CH
3645765696,3645765703,IT
-3645765704,3645765707,DE
-3645765708,3645765711,FR
-3645765712,3645765715,DE
+3645765704,3645765715,DE
3645765716,3645765719,FR
3645765720,3645766401,DE
3645766402,3645766407,US
@@ -139958,7 +140979,10 @@
3649241088,3649306623,TR
3649306624,3649372159,IL
3649372160,3649437695,IT
-3649437696,3649512191,GB
+3649437696,3649470463,GB
+3649470464,3649471487,SG
+3649471488,3649472511,HK
+3649472512,3649512191,GB
3649512192,3649512447,FR
3649512448,3649568767,GB
3649568768,3649634303,BE
@@ -140303,8 +141327,9 @@
3651941120,3651944447,DE
3651944448,3651948543,ES
3651948544,3651952639,FO
-3651952640,3651954687,AE
-3651954688,3651960831,IR
+3651952640,3651954175,AE
+3651954176,3651958783,IR
+3651958784,3651960831,AE
3651960832,3651964927,GB
3651964928,3651969023,SK
3651969024,3651977215,DE
@@ -140353,7 +141378,8 @@
3652173824,3652177919,AT
3652177920,3652182015,CY
3652182016,3652190207,DE
-3652190208,3652714495,GB
+3652190208,3652648959,GB
+3652648960,3652714495,IE
3652714496,3653238783,DE
3653238784,3653369855,CH
3653369856,3653373951,IT
@@ -140522,7 +141548,6 @@
3664001024,3664001279,NZ
3664001280,3664001535,LK
3664001536,3664001791,MY
-3664001792,3664002047,AU
3664002048,3664002303,VN
3664002304,3664002559,LK
3664002560,3664003327,ID
@@ -140636,9 +141661,7 @@
3699376128,3700424703,TW
3700424704,3700752383,JP
3700752384,3700817919,KR
-3700817920,3700977663,JP
-3700977664,3700979711,AU
-3700979712,3700981759,JP
+3700817920,3700981759,JP
3700981760,3701014527,CN
3701014528,3701080063,JP
3701080064,3701211135,CN
diff --git a/src/config/geoip6 b/src/config/geoip6
index fa4fffe2e6..1f1430e4c6 100644
--- a/src/config/geoip6
+++ b/src/config/geoip6
@@ -1,4 +1,4 @@
-# Last updated based on November 3 2016 Maxmind GeoLite2 Country
+# Last updated based on December 7 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
@@ -158,7 +158,9 @@
2001:470:28:1a6::,2001:470:28:1a6:ffff:ffff:ffff:ffff,RU
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:8ff:ffff:ffff:ffff:ffff,US
+2001:470:28:2e1::,2001:470:28:36d:ffff:ffff:ffff:ffff,US
+2001:470:28:36e::,2001:470:28:36e:ffff:ffff:ffff:ffff,DK
+2001:470:28:36f::,2001:470:28:8ff:ffff:ffff:ffff:ffff,US
2001:470:28:900::,2001:470:28:906:ffff:ffff:ffff:ffff,SE
2001:470:28:907::,2001:470:28:907:ffff:ffff:ffff:ffff,RU
2001:470:28:908::,2001:470:28:9ff:ffff:ffff:ffff:ffff,SE
@@ -204,7 +206,11 @@
2001:470:1f0b:785::,2001:470:1f0b:785:ffff:ffff:ffff:ffff,PL
2001:470:1f0b:786::,2001:470:1f0b:be6:ffff:ffff:ffff:ffff,US
2001:470:1f0b:be7::,2001:470:1f0b:be7:ffff:ffff:ffff:ffff,RU
-2001:470:1f0b:be8::,2001:470:1f14:ffff:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:be8::,2001:470:1f0b:118a:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:118b::,2001:470:1f0b:118b:ffff:ffff:ffff:ffff,DE
+2001:470:1f0b:118c::,2001:470:1f0b:11d1:ffff:ffff:ffff:ffff,US
+2001:470:1f0b:11d2::,2001:470:1f0b:11d2:ffff:ffff:ffff:ffff,DE
+2001:470:1f0b:11d3::,2001:470:1f14:ffff:ffff:ffff:ffff:ffff,US
2001:470:1f15::,2001:470:1f15:b3:ffff:ffff:ffff:ffff,RU
2001:470:1f15:b4::,2001:470:1f15:b4:ffff:ffff:ffff:ffff,NL
2001:470:1f15:b5::,2001:470:1f15:44f:ffff:ffff:ffff:ffff,RU
@@ -230,7 +236,9 @@
2001:470:3919::,2001:470:3919:7fff:ffff:ffff:ffff:ffff,AU
2001:470:3919:8000::,2001:470:49e5:7fff:ffff:ffff:ffff:ffff,US
2001:470:49e5:8000::,2001:470:49e5:ffff:ffff:ffff:ffff:ffff,CN
-2001:470:49e6::,2001:470:53a7:ffff:ffff:ffff:ffff:ffff,US
+2001:470:49e6::,2001:470:4a63:ffff:ffff:ffff:ffff:ffff,US
+2001:470:4a64::,2001:470:4a64:ffff:ffff:ffff:ffff:ffff,NZ
+2001:470:4a65::,2001:470:53a7:ffff:ffff:ffff:ffff:ffff,US
2001:470:53a8::,2001:470:53a8:7fff:ffff:ffff:ffff:ffff,DE
2001:470:53a8:8000::,2001:470:587d:ffff:ffff:ffff:ffff:ffff,US
2001:470:587e::,2001:470:587e:7fff:ffff:ffff:ffff:ffff,CZ
@@ -324,7 +332,9 @@
2001:470:da02::,2001:470:da02:7fff:ffff:ffff:ffff:ffff,AR
2001:470:da02:8000::,2001:470:dc5c:ffff:ffff:ffff:ffff:ffff,US
2001:470:dc5d::,2001:470:dc5d:7fff:ffff:ffff:ffff:ffff,SE
-2001:470:dc5d:8000::,2001:470:dd94:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dc5d:8000::,2001:470:dd67:ffff:ffff:ffff:ffff:ffff,US
+2001:470:dd68::,2001:470:dd68:ffff:ffff:ffff:ffff:ffff,DK
+2001:470:dd69::,2001:470:dd94:ffff:ffff:ffff:ffff:ffff,US
2001:470:dd95::,2001:470:dd95:7fff:ffff:ffff:ffff:ffff,UA
2001:470:dd95:8000::,2001:470:dec3:ffff:ffff:ffff:ffff:ffff,US
2001:470:dec4::,2001:470:dec4:ffff:ffff:ffff:ffff:ffff,SE
@@ -716,11 +726,29 @@
2001:678:290::,2001:678:290:ffff:ffff:ffff:ffff:ffff,RU
2001:678:294::,2001:678:294:ffff:ffff:ffff:ffff:ffff,CH
2001:678:298::,2001:678:298:ffff:ffff:ffff:ffff:ffff,CH
+2001:678:29c::,2001:678:29c:ffff:ffff:ffff:ffff:ffff,SI
+2001:678:2a0::,2001:678:2a0:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2a4::,2001:678:2a4:ffff:ffff:ffff:ffff:ffff,UA
+2001:678:2a8::,2001:678:2a8:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2ac::,2001:678:2ac:ffff:ffff:ffff:ffff:ffff,RO
+2001:678:2b0::,2001:678:2b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:678:2b4::,2001:678:2b4:ffff:ffff:ffff:ffff:ffff,UA
+2001:678:2b8::,2001:678:2b9:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2c0::,2001:678:2c0:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2c4::,2001:678:2c4:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2c8::,2001:678:2c8:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:2cc::,2001:678:2cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2d0::,2001:678:2d0:ffff:ffff:ffff:ffff:ffff,UA
+2001:678:2d4::,2001:678:2d4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:678:2d8::,2001:678:2d8:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:2dc::,2001:678:2dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:678:2e0::,2001:678:2e0:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:2e4::,2001:678:2e4:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:2e8::,2001:678:2e8:ffff:ffff:ffff:ffff:ffff,RU
2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE
2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:c::,2001:67c:c:ffff:ffff:ffff:ffff:ffff,PL
-2001:67c:10::,2001:67c:10:ffff:ffff:ffff:ffff:ffff,RO
2001:67c:14::,2001:67c:14:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:18::,2001:67c:18:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:1c::,2001:67c:1c:ffff:ffff:ffff:ffff:ffff,SE
@@ -1061,7 +1089,6 @@
2001:67c:560::,2001:67c:560:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:564::,2001:67c:564:ffff:ffff:ffff:ffff:ffff,DK
2001:67c:568::,2001:67c:568:ffff:ffff:ffff:ffff:ffff,DE
-2001:67c:56c::,2001:67c:56c:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:570::,2001:67c:570:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:574::,2001:67c:574:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:578::,2001:67c:578:ffff:ffff:ffff:ffff:ffff,SE
@@ -1788,6 +1815,7 @@
2001:67c:1ba8::,2001:67c:1ba8:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:1bac::,2001:67c:1bac:ffff:ffff:ffff:ffff:ffff,GB
2001:67c:1bb0::,2001:67c:1bb0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:1bb4::,2001:67c:1bb4:ffff:ffff:ffff:ffff:ffff,AT
2001:67c:1bb8::,2001:67c:1bb8:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:1bbc::,2001:67c:1bbc:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:1bc0::,2001:67c:1bc0:ffff:ffff:ffff:ffff:ffff,RU
@@ -1820,7 +1848,6 @@
2001:67c:2028::,2001:67c:2028:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:202c::,2001:67c:202c:ffff:ffff:ffff:ffff:ffff,SE
2001:67c:2030::,2001:67c:2030:ffff:ffff:ffff:ffff:ffff,UA
-2001:67c:2034::,2001:67c:2034:ffff:ffff:ffff:ffff:ffff,CH
2001:67c:2038::,2001:67c:2038:ffff:ffff:ffff:ffff:ffff,CZ
2001:67c:203c::,2001:67c:203c:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:2040::,2001:67c:2040:ffff:ffff:ffff:ffff:ffff,AE
@@ -1858,7 +1885,7 @@
2001:67c:20cc::,2001:67c:20cc:ffff:ffff:ffff:ffff:ffff,NL
2001:67c:20d0::,2001:67c:20d1:ffff:ffff:ffff:ffff:ffff,BG
2001:67c:20d8::,2001:67c:20d8:ffff:ffff:ffff:ffff:ffff,SI
-2001:67c:20dc::,2001:67c:20dc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:20dc::,2001:67c:20dc:ffff:ffff:ffff:ffff:ffff,RU
2001:67c:20e0::,2001:67c:20e0:ffff:ffff:ffff:ffff:ffff,DE
2001:67c:20e4::,2001:67c:20e4:ffff:ffff:ffff:ffff:ffff,UA
2001:67c:20e8::,2001:67c:20e8:ffff:ffff:ffff:ffff:ffff,GB
@@ -2968,6 +2995,7 @@
2001:7f8:a9::,2001:7f8:a9:ffff:ffff:ffff:ffff:ffff,MD
2001:7f8:ab::,2001:7f8:ab:ffff:ffff:ffff:ffff:ffff,IT
2001:7f8:ac::,2001:7f8:ac:ffff:ffff:ffff:ffff:ffff,RU
+2001:7f8:ad::,2001:7f8:ad:ffff:ffff:ffff:ffff:ffff,SE
2001:7f9:4::,2001:7f9:4:ffff:ffff:ffff:ffff:ffff,AL
2001:7f9:8::,2001:7f9:8:ffff:ffff:ffff:ffff:ffff,AM
2001:7fa:0:1::,2001:7fa::1:ffff:ffff:ffff:ffff,HK
@@ -3019,7 +3047,7 @@
2001:8b8::,2001:8bf:ffff:ffff:ffff:ffff:ffff:ffff,FI
2001:8c0::,2001:8c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
2001:8c8::,2001:8c8:ffff:ffff:ffff:ffff:ffff:ffff,RS
-2001:8d0::,2001:8d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:8d0::,2001:8d7:ffff:ffff:ffff:ffff:ffff:ffff,IT
2001:8d8::,2001:8d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:8e0::,2001:8e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:8f0::,2001:8f1:ffff:ffff:ffff:ffff:ffff:ffff,GR
@@ -3028,7 +3056,7 @@
2001:900::,2001:900:ffff:ffff:ffff:ffff:ffff:ffff,FR
2001:908::,2001:90f:ffff:ffff:ffff:ffff:ffff:ffff,PL
2001:910::,2001:917:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2001:918::,2001:918:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:918::,2001:91f:ffff:ffff:ffff:ffff:ffff:ffff,CH
2001:920::,2001:920:1845:ffff:ffff:ffff:ffff:ffff,GB
2001:920:1846::,2001:920:1846:7fff:ffff:ffff:ffff:ffff,DE
2001:920:1846:8000::,2001:920:186b:7fff:ffff:ffff:ffff:ffff,GB
@@ -3064,7 +3092,7 @@
2001:998::,2001:99b:ffff:ffff:ffff:ffff:ffff:ffff,FI
2001:9a0::,2001:9a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:9a8::,2001:9a8:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2001:9b0::,2001:9b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:9b0::,2001:9b7:ffff:ffff:ffff:ffff:ffff:ffff,SE
2001:9c0::,2001:9c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:9c8::,2001:9cf:ffff:ffff:ffff:ffff:ffff:ffff,SE
2001:9d0::,2001:9d0:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -3097,11 +3125,15 @@
2001:ac0::,2001:ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES
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:26:ffff:ffff:ffff:ffff:ffff,GB
+2001:ac8:20:2::,2001:ac8:24:ffff:ffff:ffff:ffff:ffff,GB
+2001:ac8:25::,2001:ac8:25:ffff:ffff:ffff:ffff:ffff,FR
+2001:ac8:26::,2001:ac8:26:ffff:ffff:ffff:ffff:ffff,GB
2001:ac8:27::,2001:ac8:27:ffff:ffff:ffff:ffff:ffff,BE
2001:ac8:28::,2001:ac8:28:ffff:ffff:ffff:ffff:ffff,CH
2001:ac8:29::,2001:ac8:29:ffff:ffff:ffff:ffff:ffff,AT
-2001:ac8:2a::,2001:ac8:32:ffff:ffff:ffff:ffff:ffff,GB
+2001:ac8:2a::,2001:ac8:2f:ffff:ffff:ffff:ffff:ffff,GB
+2001:ac8:30::,2001:ac8:30:ffff:ffff:ffff:ffff:ffff,BG
+2001:ac8:31::,2001:ac8:32:ffff:ffff:ffff:ffff:ffff,GB
2001:ac8:33::,2001:ac8:33:ffff:ffff:ffff:ffff:ffff,CZ
2001:ac8:34::,2001:ac8:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:ad0::,2001:ad0:ffff:ffff:ffff:ffff:ffff:ffff,EE
@@ -3239,7 +3271,6 @@
2001:de8:2::,2001:de8:2:ffff:ffff:ffff:ffff:ffff,ID
2001:de8:3::,2001:de8:3:ffff:ffff:ffff:ffff:ffff,VN
2001:de8:4::,2001:de8:8:ffff:ffff:ffff:ffff:ffff,JP
-2001:de8:9::,2001:de8:9:ffff:ffff:ffff:ffff:ffff,AU
2001:de8:a::,2001:de8:a:ffff:ffff:ffff:ffff:ffff,VN
2001:de8:b::,2001:de8:b:ffff:ffff:ffff:ffff:ffff,BD
2001:de8:c::,2001:de8:c:ffff:ffff:ffff:ffff:ffff,JP
@@ -3269,6 +3300,7 @@
2001:ded::,2001:ded::ffff:ffff:ffff:ffff:ffff,SG
2001:ded:8000::,2001:ded:8000:ffff:ffff:ffff:ffff:ffff,IN
2001:dee::,2001:dee::ffff:ffff:ffff:ffff:ffff,HK
+2001:dee:8000::,2001:dee:8000:ffff:ffff:ffff:ffff:ffff,NZ
2001:def::,2001:def::ffff:ffff:ffff:ffff:ffff,HK
2001:df0::,2001:df0:1:ffff:ffff:ffff:ffff:ffff,NZ
2001:df0:2::,2001:df0:2:ffff:ffff:ffff:ffff:ffff,JP
@@ -3294,7 +3326,7 @@
2001:df0:49::,2001:df0:49:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:4a::,2001:df0:4a:ffff:ffff:ffff:ffff:ffff,NZ
2001:df0:4b::,2001:df0:4d:ffff:ffff:ffff:ffff:ffff,AU
-2001:df0:4f::,2001:df0:60:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:50::,2001:df0:60:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:62::,2001:df0:62:ffff:ffff:ffff:ffff:ffff,TH
2001:df0:63::,2001:df0:63:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:65::,2001:df0:65:ffff:ffff:ffff:ffff:ffff,ID
@@ -3361,7 +3393,7 @@
2001:df0:cf::,2001:df0:cf:ffff:ffff:ffff:ffff:ffff,JP
2001:df0:d1::,2001:df0:d1:ffff:ffff:ffff:ffff:ffff,NZ
2001:df0:d2::,2001:df0:d2:ffff:ffff:ffff:ffff:ffff,HK
-2001:df0:d4::,2001:df0:d6:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d4::,2001:df0:d5:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:d7::,2001:df0:d7:ffff:ffff:ffff:ffff:ffff,KR
2001:df0:d8::,2001:df0:d8:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:d9::,2001:df0:d9:ffff:ffff:ffff:ffff:ffff,TW
@@ -3647,7 +3679,6 @@
2001:df0:2600::,2001:df0:2600:ffff:ffff:ffff:ffff:ffff,ID
2001:df0:2800::,2001:df0:2800:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:2a00::,2001:df0:2a00:ffff:ffff:ffff:ffff:ffff,VN
-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
@@ -3701,7 +3732,6 @@
2001:df0:9e00::,2001:df0:9e00:ffff:ffff:ffff:ffff:ffff,ID
2001:df0:a000::,2001:df0:a000:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:a200::,2001:df0:a200:ffff:ffff:ffff:ffff:ffff,ID
-2001:df0:a400::,2001:df0:a400:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:a600::,2001:df0:a600:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:a800::,2001:df0:a800:ffff:ffff:ffff:ffff:ffff,AU
2001:df0:aa00::,2001:df0:aa00:ffff:ffff:ffff:ffff:ffff,SG
@@ -4172,7 +4202,6 @@
2001:df4:7200::,2001:df4:7200:ffff:ffff:ffff:ffff:ffff,JP
2001:df4:7400::,2001:df4:7400:ffff:ffff:ffff:ffff:ffff,IN
2001:df4:7600::,2001:df4:7600:ffff:ffff:ffff:ffff:ffff,SG
-2001:df4:7800::,2001:df4:7800:ffff:ffff:ffff:ffff:ffff,IN
2001:df4:7a00::,2001:df4:7a00:ffff:ffff:ffff:ffff:ffff,HK
2001:df4:7c00::,2001:df4:7c00:ffff:ffff:ffff:ffff:ffff,AU
2001:df4:7e00::,2001:df4:7e00:ffff:ffff:ffff:ffff:ffff,SG
@@ -4319,7 +4348,6 @@
2001:df5:a200::,2001:df5:a200:ffff:ffff:ffff:ffff:ffff,IN
2001:df5:a400::,2001:df5:a400:ffff:ffff:ffff:ffff:ffff,IN
2001:df5:a600::,2001:df5:a600:ffff:ffff:ffff:ffff:ffff,AU
-2001:df5:a800::,2001:df5:a800:ffff:ffff:ffff:ffff:ffff,AU
2001:df5:aa00::,2001:df5:aa00:ffff:ffff:ffff:ffff:ffff,AU
2001:df5:ac00::,2001:df5:ac00:ffff:ffff:ffff:ffff:ffff,IN
2001:df5:ae00::,2001:df5:ae00:ffff:ffff:ffff:ffff:ffff,PH
@@ -4368,67 +4396,128 @@
2001:df6:800::,2001:df6:80f:ffff:ffff:ffff:ffff:ffff,HK
2001:df6:a00::,2001:df6:a00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:c00::,2001:df6:c00:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:e00::,2001:df6:e00:ffff:ffff:ffff:ffff:ffff,HK
2001:df6:1000::,2001:df6:1000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df6:1200::,2001:df6:1200:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:1400::,2001:df6:1400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:1600::,2001:df6:1600:ffff:ffff:ffff:ffff:ffff,VN
2001:df6:1800::,2001:df6:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:1a00::,2001:df6:1a00:ffff:ffff:ffff:ffff:ffff,VN
2001:df6:1c00::,2001:df6:1c00:ffff:ffff:ffff:ffff:ffff,CN
+2001:df6:1e00::,2001:df6:1e00:ffff:ffff:ffff:ffff:ffff,VN
2001:df6:2000::,2001:df6:2001:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:2200::,2001:df6:2200:ffff:ffff:ffff:ffff:ffff,VN
2001:df6:2400::,2001:df6:2400:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:2600::,2001:df6:2600:ffff:ffff:ffff:ffff:ffff,US
2001:df6:2800::,2001:df6:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:2a00::,2001:df6:2a00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:2c00::,2001:df6:2c00:ffff:ffff:ffff:ffff:ffff,VN
+2001:df6:2e00::,2001:df6:2e00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:3000::,2001:df6:3000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:3200::,2001:df6:3200:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:3400::,2001:df6:3400:ffff:ffff:ffff:ffff:ffff,VN
+2001:df6:3600::,2001:df6:3600:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:3800::,2001:df6:3800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:3a00::,2001:df6:3a00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:3c00::,2001:df6:3c00:ffff:ffff:ffff:ffff:ffff,PK
+2001:df6:3e00::,2001:df6:3e00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:4000::,2001:df6:4001:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:4200::,2001:df6:4200:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:4400::,2001:df6:4400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:4600::,2001:df6:4600:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:4800::,2001:df6:4801:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:4a00::,2001:df6:4a00:ffff:ffff:ffff:ffff:ffff,TH
2001:df6:4c00::,2001:df6:4c00:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:4e00::,2001:df6:4e00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:5000::,2001:df6:5000:ffff:ffff:ffff:ffff:ffff,AU
-2001:df6:5400::,2001:df6:5400:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:5200::,2001:df6:5200:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:5600::,2001:df6:5600:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:5800::,2001:df6:5800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:5a00::,2001:df6:5a00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:5c00::,2001:df6:5c00:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:5e00::,2001:df6:5e01:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:6000::,2001:df6:6000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:6200::,2001:df6:6200:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:6400::,2001:df6:6400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df6:6600::,2001:df6:6600:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:6800::,2001:df6:6800:ffff:ffff:ffff:ffff:ffff,CN
+2001:df6:6a00::,2001:df6:6a00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:6c00::,2001:df6:6c00:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:6e00::,2001:df6:6e00:ffff:ffff:ffff:ffff:ffff,MY
2001:df6:7000::,2001:df6:7000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df6:7200::,2001:df6:7200:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:7400::,2001:df6:7400:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:7600::,2001:df6:7600:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:7800::,2001:df6:7800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:7a00::,2001:df6:7a00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:7c00::,2001:df6:7c00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:8000::,2001:df6:8000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:8200::,2001:df6:8200:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:8400::,2001:df6:8400:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:8800::,2001:df6:8800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:8a00::,2001:df6:8a00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:8c00::,2001:df6:8c00:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:8e00::,2001:df6:8e00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:9000::,2001:df6:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:9200::,2001:df6:9200:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:9400::,2001:df6:9400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:9600::,2001:df6:9600:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:9800::,2001:df6:9800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:9a00::,2001:df6:9a00:ffff:ffff:ffff:ffff:ffff,TH
2001:df6:9c00::,2001:df6:9c00:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:9e00::,2001:df6:9e00:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:a000::,2001:df6:a000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:a200::,2001:df6:a200:ffff:ffff:ffff:ffff:ffff,BD
2001:df6:a400::,2001:df6:a400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df6:a600::,2001:df6:a600:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:a800::,2001:df6:a800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:aa00::,2001:df6:aa00:ffff:ffff:ffff:ffff:ffff,VN
2001:df6:ac00::,2001:df6:ac00:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:ae00::,2001:df6:ae00:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:b000::,2001:df6:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:b200::,2001:df6:b200:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:b400::,2001:df6:b400:ffff:ffff:ffff:ffff:ffff,MY
+2001:df6:b600::,2001:df6:b600:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:b800::,2001:df6:b800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df6:ba00::,2001:df6:ba00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:bc00::,2001:df6:bc00:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:be00::,2001:df6:be00:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:c200::,2001:df6:c200:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:c400::,2001:df6:c400:ffff:ffff:ffff:ffff:ffff,AU
-2001:df6:c800::,2001:df6:c800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:c600::,2001:df6:c600:ffff:ffff:ffff:ffff:ffff,BD
+2001:df6:c800::,2001:df6:c801:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:ca00::,2001:df6:ca00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:cc00::,2001:df6:cc00:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:ce00::,2001:df6:ce00:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:d000::,2001:df6:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:d200::,2001:df6:d200:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:d400::,2001:df6:d400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:d600::,2001:df6:d600:ffff:ffff:ffff:ffff:ffff,BD
2001:df6:d800::,2001:df6:d800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df6:da00::,2001:df6:da00:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:dc00::,2001:df6:dc00:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:de00::,2001:df6:de00:ffff:ffff:ffff:ffff:ffff,BD
+2001:df6:e200::,2001:df6:e200:ffff:ffff:ffff:ffff:ffff,NZ
2001:df6:e400::,2001:df6:e400:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:e600::,2001:df6:e600:ffff:ffff:ffff:ffff:ffff,ES
2001:df6:e800::,2001:df6:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:ea00::,2001:df6:ea00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:ec00::,2001:df6:ec00:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:ee00::,2001:df6:ee00:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:f000::,2001:df6:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:f200::,2001:df6:f200:ffff:ffff:ffff:ffff:ffff,AU
2001:df6:f400::,2001:df6:f400:ffff:ffff:ffff:ffff:ffff,CN
+2001:df6:f600::,2001:df6:f600:ffff:ffff:ffff:ffff:ffff,ID
2001:df6:f800::,2001:df6:f800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:fa00::,2001:df6:fa00:ffff:ffff:ffff:ffff:ffff,IN
2001:df6:fc00::,2001:df6:fc00:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:fe00::,2001:df6:fe00:ffff:ffff:ffff:ffff:ffff,AU
2001:df7::,2001:df7::ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:200::,2001:df7:201:ffff:ffff:ffff:ffff:ffff,IN
2001:df7:400::,2001:df7:400:ffff:ffff:ffff:ffff:ffff,HK
+2001:df7:600::,2001:df7:600:ffff:ffff:ffff:ffff:ffff,IN
2001:df7:800::,2001:df7:800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:a00::,2001:df7:a00:ffff:ffff:ffff:ffff:ffff,ID
2001:df7:c00::,2001:df7:c00:ffff:ffff:ffff:ffff:ffff,TW
2001:df7:1000::,2001:df7:1000:ffff:ffff:ffff:ffff:ffff,IN
2001:df7:1400::,2001:df7:1400:ffff:ffff:ffff:ffff:ffff,AU
@@ -4639,7 +4728,7 @@
2001:1408::,2001:1408:ffff:ffff:ffff:ffff:ffff:ffff,AT
2001:1410::,2001:1410:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:1418::,2001:1418:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2001:1420::,2001:1420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1420::,2001:1427:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:1428::,2001:1428:ffff:ffff:ffff:ffff:ffff:ffff,RU
2001:1430::,2001:1430:ffff:ffff:ffff:ffff:ffff:ffff,FI
2001:1438::,2001:1438:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -4688,7 +4777,7 @@
2001:1568::,2001:1568:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2001:1578::,2001:157f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:1580::,2001:1580:ffff:ffff:ffff:ffff:ffff:ffff,DK
-2001:1588::,2001:1588:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:1588::,2001:158f:ffff:ffff:ffff:ffff:ffff:ffff,PT
2001:1590::,2001:1590:ffff:ffff:ffff:ffff:ffff:ffff,SI
2001:1598::,2001:1598:ffff:ffff:ffff:ffff:ffff:ffff,BE
2001:15a8::,2001:15a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -5069,7 +5158,11 @@
2001:42b0::,2001:42b0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
2001:42b8::,2001:42b8:ffff:ffff:ffff:ffff:ffff:ffff,EG
2001:42c0::,2001:42c0:ffff:ffff:ffff:ffff:ffff:ffff,ML
-2001:42c8::,2001:42c8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42c8::,2001:42c8::ff:ffff:ffff:ffff:ffff,ZA
+2001:42c8:0:100::,2001:42c8::1ff:ffff:ffff:ffff:ffff,KE
+2001:42c8:0:200::,2001:42c8:ff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42c8:100::,2001:42c8:100:ff:ffff:ffff:ffff:ffff,KE
+2001:42c8:100:100::,2001:42c8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2001:42d0::,2001:42d0:ffff:ffff:ffff:ffff:ffff:ffff,MU
2001:42d8::,2001:42d8:ffff:ffff:ffff:ffff:ffff:ffff,CI
2001:42e0::,2001:42e0:ffff:ffff:ffff:ffff:ffff:ffff,SC
@@ -5237,6 +5330,11 @@
2001:43f8:c00::,2001:43f8:c00:ffff:ffff:ffff:ffff:ffff,GH
2001:43f8:c10::,2001:43f8:c10:ffff:ffff:ffff:ffff:ffff,CG
2001:43f8:c20::,2001:43f8:c20:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:c30::,2001:43f8:c30:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:c40::,2001:43f8:c40:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:c50::,2001:43f8:c50:ffff:ffff:ffff:ffff:ffff,EG
+2001:43f8:c60::,2001:43f8:c61:ffff:ffff:ffff:ffff:ffff,GN
+2001:43f8:e00::,2001:43f8:eff:ffff:ffff:ffff:ffff:ffff,MU
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
@@ -5291,20 +5389,116 @@
2001:4860::,2001:4860:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4868::,2001:4868:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4870::,2001:4871:ffff:ffff:ffff:ffff:ffff:ffff,US
-2001:4878::,2001:4878:8203:ffff:ffff:ffff:ffff:ffff,US
+2001:4878::,2001:4878:128:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:129::,2001:4878:129:ffff:ffff:ffff:ffff:ffff,CR
+2001:4878:12a::,2001:4878:214:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:215::,2001:4878:215:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:216::,2001:4878:227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:228::,2001:4878:228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:229::,2001:4878:241:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:242::,2001:4878:242:ffff:ffff:ffff:ffff:ffff,NL
+2001:4878:243::,2001:4878:243:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:244::,2001:4878:245:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:246::,2001:4878:246:ffff:ffff:ffff:ffff:ffff,DK
+2001:4878:247::,2001:4878:248:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:249::,2001:4878:249:ffff:ffff:ffff:ffff:ffff,FR
+2001:4878:24a::,2001:4878:2214:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2215::,2001:4878:2215:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:2216::,2001:4878:2224:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2225::,2001:4878:2225:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:2226::,2001:4878:2227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2228::,2001:4878:2228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:2229::,2001:4878:2233:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2234::,2001:4878:2234:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:2235::,2001:4878:2241:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2242::,2001:4878:2242:ffff:ffff:ffff:ffff:ffff,NL
+2001:4878:2243::,2001:4878:2243:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:2244::,2001:4878:2245:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2246::,2001:4878:2246:ffff:ffff:ffff:ffff:ffff,DK
+2001:4878:2247::,2001:4878:2248:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2249::,2001:4878:2249:ffff:ffff:ffff:ffff:ffff,FR
+2001:4878:224a::,2001:4878:224f:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:2250::,2001:4878:2250:ffff:ffff:ffff:ffff:ffff,IT
+2001:4878:2251::,2001:4878:4128:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4129::,2001:4878:4129:ffff:ffff:ffff:ffff:ffff,CR
+2001:4878:412a::,2001:4878:4214:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4215::,2001:4878:4215:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:4216::,2001:4878:4224:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4225::,2001:4878:4225:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:4226::,2001:4878:4227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4228::,2001:4878:4228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:4229::,2001:4878:4233:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4234::,2001:4878:4234:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:4235::,2001:4878:4241:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4242::,2001:4878:4242:ffff:ffff:ffff:ffff:ffff,NL
+2001:4878:4243::,2001:4878:4245:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4246::,2001:4878:4246:ffff:ffff:ffff:ffff:ffff,DK
+2001:4878:4247::,2001:4878:4248:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4249::,2001:4878:4249:ffff:ffff:ffff:ffff:ffff,FR
+2001:4878:424a::,2001:4878:424f:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:4250::,2001:4878:4250:ffff:ffff:ffff:ffff:ffff,IT
+2001:4878:4251::,2001:4878:8128:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8129::,2001:4878:8129:ffff:ffff:ffff:ffff:ffff,CR
+2001:4878:812a::,2001:4878:8203:ffff:ffff:ffff:ffff:ffff,US
2001:4878:8204::,2001:4878:8204:7fff:ffff:ffff:ffff:ffff,DE
-2001:4878:8204:8000::,2001:4878:8216:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8204:8000::,2001:4878:8214:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8215::,2001:4878:8215:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:8216::,2001:4878:8216:ffff:ffff:ffff:ffff:ffff,US
2001:4878:8217::,2001:4878:8217:7fff:ffff:ffff:ffff:ffff,ES
2001:4878:8217:8000::,2001:4878:8224:ffff:ffff:ffff:ffff:ffff,US
-2001:4878:8225::,2001:4878:8225:7fff:ffff:ffff:ffff:ffff,PL
-2001:4878:8225:8000::,2001:4878:8227:ffff:ffff:ffff:ffff:ffff,US
-2001:4878:8228::,2001:4878:8228:7fff:ffff:ffff:ffff:ffff,IL
-2001:4878:8228:8000::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8225::,2001:4878:8225:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:8226::,2001:4878:8227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8228::,2001:4878:8228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:8229::,2001:4878:8233:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8234::,2001:4878:8234:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:8235::,2001:4878:8241:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8242::,2001:4878:8242:ffff:ffff:ffff:ffff:ffff,NL
+2001:4878:8243::,2001:4878:8243:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:8244::,2001:4878:8245:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8246::,2001:4878:8246:ffff:ffff:ffff:ffff:ffff,DK
+2001:4878:8247::,2001:4878:8248:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8249::,2001:4878:8249:ffff:ffff:ffff:ffff:ffff,FR
+2001:4878:824a::,2001:4878:824f:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:8250::,2001:4878:8250:ffff:ffff:ffff:ffff:ffff,IT
+2001:4878:8251::,2001:4878:a128:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a129::,2001:4878:a129:ffff:ffff:ffff:ffff:ffff,CR
+2001:4878:a12a::,2001:4878:a224:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a225::,2001:4878:a225:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:a226::,2001:4878:a227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a228::,2001:4878:a228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:a229::,2001:4878:a233:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a234::,2001:4878:a234:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:a235::,2001:4878:a241:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a242::,2001:4878:a242:ffff:ffff:ffff:ffff:ffff,NL
+2001:4878:a243::,2001:4878:a243:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:a244::,2001:4878:a248:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a249::,2001:4878:a249:ffff:ffff:ffff:ffff:ffff,FR
+2001:4878:a24a::,2001:4878:a24f:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:a250::,2001:4878:a250:ffff:ffff:ffff:ffff:ffff,IT
+2001:4878:a251::,2001:4878:c128:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c129::,2001:4878:c129:ffff:ffff:ffff:ffff:ffff,CR
+2001:4878:c12a::,2001:4878:c214:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c215::,2001:4878:c215:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:c216::,2001:4878:c224:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c225::,2001:4878:c225:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:c226::,2001:4878:c227:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c228::,2001:4878:c228:ffff:ffff:ffff:ffff:ffff,IL
+2001:4878:c229::,2001:4878:c233:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c234::,2001:4878:c234:ffff:ffff:ffff:ffff:ffff,GB
+2001:4878:c235::,2001:4878:c242:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c243::,2001:4878:c243:ffff:ffff:ffff:ffff:ffff,PL
+2001:4878:c244::,2001:4878:c245:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c246::,2001:4878:c246:ffff:ffff:ffff:ffff:ffff,DK
+2001:4878:c247::,2001:4878:c248:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c249::,2001:4878:c249:ffff:ffff:ffff:ffff:ffff,FR
+2001:4878:c24a::,2001:4878:c24f:ffff:ffff:ffff:ffff:ffff,US
+2001:4878:c250::,2001:4878:c250:ffff:ffff:ffff:ffff:ffff,IT
+2001:4878:c251::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4888::,2001:4888:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4890::,2001:4890:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:4898::,2001:4898:e80f:ffff:ffff:ffff:ffff:ffff,US
-2001:4898:e810::,2001:4898:e810:7fff:ffff:ffff:ffff:ffff,BR
-2001:4898:e810:8000::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4898:e810::,2001:4898:e810:ffff:ffff:ffff:ffff:ffff,BR
+2001:4898:e811::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48a0::,2001:48a0:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48a8::,2001:48a8:ffff:ffff:ffff:ffff:ffff:ffff,US
2001:48b0::,2001:48b0:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -5456,7 +5650,7 @@
2001:4d20::,2001:4d20:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4d30::,2001:4d30:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4d38::,2001:4d38:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2001:4d48::,2001:4d48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d48::,2001:4d4f:ffff:ffff:ffff:ffff:ffff:ffff,GB
2001:4d50::,2001:4d50:ffff:ffff:ffff:ffff:ffff:ffff,DE
2001:4d60::,2001:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
2001:4d68::,2001:4d68:ffff:ffff:ffff:ffff:ffff:ffff,IE
@@ -5486,105 +5680,210 @@
2160:150::,2160:150:7fff:ffff:ffff:ffff:ffff:ffff,US
2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR
2400:1000::,2400:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:1040::,2400:1040:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:10c0::,2400:10c0:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:1100::,2400:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1140::,2400:1140:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:11c0::,2400:11c0:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:1200::,2400:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:1240::,2400:1240:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:12c0::,2400:12c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1300::,2400:1300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:1340::,2400:1340:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1380::,2400:1380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:13c0::,2400:13c0:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:1400::,2400:1400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:1440::,2400:1440:ffff:ffff:ffff:ffff:ffff:ffff,BT
2400:1480::,2400:1480:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:14c0::,2400:14c0:ffff:ffff:ffff:ffff:ffff:ffff,PK
2400:1500::,2400:1500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:1540::,2400:1540:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:1580::,2400:1580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:15c0::,2400:15c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1600::,2400:1600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1640::,2400:1640:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1680::,2400:1680:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:16c0::,2400:16c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1700::,2400:1700:ffff:ffff:ffff:ffff:ffff:ffff,SG
-2400:1780::,2400:1780:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1740::,2400:1740:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:17c0::,2400:17c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1800::,2400:1800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:1840::,2400:1840:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1880::,2400:1880:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:18c0::,2400:18c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1900::,2400:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1940::,2400:1940:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1980::,2400:1980:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:19c0::,2400:19c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1a00::,2400:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:1a40::,2400:1a40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1a80::,2400:1a80:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:1ac0::,2400:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1b00::,2400:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1b40::,2400:1b40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1b80::,2400:1b80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:1bc0::,2400:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:1c00::,2400:1c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1c40::,2400:1c40:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:1c80::,2400:1c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1cc0::,2400:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1d00::,2400:1d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1d40::,2400:1d40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1d80::,2400:1d80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1dc0::,2400:1dc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1e00::,2400:1e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1e40::,2400:1e40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1e80::,2400:1e80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1ec0::,2400:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1f00::,2400:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1f40::,2400:1f40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:1f80::,2400:1f80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1fc0::,2400:1fc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:2000::,2400:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3040::,2400:3040:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3080::,2400:3080:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:30c0::,2400:30c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2400:3100::,2400:3100:ffff:ffff:ffff:ffff:ffff:ffff,VU
+2400:3140::,2400:3140:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3180::,2400:3180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:31c0::,2400:31c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3200::,2400:3200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3240::,2400:3240:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:3280::,2400:3280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:32c0::,2400:32c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3300::,2400:3300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:3340::,2400:3340:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3380::,2400:3380:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:33c0::,2400:33c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3400::,2400:3400:ffff:ffff:ffff:ffff:ffff:ffff,VU
+2400:3440::,2400:3440:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3480::,2400:3480:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:34c0::,2400:34c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3500::,2400:3500:ffff:ffff:ffff:ffff:ffff:ffff,TV
+2400:3540::,2400:3540:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3580::,2400:3580:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:35c0::,2400:35c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3600::,2400:3600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3640::,2400:3640:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3680::,2400:3680:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:36c0::,2400:36c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3740::,2400:3740:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:37c0::,2400:37c0:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:3800::,2400:3800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3840::,2400:3840:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:3880::,2400:3880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:38c0::,2400:38c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3900::,2400:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3940::,2400:3940:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:3980::,2400:3980:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:39c0::,2400:39c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3a00::,2400:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3a40::,2400:3a40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3a80::,2400:3a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3ac0::,2400:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:3b00::,2400:3b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3b40::,2400:3b40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3b80::,2400:3b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3bc0::,2400:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3c00::,2400:3c03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2400:3c40::,2400:3c40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3c80::,2400:3c80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3cc0::,2400:3cc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3d00::,2400:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3d40::,2400:3d40:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:3d80::,2400:3d80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:3dc0::,2400:3dc0:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:3e00::,2400:3e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3e40::,2400:3e40:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:3e80::,2400:3e80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3ec0::,2400:3ec0:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:3f00::,2400:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:3f40::,2400:3f40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:3f80::,2400:3f80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3fc0::,2400:3fc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4000::,2400:43ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:4400::,2400:4400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:4440::,2400:4440:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4480::,2400:4480:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:44c0::,2400:44c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4500::,2400:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:4540::,2400:4540:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4580::,2400:4580:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:45c0::,2400:45c0:ffff:ffff:ffff:ffff:ffff:ffff,US
2400:4600::,2400:4600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:4640::,2400:4640:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4680::,2400:4680:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:46c0::,2400:46c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4700::,2400:4700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4740::,2400:4740:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4780::,2400:4780:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:47c0::,2400:47c0:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:4800::,2400:4800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:4840::,2400:4840:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:4880::,2400:4880:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2400:48c0::,2400:48c0:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:4900::,2400:4900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4940::,2400:4940:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:4980::,2400:4980:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:49c0::,2400:49c0:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:4a00::,2400:4a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4a40::,2400:4a40:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:4a80::,2400:4a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:4ac0::,2400:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:4b00::,2400:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4b40::,2400:4b40:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:4b80::,2400:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4bc0::,2400:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4c00::,2400:4c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:4c40::,2400:4c40:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:4c80::,2400:4c80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4cc0::,2400:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:4d00::,2400:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4d40::,2400:4d40:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:4dc0::,2400:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:4e00::,2400:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:4e40::,2400:4e40:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:4e80::,2400:4e80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:4ec0::,2400:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,ID
2400:4f00::,2400:4f00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:4f40::,2400:4f40:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4fc0::,2400:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,BD
2400:5000::,2400:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5040::,2400:5040:ffff:ffff:ffff:ffff:ffff:ffff,ID
2400:5080::,2400:5080:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:50c0::,2400:50c0:ffff:ffff:ffff:ffff:ffff:ffff,BT
2400:5100::,2400:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:5140::,2400:5140:ffff:ffff:ffff:ffff:ffff:ffff,ID
2400:5180::,2400:5180:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:51c0::,2400:51c0:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:5200::,2400:5200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5240::,2400:5240:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:5280::,2400:5280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:52c0::,2400:52c0:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:5300::,2400:5300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5340::,2400:5340:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:5380::,2400:5380:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:53c0::,2400:53c0:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:5400::,2400:5400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5440::,2400:5440:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:5480::,2400:5480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:54c0::,2400:54c0:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:5500::,2400:5500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:5540::,2400:5540:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2400:5580::,2400:5580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:55c0::,2400:55c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5600::,2400:5600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5640::,2400:5640:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5680::,2400:5680:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:56c0::,2400:56c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5700::,2400:5700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5740::,2400:5740:ffff:ffff:ffff:ffff:ffff:ffff,ID
2400:5780::,2400:5780:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:57c0::,2400:57c0:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5800::,2400:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:5840::,2400:5840:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5880::,2400:5880:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:58c0::,2400:58c0:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:5900::,2400:5900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2400:5a00::,2400:5a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:5a80::,2400:5a80:ffff:ffff:ffff:ffff:ffff:ffff,BD
@@ -5608,7 +5907,15 @@
2400:6380::,2400:6380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:6400::,2400:6400:ffff:ffff:ffff:ffff:ffff:ffff,TO
2400:6480::,2400:6480:ffff:ffff:ffff:ffff:ffff:ffff,IN
-2400:6500::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6500::,2400:6500::70ff:ffff:ffff:ffff:ffff,SG
+2400:6500:0:7100::,2400:6500::71ff:ffff:ffff:ffff:ffff,JP
+2400:6500:0:7200::,2400:6500::72ff:ffff:ffff:ffff:ffff,AU
+2400:6500:0:7300::,2400:6500::73ff:ffff:ffff:ffff:ffff,SG
+2400:6500:0:7400::,2400:6500::74ff:ffff:ffff:ffff:ffff,KR
+2400:6500:0:7500::,2400:6500::75ff:ffff:ffff:ffff:ffff,IN
+2400:6500:0:7600::,2400:6500:100:70ff:ffff:ffff:ffff:ffff,SG
+2400:6500:100:7100::,2400:6500:100:71ff:ffff:ffff:ffff:ffff,CN
+2400:6500:100:7200::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG
2400:6580::,2400:6580:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:6600::,2400:6600:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:6680::,2400:6680:ffff:ffff:ffff:ffff:ffff:ffff,SG
@@ -5718,7 +6025,6 @@
2400:9980::,2400:9980:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:9a00::,2400:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:9a80::,2400:9a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2400:9b00::,2400:9b00:ffff:ffff:ffff:ffff:ffff:ffff,NP
2400:9b80::,2400:9b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:9c00::,2400:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:9c80::,2400:9c80:ffff:ffff:ffff:ffff:ffff:ffff,ID
@@ -5729,7 +6035,6 @@
2400:9f80::,2400:9f80:ffff:ffff:ffff:ffff:ffff:ffff,KR
2400:a000::,2400:a000:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:a080::,2400:a080:ffff:ffff:ffff:ffff:ffff:ffff,JP
-2400:a280::,2400:a280:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:a300::,2400:a300:ffff:ffff:ffff:ffff:ffff:ffff,JP
2400:a380::,2400:a380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2400:a400::,2400:a400:ffff:ffff:ffff:ffff:ffff:ffff,NP
@@ -5814,15 +6119,13 @@
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,US
-2400:cb00:30::,2400:cb00:30:ffff:ffff:ffff:ffff:ffff,AT
+2400:cb00:2a::,2400:cb00:30:ffff:ffff:ffff:ffff:ffff,US
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:33::,2400:cb00:33:ffff:ffff:ffff:ffff:ffff,US
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,US
-2400:cb00:37::,2400:cb00:37:ffff:ffff:ffff:ffff:ffff,DE
+2400:cb00:36::,2400:cb00:37:ffff:ffff:ffff:ffff:ffff,US
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,US
@@ -5878,7 +6181,9 @@
2400:cb00:87::,2400:cb00:87:ffff:ffff:ffff:ffff:ffff,RU
2400:cb00:88::,2400:cb00:88:ffff:ffff:ffff:ffff:ffff,GR
2400:cb00:89::,2400:cb00:89:ffff:ffff:ffff:ffff:ffff,ES
-2400:cb00:8a::,2400:cb00:95:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:8a::,2400:cb00:8f:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:90::,2400:cb00:90:ffff:ffff:ffff:ffff:ffff,PA
+2400:cb00:91::,2400:cb00:95:ffff:ffff:ffff:ffff:ffff,US
2400:cb00:96::,2400:cb00:96:ffff:ffff:ffff:ffff:ffff,AO
2400:cb00:97::,2400:cb00:97:ffff:ffff:ffff:ffff:ffff,BR
2400:cb00:98::,2400:cb00:103:ffff:ffff:ffff:ffff:ffff,US
@@ -5887,9 +6192,7 @@
2400:cb00:107::,2400:cb00:107:ffff:ffff:ffff:ffff:ffff,PT
2400:cb00:108::,2400:cb00:113:ffff:ffff:ffff:ffff:ffff,US
2400:cb00:114::,2400:cb00:114:ffff:ffff:ffff:ffff:ffff,AT
-2400:cb00:115::,2400:cb00:568:ffff:ffff:ffff:ffff:ffff,US
-2400:cb00:569::,2400:cb00:569:ffff:ffff:ffff:ffff:ffff,CA
-2400:cb00:56a::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2400:cb00:115::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
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
@@ -5959,7 +6262,6 @@
2400:f080::,2400:f080:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:f100::,2400:f100:ffff:ffff:ffff:ffff:ffff:ffff,HK
2400:f180::,2400:f180:ffff:ffff:ffff:ffff:ffff:ffff,SG
-2400:f200::,2400:f200:ffff:ffff:ffff:ffff:ffff:ffff,PH
2400:f280::,2400:f280:ffff:ffff:ffff:ffff:ffff:ffff,AU
2400:f300::,2400:f300:ffff:ffff:ffff:ffff:ffff:ffff,IN
2400:f380::,2400:f380:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -5994,6 +6296,7 @@
2401:300::,2401:300:ffff:ffff:ffff:ffff:ffff:ffff,HK
2401:380::,2401:380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:400::,2401:403:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:4c1:c202:1193:f0a8:d737:3761:2b87,2401:4c1:c202:1193:f0a8:d737:3761:2b87,US
2401:500::,2401:500:ffff:ffff:ffff:ffff:ffff:ffff,TH
2401:580::,2401:580:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:600::,2401:600:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -6123,7 +6426,6 @@
2401:4400::,2401:4400:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:4480::,2401:4480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:4580::,2401:4580:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2401:4600::,2401:4600:ffff:ffff:ffff:ffff:ffff:ffff,BD
2401:4680::,2401:4680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:4700::,2401:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:4780::,2401:4780:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -6179,7 +6481,6 @@
2401:7300::,2401:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:7380::,2401:7380:ffff:ffff:ffff:ffff:ffff:ffff,AU
2401:7400::,2401:7401:ffff:ffff:ffff:ffff:ffff:ffff,SG
-2401:7480::,2401:7480:ffff:ffff:ffff:ffff:ffff:ffff,MY
2401:7500::,2401:7500:ffff:ffff:ffff:ffff:ffff:ffff,IN
2401:7580::,2401:7580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2401:7600::,2401:7600:ffff:ffff:ffff:ffff:ffff:ffff,HK
@@ -6463,8 +6764,8 @@
2401:fa00:7::,2401:fa00:8:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:9::,2401:fa00:9:7fff:ffff:ffff:ffff:ffff,AU
2401:fa00:9:8000::,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:e:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:d::,2401:fa00:d:ffff:ffff:ffff:ffff:ffff,KR
+2401:fa00:e::,2401:fa00:e:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:f::,2401:fa00:f:7fff:ffff:ffff:ffff:ffff,SG
2401:fa00:f:8000::,2401:fa00:10:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:11::,2401:fa00:11:7fff:ffff:ffff:ffff:ffff,AU
@@ -6481,7 +6782,9 @@
2401:fa00:26::,2401:fa00:26:ffff:ffff:ffff:ffff:ffff,PH
2401:fa00:27::,2401:fa00:28:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:29::,2401:fa00:29:7fff:ffff:ffff:ffff:ffff,AU
-2401:fa00:29:8000::,2401:fa00:32:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:29:8000::,2401:fa00:2c:ffff:ffff:ffff:ffff:ffff,IN
+2401:fa00:2d::,2401:fa00:2d:ffff:ffff:ffff:ffff:ffff,SG
+2401:fa00:2e::,2401:fa00:32:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:33::,2401:fa00:33:ffff:ffff:ffff:ffff:ffff,PH
2401:fa00:34::,2401:fa00:3f:ffff:ffff:ffff:ffff:ffff,IN
2401:fa00:40::,2401:fa00:40:7fff:ffff:ffff:ffff:ffff,CN
@@ -6595,7 +6898,6 @@
2402:3280::,2402:3280:ffff:ffff:ffff:ffff:ffff:ffff,BD
2402:3300::,2402:3300:ffff:ffff:ffff:ffff:ffff:ffff,SG
2402:3380::,2402:3380:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2402:3400::,2402:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:3480::,2402:3480:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:3500::,2402:3500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2402:3580::,2402:3580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
@@ -6763,7 +7065,6 @@
2402:8800::,2402:8800:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:8880::,2402:8880:ffff:ffff:ffff:ffff:ffff:ffff,MN
2402:8900::,2402:8900:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2402:8980::,2402:8980:ffff:ffff:ffff:ffff:ffff:ffff,BD
2402:8a00::,2402:8a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:8a80::,2402:8a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:8b00::,2402:8b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
@@ -6913,7 +7214,6 @@
2402:d400::,2402:d400:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:d500::,2402:d500:ffff:ffff:ffff:ffff:ffff:ffff,IN
2402:d580::,2402:d580:ffff:ffff:ffff:ffff:ffff:ffff,US
-2402:d581::,2402:d581:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:d600::,2402:d600:ffff:ffff:ffff:ffff:ffff:ffff,JP
2402:d680::,2402:d680:ffff:ffff:ffff:ffff:ffff:ffff,ID
2402:d700::,2402:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -6979,7 +7279,6 @@
2402:f700::,2402:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:f780::,2402:f780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:f800::,2402:f800:ffff:ffff:ffff:ffff:ffff:ffff,VN
-2402:f880::,2402:f880:ffff:ffff:ffff:ffff:ffff:ffff,AU
2402:f900::,2402:f900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2402:f980::,2402:f980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2402:fa00::,2402:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
@@ -7338,7 +7637,9 @@
2403:ad00::,2403:ad00:ffff:ffff:ffff:ffff:ffff:ffff,IN
2403:ad80::,2403:ad80:5f:ffff:ffff:ffff:ffff:ffff,HK
2403:ad80:60::,2403:ad80:67:ffff:ffff:ffff:ffff:ffff,JP
-2403:ad80:68::,2403:ad80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:ad80:68::,2403:ad80:7f:ffff:ffff:ffff:ffff:ffff,HK
+2403:ad80:80::,2403:ad80:87:ffff:ffff:ffff:ffff:ffff,US
+2403:ad80:88::,2403:ad80:ffff:ffff:ffff:ffff:ffff:ffff,HK
2403:ae00::,2403:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID
2403:ae80::,2403:ae80:ffff:ffff:ffff:ffff:ffff:ffff,NR
2403:af00::,2403:af00:ffff:ffff:ffff:ffff:ffff:ffff,ID
@@ -7792,7 +8093,9 @@
2404:8500::,2404:8500:ffff:ffff:ffff:ffff:ffff:ffff,IN
2404:8580::,2404:8580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:8600::,2404:8600:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2404:8680::,2404:8680:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:8680::,2404:8680:fff:ffff:ffff:ffff:ffff:ffff,SG
+2404:8680:1000::,2404:8680:1fff:ffff:ffff:ffff:ffff:ffff,TH
+2404:8680:2000::,2404:8680:ffff:ffff:ffff:ffff:ffff:ffff,SG
2404:8700::,2404:8700:ffff:ffff:ffff:ffff:ffff:ffff,CN
2404:8780::,2404:8780:ffff:ffff:ffff:ffff:ffff:ffff,HK
2404:8800::,2404:8800:ffff:ffff:ffff:ffff:ffff:ffff,TH
@@ -7848,7 +8151,6 @@
2404:a280::,2404:a280:ffff:ffff:ffff:ffff:ffff:ffff,IN
2404:a300::,2404:a300:ffff:ffff:ffff:ffff:ffff:ffff,TH
2404:a380::,2404:a380:ffff:ffff:ffff:ffff:ffff:ffff,AU
-2404:a480::,2404:a480:ffff:ffff:ffff:ffff:ffff:ffff,JP
2404:a500::,2404:a500:ffff:ffff:ffff:ffff:ffff:ffff,IN
2404:a580::,2404:a580:ffff:ffff:ffff:ffff:ffff:ffff,SG
2404:a600::,2404:a600:ffff:ffff:ffff:ffff:ffff:ffff,JP
@@ -7861,7 +8163,6 @@
2404:ab00::,2404:ab00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2404:ab80::,2404:ab80:ffff:ffff:ffff:ffff:ffff:ffff,MV
2404:ac00::,2404:ac00:ffff:ffff:ffff:ffff:ffff:ffff,IN
-2404:ad00::,2404:ad00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2404:ad80::,2404:ad80:ffff:ffff:ffff:ffff:ffff:ffff,SG
2404:ae00::,2404:ae00:ffff:ffff:ffff:ffff:ffff:ffff,HK
2404:ae80::,2404:ae80:ffff:ffff:ffff:ffff:ffff:ffff,TH
@@ -8022,7 +8323,9 @@
2404:f801:30::,2404:f801:30::,AU
2404:f801:30::1,2404:f801:8027:ffff:ffff:ffff:ffff:ffff,SG
2404:f801:8028::,2404:f801:8028:ffff:ffff:ffff:ffff:ffff,IN
-2404:f801:8029::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG
+2404:f801:8029::,2404:f801:8050::ffff:ffff:ffff:ffff,SG
+2404:f801:8050:1::,2404:f801:8050:8:ffff:ffff:ffff:ffff,JP
+2404:f801:8050:9::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG
2404:f801:8058::,2404:f801:8058:ffff:ffff:ffff:ffff:ffff,IN
2404:f801:8059::,2404:f801:e817:ffff:ffff:ffff:ffff:ffff,SG
2404:f801:e818::,2404:f801:e818:7fff:ffff:ffff:ffff:ffff,AU
@@ -8104,7 +8407,9 @@
2405:2000:400:300::,2405:2000:400:3ff:ffff:ffff:ffff:ffff,HK
2405:2000:400:400::,2405:2000:400:ffff:ffff:ffff:ffff:ffff,IN
2405:2000:401::,2405:2000:401:ffff:ffff:ffff:ffff:ffff,HK
-2405:2000:402::,2405:2000:7ff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000:402::,2405:2000:500:ffff:ffff:ffff:ffff:ffff,IN
+2405:2000:501::,2405:2000:501:ffff:ffff:ffff:ffff:ffff,HK
+2405:2000:502::,2405:2000:7ff:ffff:ffff:ffff:ffff:ffff,IN
2405:2000:800::,2405:2000:800:ff:ffff:ffff:ffff:ffff,SG
2405:2000:800:100::,2405:2000:8ff:ffff:ffff:ffff:ffff:ffff,IN
2405:2000:900::,2405:2000:900:ff:ffff:ffff:ffff:ffff,JP
@@ -8160,7 +8465,6 @@
2405:2a80::,2405:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2405:2b00::,2405:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2405:2b80::,2405:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2405:2c00::,2405:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2405:2c80::,2405:2c80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2405:2d00::,2405:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2405:2d80::,2405:2d80:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -8377,7 +8681,6 @@
2405:9880::,2405:9880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2405:9900::,2405:9900:ffff:ffff:ffff:ffff:ffff:ffff,CN
2405:9980::,2405:9980:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2405:9a00::,2405:9a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
2405:9a80::,2405:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2405:9b00::,2405:9b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
2405:9b80::,2405:9b80:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -8992,7 +9295,75 @@
2406:d800::,2406:d800:ffff:ffff:ffff:ffff:ffff:ffff,IN
2406:d880::,2406:d880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2406:d980::,2406:d980:ffff:ffff:ffff:ffff:ffff:ffff,CN
-2406:da00::,2406:daff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da00::,2406:da00:1fff:ffff:ffff:ffff:ffff:ffff,US
+2406:da00:2000::,2406:da00:20ff:ffff:ffff:ffff:ffff:ffff,KR
+2406:da00:2100::,2406:da00:3fff:ffff:ffff:ffff:ffff:ffff,US
+2406:da00:4000::,2406:da00:40ff:ffff:ffff:ffff:ffff:ffff,JP
+2406:da00:4100::,2406:da00:7fff:ffff:ffff:ffff:ffff:ffff,US
+2406:da00:8000::,2406:da00:80ff:ffff:ffff:ffff:ffff:ffff,SG
+2406:da00:8100::,2406:da00:9fff:ffff:ffff:ffff:ffff:ffff,US
+2406:da00:a000::,2406:da00:a0ff:ffff:ffff:ffff:ffff:ffff,IN
+2406:da00:a100::,2406:da00:bfff:ffff:ffff:ffff:ffff:ffff,US
+2406:da00:c000::,2406:da00:c0ff:ffff:ffff:ffff:ffff:ffff,AU
+2406:da00:c100::,2406:da11:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da12::,2406:da12:fff:ffff:ffff:ffff:ffff:ffff,KR
+2406:da12:1000::,2406:da13:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da14::,2406:da14:fff:ffff:ffff:ffff:ffff:ffff,JP
+2406:da14:1000::,2406:da17:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da18::,2406:da18:fff:ffff:ffff:ffff:ffff:ffff,SG
+2406:da18:1000::,2406:da19:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da1a::,2406:da1a:fff:ffff:ffff:ffff:ffff:ffff,IN
+2406:da1a:1000::,2406:da1b:ffff:ffff:ffff:ffff:ffff:ffff,US
+2406:da1c::,2406:da1c:fff:ffff:ffff:ffff:ffff:ffff,AU
+2406:da1c:1000::,2406:daa0:203f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:2040::,2406:daa0:204f:ffff:ffff:ffff:ffff:ffff,KR
+2406:daa0:2050::,2406:daa0:207f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:2080::,2406:daa0:208f:ffff:ffff:ffff:ffff:ffff,KR
+2406:daa0:2090::,2406:daa0:20bf:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:20c0::,2406:daa0:20cf:ffff:ffff:ffff:ffff:ffff,KR
+2406:daa0:20d0::,2406:daa0:401f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:4020::,2406:daa0:402f:ffff:ffff:ffff:ffff:ffff,JP
+2406:daa0:4030::,2406:daa0:403f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:4040::,2406:daa0:404f:ffff:ffff:ffff:ffff:ffff,JP
+2406:daa0:4050::,2406:daa0:405f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:4060::,2406:daa0:406f:ffff:ffff:ffff:ffff:ffff,JP
+2406:daa0:4070::,2406:daa0:407f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:4080::,2406:daa0:408f:ffff:ffff:ffff:ffff:ffff,JP
+2406:daa0:4090::,2406:daa0:409f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:40a0::,2406:daa0:40af:ffff:ffff:ffff:ffff:ffff,JP
+2406:daa0:40b0::,2406:daa0:40bf:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:40c0::,2406:daa0:40cf:ffff:ffff:ffff:ffff:ffff,JP
+2406:daa0:40d0::,2406:daa0:801f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:8020::,2406:daa0:802f:ffff:ffff:ffff:ffff:ffff,SG
+2406:daa0:8030::,2406:daa0:807f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:8080::,2406:daa0:808f:ffff:ffff:ffff:ffff:ffff,SG
+2406:daa0:8090::,2406:daa0:80bf:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:80c0::,2406:daa0:80cf:ffff:ffff:ffff:ffff:ffff,SG
+2406:daa0:80d0::,2406:daa0:a03f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:a040::,2406:daa0:a04f:ffff:ffff:ffff:ffff:ffff,IN
+2406:daa0:a050::,2406:daa0:a07f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:a080::,2406:daa0:a08f:ffff:ffff:ffff:ffff:ffff,IN
+2406:daa0:a090::,2406:daa0:a0bf:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:a0c0::,2406:daa0:a0cf:ffff:ffff:ffff:ffff:ffff,IN
+2406:daa0:a0d0::,2406:daa0:c01f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:c020::,2406:daa0:c02f:ffff:ffff:ffff:ffff:ffff,AU
+2406:daa0:c030::,2406:daa0:c03f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:c040::,2406:daa0:c04f:ffff:ffff:ffff:ffff:ffff,AU
+2406:daa0:c050::,2406:daa0:c07f:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:c080::,2406:daa0:c08f:ffff:ffff:ffff:ffff:ffff,AU
+2406:daa0:c090::,2406:daa0:c0bf:ffff:ffff:ffff:ffff:ffff,US
+2406:daa0:c0c0::,2406:daa0:c0cf:ffff:ffff:ffff:ffff:ffff,AU
+2406:daa0:c0d0::,2406:dafc:1fff:ffff:ffff:ffff:ffff:ffff,US
+2406:dafc:2000::,2406:dafc:20ff:ffff:ffff:ffff:ffff:ffff,KR
+2406:dafc:2100::,2406:dafc:3fff:ffff:ffff:ffff:ffff:ffff,US
+2406:dafc:4000::,2406:dafc:40ff:ffff:ffff:ffff:ffff:ffff,JP
+2406:dafc:4100::,2406:dafc:7fff:ffff:ffff:ffff:ffff:ffff,US
+2406:dafc:8000::,2406:dafc:80ff:ffff:ffff:ffff:ffff:ffff,SG
+2406:dafc:8100::,2406:dafc:9fff:ffff:ffff:ffff:ffff:ffff,US
+2406:dafc:a000::,2406:dafc:a0ff:ffff:ffff:ffff:ffff:ffff,IN
+2406:dafc:a100::,2406:dafc:bfff:ffff:ffff:ffff:ffff:ffff,US
+2406:dafc:c000::,2406:dafc:c0ff:ffff:ffff:ffff:ffff:ffff,AU
+2406:dafc:c100::,2406:daff:ffff:ffff:ffff:ffff:ffff:ffff,US
2406:db00::,2406:db00:ffff:ffff:ffff:ffff:ffff:ffff,IN
2406:db80::,2406:db80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2406:dc00::,2406:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -9138,7 +9509,6 @@
2407:2480::,2407:2480:ffff:ffff:ffff:ffff:ffff:ffff,NZ
2407:2500::,2407:2500:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:2580::,2407:2580:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2407:2600::,2407:2600:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:2680::,2407:2680:ffff:ffff:ffff:ffff:ffff:ffff,BD
2407:2780::,2407:2780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:2800::,2407:2800:ffff:ffff:ffff:ffff:ffff:ffff,WS
@@ -9381,89 +9751,180 @@
2407:a380::,2407:a380:ffff:ffff:ffff:ffff:ffff:ffff,SG
2407:a480::,2407:a480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:a500::,2407:a500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:a580::,2407:a580:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:a600::,2407:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:a680::,2407:a680:ffff:ffff:ffff:ffff:ffff:ffff,BD
2407:a700::,2407:a700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:a780::,2407:a780:ffff:ffff:ffff:ffff:ffff:ffff,IN
2407:a800::,2407:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:a880::,2407:a880:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:a980::,2407:a980:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:aa80::,2407:aa80:ffff:ffff:ffff:ffff:ffff:ffff,PK
2407:ab00::,2407:ab00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ab80::,2407:ab80:ffff:ffff:ffff:ffff:ffff:ffff,ID
2407:ac00::,2407:ac00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:ac80::,2407:ac80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:ad00::,2407:ad00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:ad80::,2407:ad80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ae00::,2407:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ae80::,2407:ae80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:af00::,2407:af00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:af80::,2407:af80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b000::,2407:b001:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:b080::,2407:b080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b100::,2407:b100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:b180::,2407:b180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b200::,2407:b200:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:b280::,2407:b280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:b380::,2407:b380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b400::,2407:b400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b480::,2407:b480:ffff:ffff:ffff:ffff:ffff:ffff,US
2407:b500::,2407:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b580::,2407:b580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b600::,2407:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b680::,2407:b680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b700::,2407:b700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b780::,2407:b780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b800::,2407:b800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:b880::,2407:b880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:b900::,2407:b900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:b980::,2407:b980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ba00::,2407:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:ba80::,2407:ba80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:bb00::,2407:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:bb80::,2407:bb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:bc00::,2407:bc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:bc80::,2407:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:bd00::,2407:bd00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:bd80::,2407:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:be00::,2407:be00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:be80::,2407:be80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:bf00::,2407:bf00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:bf80::,2407:bf80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c000::,2407:c000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c080::,2407:c080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c100::,2407:c100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:c180::,2407:c180:ffff:ffff:ffff:ffff:ffff:ffff,KH
2407:c200::,2407:c200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:c280::,2407:c280:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:c300::,2407:c300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:c380::,2407:c380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c400::,2407:c400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:c480::,2407:c480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c500::,2407:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:c580::,2407:c580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c600::,2407:c600:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:c680::,2407:c680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c700::,2407:c700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c780::,2407:c780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c800::,2407:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:c880::,2407:c880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:c900::,2407:c900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:c980::,2407:c980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ca00::,2407:ca00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:ca80::,2407:ca80:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:cb00::,2407:cb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:cb80::,2407:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:cc00::,2407:cc00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:cc80::,2407:cc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:cd00::,2407:cd00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:cd80::,2407:cd80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ce00::,2407:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ce80::,2407:ce80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:cf00::,2407:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:cf80::,2407:cf80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:d000::,2407:d000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:d080::,2407:d080:ffff:ffff:ffff:ffff:ffff:ffff,AU
2407:d100::,2407:d100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:d180::,2407:d180:ffff:ffff:ffff:ffff:ffff:ffff,ID
2407:d200::,2407:d200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:d280::,2407:d280:ffff:ffff:ffff:ffff:ffff:ffff,BD
2407:d300::,2407:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:d380::,2407:d380:ffff:ffff:ffff:ffff:ffff:ffff,BD
2407:d400::,2407:d400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:d480::,2407:d480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:d500::,2407:d500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:d580::,2407:d580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:d600::,2407:d600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:d680::,2407:d680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:d700::,2407:d700:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:d780::,2407:d780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:d800::,2407:d800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:d880::,2407:d880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:d900::,2407:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:d980::,2407:d980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:da00::,2407:da00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:da80::,2407:da80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:db00::,2407:db00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:db80::,2407:db80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:dc00::,2407:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:dc80::,2407:dc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:dd80::,2407:dd80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:de00::,2407:de00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:de80::,2407:de80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:df00::,2407:df00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:df80::,2407:df80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e000::,2407:e000:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:e080::,2407:e080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e100::,2407:e100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:e180::,2407:e180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e200::,2407:e200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:e280::,2407:e280:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e300::,2407:e301:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:e380::,2407:e380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e400::,2407:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:e480::,2407:e480:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e500::,2407:e501:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:e580::,2407:e580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e600::,2407:e600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:e680::,2407:e680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e700::,2407:e700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:e780::,2407:e780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:e800::,2407:e800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:e880::,2407:e880:ffff:ffff:ffff:ffff:ffff:ffff,IN
2407:e900:1::,2407:e900:1:7fff:ffff:ffff:ffff:ffff,IN
+2407:e980::,2407:e980:ffff:ffff:ffff:ffff:ffff:ffff,BD
2407:ea00::,2407:ea00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:ea80::,2407:ea80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:eb00::,2407:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:eb80::,2407:eb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ec00::,2407:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ec80::,2407:ec80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ed00::,2407:ed00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:ed80::,2407:ed80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ee00::,2407:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ee80::,2407:ee80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:ef00::,2407:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:ef80::,2407:ef80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f000::,2407:f000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f080::,2407:f080:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f100::,2407:f100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:f180::,2407:f180:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f200::,2407:f200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:f280::,2407:f280:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f300::,2407:f300:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2407:f380::,2407:f380:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f400::,2407:f400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f480::,2407:f480:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:f580::,2407:f580:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f600::,2407:f600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:f680::,2407:f680:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f700::,2407:f700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:f780::,2407:f780:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f800::,2407:f800:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:f880::,2407:f880:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:f900::,2407:f900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:f980::,2407:f980:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:fa00::,2407:fa00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:fa80::,2407:fa80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:fb80::,2407:fb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:fc80::,2407:fc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:fd00::,2407:fd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:fd80::,2407:fd80:ffff:ffff:ffff:ffff:ffff:ffff,CN
2407:fe00::,2407:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:fe80::,2407:fe80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2407:ff00::,2407:ff00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:ff80::,2407:ff80:ffff:ffff:ffff:ffff:ffff:ffff,BD
2408::,2408:3ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
2408:4000::,2408:43ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
2408:8000::,2408:8fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
@@ -9504,7 +9965,33 @@
2600:1b00::,2600:1bff:ffff:ffff:ffff:ffff:ffff:ffff,JM
2600:1d00::,2600:1d0f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:1e00::,2600:1e0f:ffff:ffff:ffff:ffff:ffff:ffff,VC
-2600:1f00::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1f00::,2600:1f00:fff:ffff:ffff:ffff:ffff:ffff,US
+2600:1f00:1000::,2600:1f00:10ff:ffff:ffff:ffff:ffff:ffff,CA
+2600:1f00:1100::,2600:1f00:dfff:ffff:ffff:ffff:ffff:ffff,US
+2600:1f00:e000::,2600:1f00:e0ff:ffff:ffff:ffff:ffff:ffff,BR
+2600:1f00:e100::,2600:1f10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1f11::,2600:1f11:fff:ffff:ffff:ffff:ffff:ffff,CA
+2600:1f11:1000::,2600:1f1d:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1f1e::,2600:1f1e:fff:ffff:ffff:ffff:ffff:ffff,BR
+2600:1f1e:1000::,2600:1fa0:103f:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:1040::,2600:1fa0:104f:ffff:ffff:ffff:ffff:ffff,CA
+2600:1fa0:1050::,2600:1fa0:107f:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:1080::,2600:1fa0:108f:ffff:ffff:ffff:ffff:ffff,CA
+2600:1fa0:1090::,2600:1fa0:10bf:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:10c0::,2600:1fa0:10cf:ffff:ffff:ffff:ffff:ffff,CA
+2600:1fa0:10d0::,2600:1fa0:e01f:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:e020::,2600:1fa0:e02f:ffff:ffff:ffff:ffff:ffff,BR
+2600:1fa0:e030::,2600:1fa0:e03f:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:e040::,2600:1fa0:e04f:ffff:ffff:ffff:ffff:ffff,BR
+2600:1fa0:e050::,2600:1fa0:e07f:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:e080::,2600:1fa0:e08f:ffff:ffff:ffff:ffff:ffff,BR
+2600:1fa0:e090::,2600:1fa0:e0bf:ffff:ffff:ffff:ffff:ffff,US
+2600:1fa0:e0c0::,2600:1fa0:e0cf:ffff:ffff:ffff:ffff:ffff,BR
+2600:1fa0:e0d0::,2600:1ffc:fff:ffff:ffff:ffff:ffff:ffff,US
+2600:1ffc:1000::,2600:1ffc:10ff:ffff:ffff:ffff:ffff:ffff,CA
+2600:1ffc:1100::,2600:1ffc:dfff:ffff:ffff:ffff:ffff:ffff,US
+2600:1ffc:e000::,2600:1ffc:e0ff:ffff:ffff:ffff:ffff:ffff,BR
+2600:1ffc:e100::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2100::,2600:210f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2200::,2600:220f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2300::,2600:230f:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -9513,6 +10000,7 @@
2600:2600::,2600:260f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2700::,2600:270f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2800::,2600:2803:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2900::,2600:290f:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:2c00::,2600:2c03:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:3000::,2600:3007:ffff:ffff:ffff:ffff:ffff:ffff,US
2600:3400::,2600:340f:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -9552,6 +10040,12 @@
2602:233::,2602:233: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:ff1c::,2602:ff1c:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff1d::,2602:ff1d:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff1e::,2602:ff1e:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff1f::,2602:ff1f:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff20::,2602:ff20:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ff21::,2602:ff21:fff:ffff:ffff:ffff:ffff:ffff,CA
2602:ff22::,2602:ff22:fff:ffff:ffff:ffff:ffff:ffff,CA
2602:ff23::,2602:ff23:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff24::,2602:ff24:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -9614,7 +10108,6 @@
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
2602:ff63::,2602:ff63:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -9641,7 +10134,6 @@
2602:ff7a::,2602:ff7b:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff7c::,2602:ff7c:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff7d::,2602:ff7d:fff:ffff:ffff:ffff:ffff:ffff,US
-2602:ff7e::,2602:ff7e:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff7f::,2602:ff7f:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff80::,2602:ff80:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ff81::,2602:ff81:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -9712,7 +10204,9 @@
2602:ffc2::,2602:ffc2:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffc3::,2602:ffc3:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffc4::,2602:ffc4:fff:ffff:ffff:ffff:ffff:ffff,US
-2602:ffc5::,2602:ffc6:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffc5::,2602:ffc5:104:ffff:ffff:ffff:ffff:ffff,US
+2602:ffc5:105::,2602:ffc5:105:ffff:ffff:ffff:ffff:ffff,CA
+2602:ffc5:106::,2602:ffc6:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffc7::,2602:ffc7:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffc8::,2602:ffc9:fff:ffff:ffff:ffff:ffff:ffff,US
2602:ffca::,2602:ffca:fff:ffff:ffff:ffff:ffff:ffff,US
@@ -9801,8 +10295,8 @@
2603:1026:2b::,2603:1026:2b:ffff:ffff:ffff:ffff:ffff,FI
2603:1026:2c::,2603:1026:2d:ffff:ffff:ffff:ffff:ffff,IE
2603:1026:2e::,2603:1026:1ff:ffff:ffff:ffff:ffff:ffff,US
-2603:1026:200::,2603:1026:205:ffff:ffff:ffff:ffff:ffff,NL
-2603:1026:206::,2603:1026:21f:ffff:ffff:ffff:ffff:ffff,US
+2603:1026:200::,2603:1026:206:ffff:ffff:ffff:ffff:ffff,NL
+2603:1026:207::,2603:1026:21f:ffff:ffff:ffff:ffff:ffff,US
2603:1026:220::,2603:1026:224:ffff:ffff:ffff:ffff:ffff,NL
2603:1026:225::,2603:1026:227:ffff:ffff:ffff:ffff:ffff,US
2603:1026:228::,2603:1026:22b:ffff:ffff:ffff:ffff:ffff,NL
@@ -9821,8 +10315,8 @@
2603:1026:801::,2603:1026:81f:ffff:ffff:ffff:ffff:ffff,US
2603:1026:820::,2603:1026:828:ffff:ffff:ffff:ffff:ffff,GB
2603:1026:829::,2603:1026:fff:ffff:ffff:ffff:ffff:ffff,US
-2603:1026:1000::,2603:1026:1000:ffff:ffff:ffff:ffff:ffff,IE
-2603:1026:1001::,2603:1029:2ff:ffff:ffff:ffff:ffff:ffff,US
+2603:1026:1000::,2603:1026:1001:ffff:ffff:ffff:ffff:ffff,IE
+2603:1026:1002::,2603:1029:2ff:ffff:ffff:ffff:ffff:ffff,US
2603:1029:300::,2603:1029:300:ffff:ffff:ffff:ffff:ffff,AT
2603:1029:301::,2603:1029:3ff:ffff:ffff:ffff:ffff:ffff,US
2603:1029:400::,2603:1029:404:ffff:ffff:ffff:ffff:ffff,IE
@@ -9892,11 +10386,13 @@
2603:1046:900::,2603:1046:900:ffff:ffff:ffff:ffff:ffff,IN
2603:1046:901::,2603:1047:ff:ffff:ffff:ffff:ffff:ffff,US
2603:1047:100::,2603:1047:100:ffff:ffff:ffff:ffff:ffff,SG
-2603:1047:101::,2603:1048:ffff:ffff:ffff:ffff:ffff:ffff,US
+2603:1047:101::,2603:1047:1ff:ffff:ffff:ffff:ffff:ffff,US
+2603:1047:200::,2603:1047:200:ffff:ffff:ffff:ffff:ffff,HK
+2603:1047:201::,2603:1048:ffff:ffff:ffff:ffff:ffff:ffff,US
2603:1049::,2603:1049:3:ffff:ffff:ffff:ffff:ffff,SG
2603:1049:4::,2603:1049:1ff:ffff:ffff:ffff:ffff:ffff,US
-2603:1049:200::,2603:1049:201:ffff:ffff:ffff:ffff:ffff,HK
-2603:1049:202::,2603:1049:3ff:ffff:ffff:ffff:ffff:ffff,US
+2603:1049:200::,2603:1049:202:ffff:ffff:ffff:ffff:ffff,HK
+2603:1049:203::,2603:1049:3ff:ffff:ffff:ffff:ffff:ffff,US
2603:1049:400::,2603:1049:401:ffff:ffff:ffff:ffff:ffff,JP
2603:1049:402::,2603:1049:5ff:ffff:ffff:ffff:ffff:ffff,US
2603:1049:600::,2603:1049:601:ffff:ffff:ffff:ffff:ffff,JP
@@ -9911,20 +10407,20 @@
2603:1050:1::,2603:1050:20f:ffff:ffff:ffff:ffff:ffff,US
2603:1050:210::,2603:1050:210:ffff:ffff:ffff:ffff:ffff,CL
2603:1050:211::,2603:1055:ffff:ffff:ffff:ffff:ffff:ffff,US
-2603:1056::,2603:1056::ffff:ffff:ffff:ffff:ffff,BR
-2603:1056:1::,2603:1056:1f:ffff:ffff:ffff:ffff:ffff,US
+2603:1056::,2603:1056:1:ffff:ffff:ffff:ffff:ffff,BR
+2603:1056:2::,2603:1056:1f:ffff:ffff:ffff:ffff:ffff,US
2603:1056:20::,2603:1056:20:ffff:ffff:ffff:ffff:ffff,BR
2603:1056:21::,2603:1056:27:ffff:ffff:ffff:ffff:ffff,US
2603:1056:28::,2603:1056:28:ffff:ffff:ffff:ffff:ffff,BR
2603:1056:29::,2603:1056:1ff:ffff:ffff:ffff:ffff:ffff,US
-2603:1056:200::,2603:1056:201:ffff:ffff:ffff:ffff:ffff,BR
-2603:1056:202::,2603:1056:3ff:ffff:ffff:ffff:ffff:ffff,US
+2603:1056:200::,2603:1056:202:ffff:ffff:ffff:ffff:ffff,BR
+2603:1056:203::,2603:1056:3ff:ffff:ffff:ffff:ffff:ffff,US
2603:1056:400::,2603:1056:402:ffff:ffff:ffff:ffff:ffff,BR
2603:1056:403::,2603:1056:40f:ffff:ffff:ffff:ffff:ffff,US
2603:1056:410::,2603:1056:41f:ffff:ffff:ffff:ffff:ffff,BR
2603:1056:420::,2603:1056:5ff:ffff:ffff:ffff:ffff:ffff,US
-2603:1056:600::,2603:1056:600:ffff:ffff:ffff:ffff:ffff,CL
-2603:1056:601::,2603:1058:f:ffff:ffff:ffff:ffff:ffff,US
+2603:1056:600::,2603:1056:601:ffff:ffff:ffff:ffff:ffff,CL
+2603:1056:602::,2603:1058:f:ffff:ffff:ffff:ffff:ffff,US
2603:1058:10::,2603:1058:1f:ffff:ffff:ffff:ffff:ffff,CL
2603:1058:20::,2603:1058:ffff:ffff:ffff:ffff:ffff:ffff,US
2603:1059::,2603:1059::ffff:ffff:ffff:ffff:ffff,BR
@@ -9935,6 +10431,7 @@
2603:2000::,2603:30ff:ffff:ffff:ffff:ffff:ffff:ffff,US
2603:4000::,2603:40ff:ffff:ffff:ffff:ffff:ffff:ffff,US
2603:5000::,2603:50ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2603:6000::,2603:60ff: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
@@ -10066,7 +10563,6 @@
2604:4200::,2604:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:4280::,2604:4280:ffff:ffff:ffff:ffff:ffff:ffff,CA
2604:4300::,2604:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
-2604:4380::,2604:4380:ffff:ffff:ffff:ffff:ffff:ffff,GD
2604:4400::,2604:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:4480::,2604:4480:ffff:ffff:ffff:ffff:ffff:ffff,US
2604:4500::,2604:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -10965,6 +11461,7 @@
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
@@ -11865,36 +12362,69 @@
2607:bf00::,2607:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:bf80::,2607:bf80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:c000::,2607:c000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:c080::,2607:c080:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:c100::,2607:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c180::,2607:c180:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:c200::,2607:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c280::,2607:c280:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:c300::,2607:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c380::,2607:c380:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:c400::,2607:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c480::,2607:c480:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:c500::,2607:c500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c580::,2607:c580:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:c600::,2607:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c680::,2607:c680:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:c700::,2607:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c780::,2607:c780:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:c800::,2607:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c880::,2607:c880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c980::,2607:c980:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:ca00::,2607:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ca80::,2607:ca80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:cb00::,2607:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cb80::,2607:cb80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:cc00::,2607:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cc80::,2607:cc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:cd00::,2607:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cd80::,2607:cd80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:ce00::,2607:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ce80::,2607:ce80:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:cf00::,2607:cf03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cf80::,2607:cf80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d000::,2607:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d080::,2607:d080:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d100::,2607:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d180::,2607:d180:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d200::,2607:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d280::,2607:d280:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d300::,2607:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d380::,2607:d380:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:d400::,2607:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d480::,2607:d480:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d500::,2607:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:d580::,2607:d580:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d600::,2607:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d680::,2607:d680:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d700::,2607:d700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:d780::,2607:d780:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:d800::,2607:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d880::,2607:d880:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:d900::,2607:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d980::,2607:d980:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:da00::,2607:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:da80::,2607:da80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:db80::,2607:db80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:dc00::,2607:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:dc80::,2607:dc80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:dd00::,2607:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:dd80::,2607:dd80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:de00::,2607:de00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:de80::,2607:de80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:df00::,2607:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:df80::,2607:df80:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:e000::,2607:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e080::,2607:e080:ffff:ffff:ffff:ffff:ffff:ffff,CA
2607:e100::,2607:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:e200::,2607:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
2607:e300::,2607:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
@@ -12632,7 +13162,9 @@
2620:0:1052::,2620::1052:7fff:ffff:ffff:ffff:ffff,IE
2620:0:1052:8000::,2620::1052:ffff:ffff:ffff:ffff:ffff,US
2620:0:1053::,2620::1053:7fff:ffff:ffff:ffff:ffff,FR
-2620:0:1053:8000::,2620::105e:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1053:8000::,2620::1054:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1055::,2620::1055:ffff:ffff:ffff:ffff:ffff,BE
+2620:0:1056::,2620::105e:ffff:ffff:ffff:ffff:ffff,US
2620:0:105f::,2620::105f:ffff:ffff:ffff:ffff:ffff,CH
2620:0:1060::,2620::1068:ffff:ffff:ffff:ffff:ffff,US
2620:0:1069::,2620::1069:7fff:ffff:ffff:ffff:ffff,PL
@@ -12814,9 +13346,7 @@
2620:b::,2620:b::ffff:ffff:ffff:ffff:ffff,US
2620:b:2000::,2620:b:2000:ffff:ffff:ffff:ffff:ffff,US
2620:b:4000::,2620:b:4000:ffff:ffff:ffff:ffff:ffff,US
-2620:b:6000::,2620:b:6000:ffff:ffff:ffff:ffff:ffff,US
2620:b:8000::,2620:b:8000:ffff:ffff:ffff:ffff:ffff,US
-2620:b:a000::,2620:b:a000:ffff:ffff:ffff:ffff:ffff,US
2620:b:c000::,2620:b:c000:ffff:ffff:ffff:ffff:ffff,US
2620:b:e000::,2620:b:e000:ffff:ffff:ffff:ffff:ffff,CA
2620:c::,2620:c:f:ffff:ffff:ffff:ffff:ffff,US
@@ -12826,14 +13356,23 @@
2620:c:8000::,2620:c:8000:ffff:ffff:ffff:ffff:ffff,US
2620:c:a000::,2620:c:a000:ffff:ffff:ffff:ffff:ffff,US
2620:c:c000::,2620:c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:c:e000::,2620:c:e000:ffff:ffff:ffff:ffff:ffff,US
2620:d::,2620:d::ffff:ffff:ffff:ffff:ffff,US
+2620:d:2000::,2620:d:2000:ffff:ffff:ffff:ffff:ffff,US
2620:d:4000::,2620:d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:6000::,2620:d:6000:ffff:ffff:ffff:ffff:ffff,US
2620:d:8000::,2620:d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:a000::,2620:d:a000:ffff:ffff:ffff:ffff:ffff,US
2620:d:c000::,2620:d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:e000::,2620:d:e000:ffff:ffff:ffff:ffff:ffff,US
2620:e::,2620:e::ffff:ffff:ffff:ffff:ffff,US
+2620:e:2000::,2620:e:2000:ffff:ffff:ffff:ffff:ffff,US
2620:e:4000::,2620:e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:6000::,2620:e:6000:ffff:ffff:ffff:ffff:ffff,US
2620:e:8000::,2620:e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:a000::,2620:e:a000:ffff:ffff:ffff:ffff:ffff,US
2620:e:c000::,2620:e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:e000::,2620:e:e000:ffff:ffff:ffff:ffff:ffff,US
2620:f::,2620:f:f:ffff:ffff:ffff:ffff:ffff,US
2620:f:4000::,2620:f:4000:ffff:ffff:ffff:ffff:ffff,US
2620:f:8000::,2620:f:8000:ffff:ffff:ffff:ffff:ffff,US
@@ -13245,7 +13784,6 @@
2620:78:8000::,2620:78:8000:ffff:ffff:ffff:ffff:ffff,US
2620:78:c000::,2620:78:c000:ffff:ffff:ffff:ffff:ffff,CA
2620:79::,2620:79:f:ffff:ffff:ffff:ffff:ffff,US
-2620:79:4000::,2620:79:4000:ffff:ffff:ffff:ffff:ffff,US
2620:79:8000::,2620:79:8000:ffff:ffff:ffff:ffff:ffff,US
2620:79:c000::,2620:79:c000:ffff:ffff:ffff:ffff:ffff,US
2620:7a::,2620:7a::ffff:ffff:ffff:ffff:ffff,US
@@ -13310,7 +13848,6 @@
2620:88:8000::,2620:88:800f:ffff:ffff:ffff:ffff:ffff,US
2620:88:c000::,2620:88:c000:ffff:ffff:ffff:ffff:ffff,US
2620:89::,2620:89::ffff:ffff:ffff:ffff:ffff,US
-2620:89:4000::,2620:89:4000:ffff:ffff:ffff:ffff:ffff,US
2620:89:8000::,2620:89:8000:ffff:ffff:ffff:ffff:ffff,US
2620:89:c000::,2620:89:c000:ffff:ffff:ffff:ffff:ffff,US
2620:8a::,2620:8a::ffff:ffff:ffff:ffff:ffff,US
@@ -13888,7 +14425,9 @@
2620:107:1000::,2620:107:100f:ffff:ffff:ffff:ffff:ffff,US
2620:107:2000::,2620:107:200f:ffff:ffff:ffff:ffff:ffff,US
2620:107:3000::,2620:107:300f:ffff:ffff:ffff:ffff:ffff,US
-2620:107:4000::,2620:107:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:4000::,2620:107:4000:77ff:ffff:ffff:ffff:ffff,US
+2620:107:4000:7800::,2620:107:4000:78ff:ffff:ffff:ffff:ffff,CA
+2620:107:4000:7900::,2620:107:400f:ffff:ffff:ffff:ffff:ffff,US
2620:107:5000::,2620:107:50ff:ffff:ffff:ffff:ffff:ffff,US
2620:107:6000::,2620:107:600f:ffff:ffff:ffff:ffff:ffff,US
2620:107:7000::,2620:107:700f:ffff:ffff:ffff:ffff:ffff,US
@@ -14467,6 +15006,22 @@
2620:12b::,2620:12b:f:ffff:ffff:ffff:ffff:ffff,US
2620:12b:1000::,2620:12b:10ff:ffff:ffff:ffff:ffff:ffff,US
2620:12b:2000::,2620:12b:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:3000::,2620:12b:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:4000::,2620:12b:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:5000::,2620:12b:50ff:ffff:ffff:ffff:ffff:ffff,CA
+2620:12b:6000::,2620:12b:600f:ffff:ffff:ffff:ffff:ffff,CA
+2620:12b:7000::,2620:12b:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:8000::,2620:12b:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:9000::,2620:12b:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:a000::,2620:12b:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:b000::,2620:12b:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:c000::,2620:12b:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:d000::,2620:12b:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:e000::,2620:12b:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12b:f000::,2620:12b:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:12c::,2620:12c:f:ffff:ffff:ffff:ffff:ffff,US
+2620:12c:1000::,2620:12c:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:12c:2000::,2620:12c:20ff:ffff:ffff:ffff:ffff:ffff,US
2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US
2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US
2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US
@@ -14542,6 +15097,7 @@
2620:1dc::,2620:1dc:fff:ffff:ffff:ffff:ffff:ffff,US
2620:1dd::,2620:1dd:fff:ffff:ffff:ffff:ffff:ffff,CA
2620:1de::,2620:1de:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:1df::,2620:1df: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
@@ -14856,6 +15412,7 @@
2801:11:1000::,2801:11:1000:ffff:ffff:ffff:ffff:ffff,PY
2801:11:2000::,2801:11:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:11:4000::,2801:11:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11:5000::,2801:11:5000:ffff:ffff:ffff:ffff:ffff,CO
2801:11:6000::,2801:11:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:11:8000::,2801:11:8000:ffff:ffff:ffff:ffff:ffff,CO
2801:11:9000::,2801:11:9000:ffff:ffff:ffff:ffff:ffff,CO
@@ -14876,6 +15433,7 @@
2801:13:1000::,2801:13:1000:ffff:ffff:ffff:ffff:ffff,AR
2801:13:2000::,2801:13:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:13:4000::,2801:13:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:13:5000::,2801:13:5000:ffff:ffff:ffff:ffff:ffff,AR
2801:13:6000::,2801:13:6000:ffff:ffff:ffff:ffff:ffff,GT
2801:13:8000::,2801:13:8000:ffff:ffff:ffff:ffff:ffff,SV
2801:13:9000::,2801:13:9000:ffff:ffff:ffff:ffff:ffff,AR
@@ -14897,6 +15455,7 @@
2801:15:1000::,2801:15:1000:ffff:ffff:ffff:ffff:ffff,SV
2801:15:2000::,2801:15:2000:ffff:ffff:ffff:ffff:ffff,CR
2801:15:4000::,2801:15:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:15:5000::,2801:15:5000:ffff:ffff:ffff:ffff:ffff,CO
2801:15:6000::,2801:15:6000:ffff:ffff:ffff:ffff:ffff,SV
2801:15:8000::,2801:15:8000:ffff:ffff:ffff:ffff:ffff,CR
2801:15:9000::,2801:15:9000:ffff:ffff:ffff:ffff:ffff,AR
@@ -14908,6 +15467,7 @@
2801:16:1000::,2801:16:1000:ffff:ffff:ffff:ffff:ffff,AR
2801:16:2000::,2801:16:2000:ffff:ffff:ffff:ffff:ffff,HN
2801:16:4000::,2801:16:4000:ffff:ffff:ffff:ffff:ffff,AR
+2801:16:5000::,2801:16:5000:ffff:ffff:ffff:ffff:ffff,CO
2801:16:6000::,2801:16:6000:ffff:ffff:ffff:ffff:ffff,AR
2801:16:8000::,2801:16:8000:ffff:ffff:ffff:ffff:ffff,CO
2801:16:9000::,2801:16:9000:ffff:ffff:ffff:ffff:ffff,BO
@@ -14929,7 +15489,7 @@
2801:18:5000::,2801:18:5000: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:9000::,2801:18:9000:ffff:ffff:ffff:ffff:ffff,CO
+2801:18:9000::,2801:18:900f:ffff:ffff:ffff:ffff:ffff,CO
2801:18:a000::,2801:18:a000:ffff:ffff:ffff:ffff:ffff,BO
2801:18:c000::,2801:18:c000:ffff:ffff:ffff:ffff:ffff,AR
2801:18:e000::,2801:18:e000:ffff:ffff:ffff:ffff:ffff,DO
@@ -14937,6 +15497,7 @@
2801:19:1000::,2801:19:1000:ffff:ffff:ffff:ffff:ffff,PA
2801:19:2000::,2801:19:2000:ffff:ffff:ffff:ffff:ffff,CL
2801:19:4000::,2801:19:4000:ffff:ffff:ffff:ffff:ffff,PY
+2801:19:5000::,2801:19:5000:ffff:ffff:ffff:ffff:ffff,CO
2801:19:6000::,2801:19:6000:ffff:ffff:ffff:ffff:ffff,CW
2801:19:8000::,2801:19:8000:ffff:ffff:ffff:ffff:ffff,EC
2801:19:9000::,2801:19:9000:ffff:ffff:ffff:ffff:ffff,AR
@@ -14958,6 +15519,7 @@
2801:1b:1000::,2801:1b:1000:ffff:ffff:ffff:ffff:ffff,CL
2801:1b:2000::,2801:1b:2000:ffff:ffff:ffff:ffff:ffff,UY
2801:1b:4000::,2801:1b:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1b:5000::,2801:1b:5000:ffff:ffff:ffff:ffff:ffff,AR
2801:1b:6000::,2801:1b:6000:ffff:ffff:ffff:ffff:ffff,CL
2801:1b:8000::,2801:1b:8000:ffff:ffff:ffff:ffff:ffff,CL
2801:1b:9000::,2801:1b:9000:ffff:ffff:ffff:ffff:ffff,CL
@@ -14978,6 +15540,7 @@
2801:1d:1000::,2801:1d:1000:ffff:ffff:ffff:ffff:ffff,AR
2801:1d:2000::,2801:1d:2000:ffff:ffff:ffff:ffff:ffff,GT
2801:1d:4000::,2801:1d:4000:ffff:ffff:ffff:ffff:ffff,TT
+2801:1d:5000::,2801:1d:5000:ffff:ffff:ffff:ffff:ffff,AR
2801:1d:6000::,2801:1d:6000:ffff:ffff:ffff:ffff:ffff,NI
2801:1d:8000::,2801:1d:8000:ffff:ffff:ffff:ffff:ffff,AR
2801:1d:9000::,2801:1d:9000:ffff:ffff:ffff:ffff:ffff,CO
@@ -14988,6 +15551,7 @@
2801:1e:1000::,2801:1e:1000:ffff:ffff:ffff:ffff:ffff,AR
2801:1e:2000::,2801:1e:2000:ffff:ffff:ffff:ffff:ffff,AR
2801:1e:4000::,2801:1e:4007:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e:5000::,2801:1e:5000:ffff:ffff:ffff:ffff:ffff,EC
2801:1e:6000::,2801:1e:6000:ffff:ffff:ffff:ffff:ffff,CO
2801:1e:8000::,2801:1e:8000:ffff:ffff:ffff:ffff:ffff,CR
2801:1e:9000::,2801:1e:9000:ffff:ffff:ffff:ffff:ffff,SV
@@ -15233,7 +15797,6 @@
2801:80:f20::,2801:80:f20:ffff:ffff:ffff:ffff:ffff,BR
2801:80:f30::,2801:80:f30:ffff:ffff:ffff:ffff:ffff,BR
2801:80:f40::,2801:80:f4f:ffff:ffff:ffff:ffff:ffff,BR
-2801:80:f60::,2801:80:f60:ffff:ffff:ffff:ffff:ffff,BR
2801:80:f70::,2801:80:f70:ffff:ffff:ffff:ffff:ffff,BR
2801:80:f80::,2801:80:f8f:ffff:ffff:ffff:ffff:ffff,BR
2801:80:fa0::,2801:80:faf:ffff:ffff:ffff:ffff:ffff,BR
@@ -15316,6 +15879,12 @@
2801:80:1a70::,2801:80:1a70:ffff:ffff:ffff:ffff:ffff,BR
2801:80:1a80::,2801:80:1a80:ffff:ffff:ffff:ffff:ffff,BR
2801:80:1a90::,2801:80:1a90:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1aa0::,2801:80:1aa0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1ab0::,2801:80:1ab0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1ac0::,2801:80:1ac0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1ad0::,2801:80:1ad1:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1ae0::,2801:80:1ae0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1af0::,2801:80:1af0: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
@@ -15352,6 +15921,7 @@
2801:c4:10::,2801:c4:10:ffff:ffff:ffff:ffff:ffff,MX
2801:c4:12::,2801:c4:12:ffff:ffff:ffff:ffff:ffff,MX
2801:c4:14::,2801:c4:15:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:17::,2801:c4:17:ffff:ffff:ffff:ffff:ffff,MX
2801:c4:20::,2801:c4:20:ffff:ffff:ffff:ffff:ffff,MX
2801:c4:30::,2801:c4:30:ffff:ffff:ffff:ffff:ffff,MX
2801:c4:40::,2801:c4:40:ffff:ffff:ffff:ffff:ffff,MX
@@ -15368,6 +15938,7 @@
2801:f0:20::,2801:f0:20:ffff:ffff:ffff:ffff:ffff,MX
2801:f0:28::,2801:f0:28:ffff:ffff:ffff:ffff:ffff,MX
2801:100::,2801:100:ff:ffff:ffff:ffff:ffff:ffff,AR
+2801:104::,2801:104:ff:ffff:ffff:ffff:ffff:ffff,BO
2801:108::,2801:108:f:ffff:ffff:ffff:ffff:ffff,CO
2801:110::,2801:110:1fff:ffff:ffff:ffff:ffff:ffff,CO
2801:118::,2801:118:ff:ffff:ffff:ffff:ffff:ffff,AR
@@ -15382,7 +15953,9 @@
2801:160::,2801:160:ff:ffff:ffff:ffff:ffff:ffff,CO
2801:168::,2801:168:ff:ffff:ffff:ffff:ffff:ffff,AR
2801:170::,2801:170:fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:178::,2801:178:1fff:ffff:ffff:ffff:ffff:ffff,CO
2801:180::,2801:180:f:ffff:ffff:ffff:ffff:ffff,PA
+2801:184::,2801:184:f:ffff:ffff:ffff:ffff:ffff,DO
2801:188::,2801:188:ff:ffff:ffff:ffff:ffff:ffff,AR
2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO
2801:198::,2801:198:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -15397,6 +15970,7 @@
2801:1e0::,2801:1e0:7f:ffff:ffff:ffff:ffff:ffff,AR
2801:1e8::,2801:1e8:ff:ffff:ffff:ffff:ffff:ffff,AR
2801:1f0::,2801:1f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:1f8::,2801:1f8:f:ffff:ffff:ffff:ffff:ffff,CO
2802::,2802:2:9fff:ffff:ffff:ffff:ffff:ffff,CO
2802:2:a000::,2802:2:afff:ffff:ffff:ffff:ffff:ffff,BR
2802:2:b000::,2802:2:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -15426,6 +16000,7 @@
2803:400::,2803:400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:440::,2803:440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:480::,2803:480:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:4c0::,2803:4c0:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:500::,2803:500:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:540::,2803:540:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:580::,2803:580:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -15451,6 +16026,7 @@
2803:c00::,2803:c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:c40::,2803:c40:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:c80::,2803:c80:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:cc0::,2803:cc0:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:d00::,2803:d00:ffff:ffff:ffff:ffff:ffff:ffff,GY
2803:d40::,2803:d40:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:d80::,2803:d87:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -15479,6 +16055,7 @@
2803:1380::,2803:1380:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:1400::,2803:1400:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:1440::,2803:1440:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:14c0::,2803:14c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -15486,7 +16063,7 @@
2803:1640::,2803:1640:ffff:ffff:ffff:ffff:ffff:ffff,NI
2803:1680::,2803:1680:ffff:ffff:ffff:ffff:ffff:ffff,GF
2803:1700::,2803:1700:ffff:ffff:ffff:ffff:ffff:ffff,AR
-2803:1740::,2803:1740:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:1740::,2803:1740:ffff:ffff:ffff:ffff:ffff:ffff,GF
2803:1780::,2803:1780:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:1800::,2803:1800:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:1840::,2803:1840:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -15503,6 +16080,7 @@
2803:1b80::,2803:1b80:ffff:ffff:ffff:ffff:ffff:ffff,TT
2803:1c40::,2803:1c40:ffff:ffff:ffff:ffff:ffff:ffff,NI
2803:1c80::,2803:1c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1cc0::,2803:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:1d00::,2803:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:1d40::,2803:1d40:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:1d80::,2803:1d80:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -15528,6 +16106,7 @@
2803:2400::,2803:2400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2440::,2803:2440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2480::,2803:2480:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:24c0::,2803:24c0:ffff:ffff:ffff:ffff:ffff:ffff,CO
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
@@ -15553,6 +16132,7 @@
2803:2c00::,2803:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2c40::,2803:2c40:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:2c80::,2803:2c80:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:2cc0::,2803:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:2d00::,2803:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:2d40::,2803:2d40:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:2d80::,2803:2d80:ffff:ffff:ffff:ffff:ffff:ffff,PA
@@ -15577,6 +16157,7 @@
2803:3400::,2803:3400:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:3440::,2803:3440:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3480::,2803:3480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:34c0::,2803:34c0:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -15602,6 +16183,7 @@
2803:3c00::,2803:3c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:3c40::,2803:3c40:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:3c80::,2803:3c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:3cc0::,2803:3cc0:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:3d00::,2803:3d00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:3d40::,2803:3d40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:3d80::,2803:3d80:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -15627,6 +16209,7 @@
2803:4400::,2803:4400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4440::,2803:4440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4480::,2803:4480:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:44c0::,2803:44c0:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:4500::,2803:4500:ffff:ffff:ffff:ffff:ffff:ffff,CW
2803:4540::,2803:4540:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:4580::,2803:4580:ffff:ffff:ffff:ffff:ffff:ffff,CR
@@ -15651,6 +16234,7 @@
2803:4c00::,2803:4c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:4c40::,2803:4c40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4c80::,2803:4c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4cc0::,2803:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4d00::,2803:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:4d40::,2803:4d40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:4d80::,2803:4d80:ffff:ffff:ffff:ffff:ffff:ffff,CW
@@ -15676,6 +16260,7 @@
2803:5400::,2803:5400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5440::,2803:5440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:5480::,2803:5480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:54c0::,2803:54c0:ffff:ffff:ffff:ffff:ffff:ffff,GT
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
@@ -15700,6 +16285,7 @@
2803:5c00::,2803:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:5c40::,2803:5c40:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:5c80::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:5cc0::,2803:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:5d00::,2803:5d00:ffff:ffff:ffff:ffff:ffff:ffff,SV
2803:5d40::,2803:5d40:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:5d80::,2803:5d80:ffff:ffff:ffff:ffff:ffff:ffff,BZ
@@ -15724,6 +16310,7 @@
2803:6400::,2803:6400:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:6440::,2803:6440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6480::,2803:6480:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:64c0::,2803:64c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
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
@@ -15748,6 +16335,7 @@
2803:6c00::,2803:6c00:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:6c40::,2803:6c40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6c80::,2803:6c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6cc0::,2803:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,SV
2803:6d00::,2803:6d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6d40::,2803:6d40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:6d80::,2803:6d80:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -15773,6 +16361,7 @@
2803:7400::,2803:7400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7440::,2803:7440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7480::,2803:7480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:74c0::,2803:74c0:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:7500::,2803:7500:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:7540::,2803:7540:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7580::,2803:7580:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -15798,6 +16387,7 @@
2803:7c00::,2803:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:7c40::,2803:7c40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7c80::,2803:7c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:7cc0::,2803:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:7d00::,2803:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7d40::,2803:7d40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:7d80::,2803:7d80:ffff:ffff:ffff:ffff:ffff:ffff,PY
@@ -15823,6 +16413,7 @@
2803:8400::,2803:8400:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:8440::,2803:8440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8480::,2803:8480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:84c0::,2803:84c0:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:8500::,2803:8500:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8540::,2803:8540:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:8580::,2803:8580:ffff:ffff:ffff:ffff:ffff:ffff,CO
@@ -15847,6 +16438,7 @@
2803:8c00::,2803:8c00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:8c40::,2803:8c40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8c80::,2803:8c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:8cc0::,2803:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8d00::,2803:8d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:8d43::,2803:8d43:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:8d80::,2803:8d80:ffff:ffff:ffff:ffff:ffff:ffff,UY
@@ -15872,6 +16464,7 @@
2803:9400::,2803:9400:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:9440::,2803:9440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9480::,2803:9480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:94c0::,2803:94c0: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
@@ -15896,6 +16489,7 @@
2803:9c00::,2803:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9c40::,2803:9c40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:9c80::,2803:9c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9cc0::,2803:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:9d00::,2803:9d00:ffff:ffff:ffff:ffff:ffff:ffff,SV
2803:9d40::,2803:9d40:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:9d80::,2803:9d80:ffff:ffff:ffff:ffff:ffff:ffff,SV
@@ -15920,6 +16514,7 @@
2803:a400::,2803:a400:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:a440::,2803:a440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a4c0::,2803:a4c0: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
@@ -15945,6 +16540,7 @@
2803:ac00::,2803:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:ac40::,2803:ac40:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:ac80::,2803:ac80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:acc0::,2803:acc0:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:ad00::,2803:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:ad40::,2803:ad40:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:ad80::,2803:ad80:ffff:ffff:ffff:ffff:ffff:ffff,PA
@@ -15969,6 +16565,7 @@
2803:b400::,2803:b400:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:b440::,2803:b440:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:b480::,2803:b480:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:b4c0::,2803:b4c0:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:b500::,2803:b500:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:b540::,2803:b540:ffff:ffff:ffff:ffff:ffff:ffff,BO
2803:b580::,2803:b580:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -15993,6 +16590,7 @@
2803:bc00::,2803:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:bc40::,2803:bc40:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:bc80::,2803:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:bcc0::,2803:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:bd00::,2803:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:bd40::,2803:bd40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:bd80::,2803:bd80:ffff:ffff:ffff:ffff:ffff:ffff,PA
@@ -16018,6 +16616,7 @@
2803:c400::,2803:c400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:c440::,2803:c440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:c480::,2803:c480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c4c0::,2803:c4c0:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -16043,6 +16642,7 @@
2803:cc00::,2803:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:cc40::,2803:cc40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:cc80::,2803:cc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ccc0::,2803:ccc0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:cd00::,2803:cd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:cd40::,2803:cd40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:cd80::,2803:cd80:ffff:ffff:ffff:ffff:ffff:ffff,TT
@@ -16069,6 +16669,7 @@
2803:d400::,2803:d400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:d440::,2803:d440:ffff:ffff:ffff:ffff:ffff:ffff,VE
2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:d4c0::,2803:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,CO
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
@@ -16094,6 +16695,7 @@
2803:dc00::,2803:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
2803:dc40::,2803:dc40:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:dc80::,2803:dc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:dcc0::,2803:dcc0:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:dd00::,2803:dd00:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:dd40::,2803:dd40:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:dd80::,2803:dd80:ffff:ffff:ffff:ffff:ffff:ffff,VE
@@ -16119,6 +16721,7 @@
2803:e400::,2803:e400:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e440::,2803:e440:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:e480::,2803:e480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e4c0::,2803:e4c0:ffff:ffff:ffff:ffff:ffff:ffff,CL
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
@@ -16144,6 +16747,7 @@
2803:ec00::,2803:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:ec40::,2803:ec40:ffff:ffff:ffff:ffff:ffff:ffff,EC
2803:ec80::,2803:ec80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ecc0::,2803:ecc0:ffff:ffff:ffff:ffff:ffff:ffff,CL
2803:ed00::,2803:ed00:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:ed40::,2803:ed40:ffff:ffff:ffff:ffff:ffff:ffff,PA
2803:ed80::,2803:ed80:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -16169,6 +16773,7 @@
2803:f400::,2803:f400:ffff:ffff:ffff:ffff:ffff:ffff,HN
2803:f440::,2803:f440:ffff:ffff:ffff:ffff:ffff:ffff,PY
2803:f480::,2803:f480:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:f4c0::,2803:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
2803:f500::,2803:f500:ffff:ffff:ffff:ffff:ffff:ffff,CW
2803:f540::,2803:f540:ffff:ffff:ffff:ffff:ffff:ffff,PE
2803:f580::,2803:f580:ffff:ffff:ffff:ffff:ffff:ffff,AR
@@ -16180,6 +16785,7 @@
2803:f780::,2803:f780:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:f800::,2803:f800:ffff:ffff:ffff:ffff:ffff:ffff,CR
2803:f840::,2803:f840:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:f8c0::,2803:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,DO
2803:f900::,2803:f900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
2803:f940::,2803:f940:ffff:ffff:ffff:ffff:ffff:ffff,SX
2803:f980::,2803:f980:ffff:ffff:ffff:ffff:ffff:ffff,CL
@@ -17366,7 +17972,6 @@
2804:1324::,2804:1324:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1328::,2804:1328:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:132c::,2804:132c:ffff:ffff:ffff:ffff:ffff:ffff,BR
-2804:1330::,2804:1330:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1334::,2804:1334:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:1338::,2804:1338:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:133c::,2804:133c:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -17586,7 +18191,6 @@
2804:16a0::,2804:16a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:16a4::,2804:16a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:16a8::,2804:16a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
-2804:16ac::,2804:16ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:16b0::,2804:16b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:16b4::,2804:16b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:16b8::,2804:16b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
@@ -19501,6 +20105,124 @@
2804:3550::,2804:3550:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:3554::,2804:3554:ffff:ffff:ffff:ffff:ffff:ffff,BR
2804:3558::,2804:3558:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:355c::,2804:355c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3560::,2804:3560:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3564::,2804:3564:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3568::,2804:3568:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:356c::,2804:356c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3570::,2804:3570:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3574::,2804:3574:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3578::,2804:3578:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:357c::,2804:357c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3580::,2804:3580:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3584::,2804:3584:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3588::,2804:3588:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:358c::,2804:358c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3590::,2804:3590:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3594::,2804:3594:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3598::,2804:3598:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:359c::,2804:359c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35a0::,2804:35a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35a4::,2804:35a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35a8::,2804:35a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35ac::,2804:35ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35b0::,2804:35b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35b4::,2804:35b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35b8::,2804:35b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35bc::,2804:35bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35c0::,2804:35c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35c4::,2804:35c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35c8::,2804:35c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35cc::,2804:35cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35d0::,2804:35d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35d4::,2804:35d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35d8::,2804:35d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35dc::,2804:35dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35e0::,2804:35e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35e4::,2804:35e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35e8::,2804:35e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35ec::,2804:35ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35f0::,2804:35f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35f4::,2804:35f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35f8::,2804:35f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35fc::,2804:35fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3600::,2804:3600:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3604::,2804:3604:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3608::,2804:3608:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:360c::,2804:360c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3610::,2804:3610:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3614::,2804:3614:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3618::,2804:3618:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:361c::,2804:361c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3620::,2804:3620:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3624::,2804:3624:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3628::,2804:3628:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:362c::,2804:362c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3630::,2804:3630:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3634::,2804:3634:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3638::,2804:3638:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:363c::,2804:363c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3640::,2804:3640:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3644::,2804:3644:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3648::,2804:3648:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:364c::,2804:364c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3650::,2804:3650:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3654::,2804:3654:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3658::,2804:3658:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:365c::,2804:365c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3660::,2804:3660:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3664::,2804:3664:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3668::,2804:3668:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:366c::,2804:366c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3670::,2804:3670:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3674::,2804:3674:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3678::,2804:3678:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:367c::,2804:367c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3680::,2804:3680:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3684::,2804:3684:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3688::,2804:3688:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:368c::,2804:368c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3690::,2804:3690:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3694::,2804:3694:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3698::,2804:3698:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:369c::,2804:369c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36a0::,2804:36a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36a4::,2804:36a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36a8::,2804:36a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36ac::,2804:36ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36b0::,2804:36b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36b4::,2804:36b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36b8::,2804:36b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36bc::,2804:36bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36c0::,2804:36c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36c4::,2804:36c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36c8::,2804:36c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36cc::,2804:36cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36d0::,2804:36d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36d4::,2804:36d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36d8::,2804:36d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36dc::,2804:36dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36e0::,2804:36e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36e4::,2804:36e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36e8::,2804:36e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36ec::,2804:36ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36f0::,2804:36f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36f4::,2804:36f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36f8::,2804:36f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36fc::,2804:36fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3700::,2804:3700:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3704::,2804:3704:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3708::,2804:3708:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:370c::,2804:370c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3710::,2804:3710:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3714::,2804:3714:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3718::,2804:3718:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:371c::,2804:371c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3720::,2804:3720:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3724::,2804:3724:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3728::,2804:3728:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:372c::,2804:372c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3730::,2804:3730: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:220:ffff:ffff:ffff:ffff:ffff:ffff,MX
@@ -19511,7 +20233,7 @@
2806:250::,2806:250:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:260::,2806:260:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:270::,2806:270:ffff:ffff:ffff:ffff:ffff:ffff,MX
-2806:280::,2806:283:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:280::,2806:286:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:290::,2806:290:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:2a0::,2806:2a0:ffff:ffff:ffff:ffff:ffff:ffff,MX
2806:2b0::,2806:2b0:ffff:ffff:ffff:ffff:ffff:ffff,MX
@@ -19576,7 +20298,7 @@
2a00:d78::,2a00:d78:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:d80::,2a00:d80:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a00:d88::,2a00:d8f:ffff:ffff:ffff:ffff:ffff:ffff,AT
-2a00:d90::,2a00:d90:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:d90::,2a00:d97:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:d98::,2a00:d98:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:da8::,2a00:da9:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:db0::,2a00:db0:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -19847,7 +20569,6 @@
2a00:1630::,2a00:1637:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a00:1638::,2a00:1638:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a00:1640::,2a00:1640:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a00:1648::,2a00:1648:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:1650::,2a00:1650:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a00:1660::,2a00:1660:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a00:1668::,2a00:1668:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -20738,7 +21459,6 @@
2a00:87a0::,2a00:87a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a00:87c0::,2a00:87c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a00:87e0::,2a00:87e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a00:8800::,2a00:8800:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:8820::,2a00:8820:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a00:8840::,2a00:8840:ffff:ffff:ffff:ffff:ffff:ffff,UZ
2a00:8880::,2a00:8880:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -20901,7 +21621,6 @@
2a00:9be0::,2a00:9be0:ffff:ffff:ffff:ffff:ffff:ffff,AL
2a00:9c00::,2a00:9c00:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a00:9c20::,2a00:9c20:ffff:ffff:ffff:ffff:ffff:ffff,BE
-2a00:9c40::,2a00:9c40:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:9c60::,2a00:9c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:9c80::,2a00:9c80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a00:9ca0::,2a00:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
@@ -21381,7 +22100,7 @@
2a00:d840::,2a00:d840:ffff:ffff:ffff:ffff:ffff:ffff,SI
2a00:d860::,2a00:d860:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a00:d880::,2a00:d880:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a00:d8a0::,2a00:d8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d8a0::,2a00:d8a7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a00:d8c0::,2a00:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:d8e0::,2a00:d8e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a00:d900::,2a00:d900:ffff:ffff:ffff:ffff:ffff:ffff,AT
@@ -21550,7 +22269,7 @@
2a00:ee40::,2a00:ee40:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a00:ee60::,2a00:ee60:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a00:ee80::,2a00:ee80:ffff:ffff:ffff:ffff:ffff:ffff,LB
-2a00:eea0::,2a00:eea0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:eea0::,2a00:eea7: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
@@ -21689,8 +22408,7 @@
2a00:ffc0::,2a00:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a00:ffe0::,2a00:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a01::,2a01::ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a01:8::,2a01:8:ffff:ffff:ffff:ffff:ffff:ffff,PT
-2a01:10::,2a01:10:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:8::,2a01:17:ffff:ffff:ffff:ffff:ffff:ffff,PT
2a01:18::,2a01:18:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a01:20::,2a01:20:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:28::,2a01:28:ffff:ffff:ffff:ffff:ffff:ffff,CZ
@@ -21726,7 +22444,11 @@
2a01:f8::,2a01:f8:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a01:100::,2a01:100:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a01:108::,2a01:108:ffff:ffff:ffff:ffff:ffff:ffff,SK
-2a01:110::,2a01:111::c6:3fff:ffff:ffff:ffff,GB
+2a01:110::,2a01:110:9008::ffff:ffff:ffff:ffff,GB
+2a01:110:9008:1::,2a01:110:9008:8:ffff:ffff:ffff:ffff,EE
+2a01:110:9008:9::,2a01:110:a008::ffff:ffff:ffff:ffff,GB
+2a01:110:a008:1::,2a01:110:a008:8:ffff:ffff:ffff:ffff,IE
+2a01:110:a008:9::,2a01:111::c6:3fff:ffff:ffff:ffff,GB
2a01:111:0:c6:4000::,2a01:111::c6:7fff:ffff:ffff:ffff,IE
2a01:111:0:c6:8000::,2a01:111::cb:bfff:ffff:ffff:ffff,GB
2a01:111:0:cb:c000::,2a01:111::cb:ffff:ffff:ffff:ffff,US
@@ -21888,6 +22610,7 @@
2a01:3e0:3200::,2a01:3e0:3200:ff:ffff:ffff:ffff:ffff,RO
2a01:3e0:3300::,2a01:3e0:3300:ff:ffff:ffff:ffff:ffff,BG
2a01:3e0:3400::,2a01:3e0:3400:ff:ffff:ffff:ffff:ffff,HU
+2a01:3e0:3500::,2a01:3e0:3500:ff:ffff:ffff:ffff:ffff,LU
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
@@ -21938,7 +22661,15 @@
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,US
+2a01:578::,2a01:578::6fff:ffff:ffff:ffff:ffff,US
+2a01:578:0:7000::,2a01:578::70ff:ffff:ffff:ffff:ffff,IE
+2a01:578:0:7100::,2a01:578::71ff:ffff:ffff:ffff:ffff,DE
+2a01:578:0:7200::,2a01:578::72ff:ffff:ffff:ffff:ffff,GB
+2a01:578:0:7300::,2a01:578:2:ffff:ffff:ffff:ffff:ffff,US
+2a01:578:3::,2a01:578:3::ffff:ffff:ffff:ffff,IE
+2a01:578:3:1::,2a01:578:12:ffff:ffff:ffff:ffff:ffff,US
+2a01:578:13::,2a01:578:13::ffff:ffff:ffff:ffff,DE
+2a01:578:13:1::,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
@@ -22416,7 +23147,7 @@
2a01:7180::,2a01:7180:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a01:71a0::,2a01:71a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:71c0::,2a01:71c1:ffff:ffff:ffff:ffff:ffff:ffff,ES
-2a01:71e0::,2a01:71e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:71e0::,2a01:71e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a01:7200::,2a01:7200:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a01:7220::,2a01:7220:ffff:ffff:ffff:ffff:ffff:ffff,LT
2a01:7240::,2a01:7240:ffff:ffff:ffff:ffff:ffff:ffff,IE
@@ -22850,7 +23581,7 @@
2a01:a7a0::,2a01:a7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a01:a7c0::,2a01:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:a7e0::,2a01:a7e0:ffff:ffff:ffff:ffff:ffff:ffff,FI
-2a01:a800::,2a01:a800:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:a800::,2a01:a807:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a01:a820::,2a01:a820:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:a840::,2a01:a840:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a01:a860::,2a01:a860:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -22885,7 +23616,7 @@
2a01:ac20::,2a01:ac20:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:ac40::,2a01:ac40:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a01:ac60::,2a01:ac60:ffff:ffff:ffff:ffff:ffff:ffff,TR
-2a01:ac80::,2a01:ac80:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:ac80::,2a01:ac87:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a01:aca0::,2a01:aca0:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a01:acc0::,2a01:acc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a01:ace0::,2a01:ace0:ffff:ffff:ffff:ffff:ffff:ffff,ES
@@ -23037,9 +23768,9 @@
2a01:bfa0::,2a01:bfa0:ffff:ffff:ffff:ffff:ffff:ffff,KG
2a01:bfc0::,2a01:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a01:bfe0::,2a01:bfe0:ffff:ffff:ffff:ffff:ffff:ffff,FR
-2a01:c000::,2a01:c844:1092:1600:f830:5237:bdc:ccd0,FR
-2a01:c844:1092:1600:f830:5237:bdc:ccd1,2a01:c844:1092:1600:f830:5237:bdc:ccd1,SK
-2a01:c844:1092:1600:f830:5237:bdc:ccd2,2a01:c844:140a:e00:50e1:6f6d:63d4:31e,FR
+2a01:c000::,2a01:c844:fff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:c844:1000::,2a01:c844:11ff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:c844:1200::,2a01:c844:140a:e00:50e1:6f6d:63d4:31e,FR
2a01:c844:140a:e00:50e1:6f6d:63d4:31f,2a01:c844:140a:e00:50e1:6f6d:63d4:31f,SK
2a01:c844:140a:e00:50e1:6f6d:63d4:320,2a01:dfff:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02::,2a02::ffff:ffff:ffff:ffff:ffff:ffff,LU
@@ -23059,7 +23790,6 @@
2a02:78::,2a02:78:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a02:80::,2a02:87:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a02:88::,2a02:88:ffff:ffff:ffff:ffff:ffff:ffff,EE
-2a02:90::,2a02:97:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a02:98::,2a02:98:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:a0::,2a02:a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a02:a8::,2a02:a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -23143,7 +23873,7 @@
2a02:310::,2a02:310:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a02:318::,2a02:318:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:320::,2a02:320:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a02:328::,2a02:328:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:328::,2a02:32f:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a02:330::,2a02:330:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:338::,2a02:338:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a02:340::,2a02:340:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -23275,7 +24005,7 @@
2a02:750:8::,2a02:750:8:ffff:ffff:ffff:ffff:ffff,US
2a02:750:9::,2a02:757:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a02:758::,2a02:758:ffff:ffff:ffff:ffff:ffff:ffff,AT
-2a02:760::,2a02:760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:760::,2a02:767:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a02:768::,2a02:768:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a02:770::,2a02:770:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a02:778::,2a02:778:ffff:ffff:ffff:ffff:ffff:ffff,DE
@@ -24292,7 +25022,6 @@
2a02:60e0::,2a02:60e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:6100::,2a02:6100:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a02:6120::,2a02:6120:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a02:6140::,2a02:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:6160::,2a02:6160:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a02:6180::,2a02:6180:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a02:61a0::,2a02:61a0:ffff:ffff:ffff:ffff:ffff:ffff,RS
@@ -24918,7 +25647,7 @@
2a03:740::,2a03:740:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:760::,2a03:767:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:780::,2a03:780:ffff:ffff:ffff:ffff:ffff:ffff,SE
-2a03:7a0::,2a03:7a0:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a03:7a0::,2a03:7a7:ffff:ffff:ffff:ffff:ffff:ffff,ME
2a03:7c0::,2a03:7c0:ffff:ffff:ffff:ffff:ffff:ffff,PS
2a03:7e0::,2a03:7e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:800::,2a03:807:ffff:ffff:ffff:ffff:ffff:ffff,FR
@@ -25399,7 +26128,6 @@
2a03:4240::,2a03:4240:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a03:4260::,2a03:4260:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:4280::,2a03:4280:ffff:ffff:ffff:ffff:ffff:ffff,HR
-2a03:42a0::,2a03:42a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a03:42c0::,2a03:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a03:42e0::,2a03:42e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a03:4300::,2a03:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -25490,7 +26218,7 @@
2a03:4ae0::,2a03:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:4b00::,2a03:4b00:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a03:4b20::,2a03:4b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a03:4b40::,2a03:4b40:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:4b40::,2a03:4b47:ffff:ffff:ffff:ffff:ffff:ffff,IQ
2a03:4b60::,2a03:4b60:ffff:ffff:ffff:ffff:ffff:ffff,LB
2a03:4b80::,2a03:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
2a03:4ba0::,2a03:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,BG
@@ -25538,7 +26266,9 @@
2a03:5120::,2a03:5120:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a03:5140::,2a03:5140:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a03:5160::,2a03:5160:ffff:ffff:ffff:ffff:ffff:ffff,TR
-2a03:5180::,2a03:5180:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:5180::,2a03:5180:5:6:ffff:ffff:ffff:ffff,RO
+2a03:5180:5:7::,2a03:5180:5:7::f,GB
+2a03:5180:5:7::10,2a03:5180:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a03:51a0::,2a03:51a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a03:51c0::,2a03:51c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a03:51e0::,2a03:51e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
@@ -27045,7 +27775,9 @@
2a04:5bc0::,2a04:5bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:5c00::,2a04:5c07:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a04:5c40::,2a04:5c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
-2a04:5c80::,2a04:5c87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5c80::,2a04:5c85:3fff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5c85:4000::,2a04:5c85:4fff:ffff:ffff:ffff:ffff:ffff,US
+2a04:5c85:5000::,2a04:5c87:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:5cc0::,2a04:5cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:5d00::,2a04:5d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:5d40::,2a04:5d47:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -27335,7 +28067,6 @@
2a04:a180::,2a04:a187:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:a1c0::,2a04:a1c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a04:a200::,2a04:a207:ffff:ffff:ffff:ffff:ffff:ffff,IT
-2a04:a240::,2a04:a247:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:a280::,2a04:a287:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:a2c0::,2a04:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a04:a300::,2a04:a307:ffff:ffff:ffff:ffff:ffff:ffff,IR
@@ -27346,7 +28077,7 @@
2a04:a440::,2a04:a440:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a04:a450::,2a04:a451:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a04:a460::,2a04:a461:ffff:ffff:ffff:ffff:ffff:ffff,PL
-2a04:a470::,2a04:a471:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a470::,2a04:a471:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a04:a480::,2a04:a487:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a04:a4c0::,2a04:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a04:a500::,2a04:a507:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -27524,7 +28255,7 @@
2a04:cf40::,2a04:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a04:cf80::,2a04:cf87:ffff:ffff:ffff:ffff:ffff:ffff,SA
2a04:cfc0::,2a04:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
-2a04:d000::,2a04:d007:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d000::,2a04:d007:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a04:d040::,2a04:d047:ffff:ffff:ffff:ffff:ffff:ffff,GE
2a04:d080::,2a04:d087:ffff:ffff:ffff:ffff:ffff:ffff,RS
2a04:d0c0::,2a04:d0c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
@@ -27915,7 +28646,6 @@
2a05:3040::,2a05:3047:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a05:3080::,2a05:3087:ffff:ffff:ffff:ffff:ffff:ffff,HU
2a05:30c0::,2a05:30c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
-2a05:3100::,2a05:3107:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a05:3140::,2a05:3147:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:3180::,2a05:3187:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:31c0::,2a05:31c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -27964,7 +28694,6 @@
2a05:3c00::,2a05:3c07:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a05:3c40::,2a05:3c47:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:3c80::,2a05:3c87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
-2a05:3cc0::,2a05:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a05:3d00::,2a05:3d07:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a05:3d40::,2a05:3d47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a05:3d80::,2a05:3d87:ffff:ffff:ffff:ffff:ffff:ffff,CH
@@ -28547,7 +29276,31 @@
2a05:cf40::,2a05:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a05:cf80::,2a05:cf87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:cfc0::,2a05:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
-2a05:d000::,2a05:d07f:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d000::,2a05:d000:3fff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d000:4000::,2a05:d000:40ff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d000:4100::,2a05:d000:bfff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d000:c000::,2a05:d000:c0ff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d000:c100::,2a05:d013:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d014::,2a05:d014:fff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d014:1000::,2a05:d01b:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d01c::,2a05:d01c:fff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d01c:1000::,2a05:d050:403f:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d050:4040::,2a05:d050:404f:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d050:4050::,2a05:d050:407f:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d050:4080::,2a05:d050:408f:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d050:4090::,2a05:d050:40bf:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d050:40c0::,2a05:d050:40cf:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d050:40d0::,2a05:d050:c03f:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d050:c040::,2a05:d050:c04f:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d050:c050::,2a05:d050:c07f:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d050:c080::,2a05:d050:c08f:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d050:c090::,2a05:d050:c0bf:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d050:c0c0::,2a05:d050:c0cf:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d050:c0d0::,2a05:d07c:3fff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d07c:4000::,2a05:d07c:40ff:ffff:ffff:ffff:ffff:ffff,DE
+2a05:d07c:4100::,2a05:d07c:bfff:ffff:ffff:ffff:ffff:ffff,IE
+2a05:d07c:c000::,2a05:d07c:c0ff:ffff:ffff:ffff:ffff:ffff,GB
+2a05:d07c:c100::,2a05:d07f:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a05:d400::,2a05:d407:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:d440::,2a05:d447:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a05:d480::,2a05:d487:ffff:ffff:ffff:ffff:ffff:ffff,NL
@@ -28607,9 +29360,9 @@
2a05:dfc7:11::,2a05:dfc7:19:ffff:ffff:ffff:ffff:ffff,CH
2a05:dfc7:1a::,2a05:dfc7:1a::,AT
2a05:dfc7:1a::1,2a05:dfc7:1f:ffff:ffff:ffff:ffff:ffff,CH
-2a05:dfc7:20::,2a05:dfc7:30::47,GB
-2a05:dfc7:30::48,2a05:dfc7:30::48,US
-2a05:dfc7:30::49,2a05:dfc7:3f:ffff:ffff:ffff:ffff:ffff,GB
+2a05:dfc7:20::,2a05:dfc7:2f:ffff:ffff:ffff:ffff:ffff,GB
+2a05:dfc7:30::,2a05:dfc7:30:ffff:ffff:ffff:ffff:ffff,US
+2a05:dfc7:31::,2a05:dfc7:3f:ffff:ffff:ffff:ffff:ffff,GB
2a05:dfc7:40::,2a05:dfc7:40:ffff:ffff:ffff:ffff:ffff,BY
2a05:dfc7:41::,2a05:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a05:e000::,2a05:e007:ffff:ffff:ffff:ffff:ffff:ffff,DK
@@ -29702,7 +30455,7 @@
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:e881:105:ffff:ffff:ffff:ffff:ffff,CH
-2a06:e881:106::,2a06:e881:106:ffff:ffff:ffff:ffff:ffff,GB
+2a06:e881:106::,2a06:e881:106:ffff:ffff:ffff:ffff:ffff,FR
2a06:e881:107::,2a06:e881:1ff:ffff:ffff:ffff:ffff:ffff,CH
2a06:e881:200::,2a06:e881:2ff:ffff:ffff:ffff:ffff:ffff,AT
2a06:e881:300::,2a06:e881:14ff:ffff:ffff:ffff:ffff:ffff,CH
@@ -30623,175 +31376,331 @@
2a07:cb40::,2a07:cb47:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a08::,2a08:1fff:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a::,2a0a:7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:80::,2a0a:87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:100::,2a0a:107:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a0a:180::,2a0a:187:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:200::,2a0a:200:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a0a:280::,2a0a:287:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:300::,2a0a:307:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:380::,2a0a:387:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a0a:400::,2a0a:400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:480::,2a0a:487:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a0a:500::,2a0a:507:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a0a:580::,2a0a:580:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:600::,2a0a:607:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a0a:680::,2a0a:687:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:700::,2a0a:707:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a0a:780::,2a0a:780:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:800::,2a0a:807:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a0a:880::,2a0a:880:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:900::,2a0a:907:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a0a:980::,2a0a:987:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:a00::,2a0a:a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:a80::,2a0a:a87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:b00::,2a0a:b07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:b80::,2a0a:b87:ffff:ffff:ffff:ffff:ffff:ffff,IS
2a0a:c00::,2a0a:c07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:c80::,2a0a:c87:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a0a:d00::,2a0a:d07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:d80::,2a0a:d87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:e00::,2a0a:e07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:e80::,2a0a:e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:f00::,2a0a:f07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:f80::,2a0a:f87:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a0a:1000::,2a0a:1007:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a0a:1100::,2a0a:1107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:1180::,2a0a:1187:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a0a:1200::,2a0a:1207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:1280::,2a0a:1287:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:1300::,2a0a:1307:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:1380::,2a0a:1387:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a0a:1400::,2a0a:1407:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:1480::,2a0a:1487:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:1500::,2a0a:1507:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:1580::,2a0a:1587:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:1600::,2a0a:1607:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a0a:1680::,2a0a:1687:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:1700::,2a0a:1707:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a0a:1780::,2a0a:1787:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a0a:1800::,2a0a:1800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:1880::,2a0a:1887:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:1900::,2a0a:1907:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a0a:1980::,2a0a:1987:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:1a00::,2a0a:1a07:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a0a:1a80::,2a0a:1a87:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a0a:1b00::,2a0a:1b07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:1b80::,2a0a:1b87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:1c00::,2a0a:1c07:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a0a:1c80::,2a0a:1c87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:1d00::,2a0a:1d00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:1d80::,2a0a:1d87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:1e00::,2a0a:1e07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a0a:1e80::,2a0a:1e87:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:1f00::,2a0a:1f07:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a0a:1f80::,2a0a:1f87:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a0a:2000::,2a0a:2007:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a0a:2080::,2a0a:2087:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:2100::,2a0a:2107:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:2180::,2a0a:2187:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a0a:2200::,2a0a:2200:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a0a:2280::,2a0a:2287:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a0a:2300::,2a0a:2307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:2380::,2a0a:2380:ffff:ffff:ffff:ffff:ffff:ffff,LV
2a0a:2400::,2a0a:2400:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a0a:2480::,2a0a:2487:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a0a:2500::,2a0a:2500:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a0a:2580::,2a0a:2587:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:2600::,2a0a:2607:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a0a:2680::,2a0a:2687:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a0a:2700::,2a0a:2707:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:2780::,2a0a:2787:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a0a:2800::,2a0a:2807:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a0a:2880::,2a0a:2887:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:2900::,2a0a:2907:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a0a:2980::,2a0a:2987:ffff:ffff:ffff:ffff:ffff:ffff,TJ
2a0a:2a00::,2a0a:2a00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a0a:2a80::,2a0a:2a87:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a0a:2b00::,2a0a:2b00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:2b80::,2a0a:2b87:ffff:ffff:ffff:ffff:ffff:ffff,SK
2a0a:2c00::,2a0a:2c07:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a0a:2c80::,2a0a:2c87:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a0a:2d00::,2a0a:2d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:2d80::,2a0a:2d87:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:2e00::,2a0a:2e07:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a0a:2e80::,2a0a:2e87:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a0a:2f00::,2a0a:2f07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:2f80::,2a0a:2f80:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:3000::,2a0a:3000:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:3080::,2a0a:3087:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:3100::,2a0a:3107:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a0a:3180::,2a0a:3187:ffff:ffff:ffff:ffff:ffff:ffff,BG
2a0a:3200::,2a0a:3207:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:3280::,2a0a:3287:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:3300::,2a0a:3307:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a0a:3380::,2a0a:3387:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:3400::,2a0a:3407:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a0a:3480::,2a0a:3487:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:3500::,2a0a:3507:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a0a:3580::,2a0a:3587:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:3600::,2a0a:3607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:3680::,2a0a:3687:ffff:ffff:ffff:ffff:ffff:ffff,CY
2a0a:3700::,2a0a:3707:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a0a:3780::,2a0a:3787:ffff:ffff:ffff:ffff:ffff:ffff,MD
2a0a:3800::,2a0a:3807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:3880::,2a0a:3887:ffff:ffff:ffff:ffff:ffff:ffff,AM
2a0a:3900::,2a0a:3907:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a0a:3980::,2a0a:3980:ffff:ffff:ffff:ffff:ffff:ffff,US
2a0a:3a00::,2a0a:3a07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:3a80::,2a0a:3a87:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a0a:3b00::,2a0a:3b00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:3b80::,2a0a:3b80:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a0a:3c00::,2a0a:3c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:3c80::,2a0a:3c87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:3d00::,2a0a:3d00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a0a:3d80::,2a0a:3d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:3e00::,2a0a:3e07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:3e80::,2a0a:3e87:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a0a:3f00::,2a0a:3f00:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a0a:3f80::,2a0a:3f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:4000::,2a0a:4007:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a0a:4080::,2a0a:4087:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:4100::,2a0a:4107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:4180::,2a0a:4187:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:4200::,2a0a:4207:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a0a:4280::,2a0a:4287:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:4300::,2a0a:4307:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:4380::,2a0a:4387:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:4400::,2a0a:4407:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a0a:4480::,2a0a:4487:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a0a:4500::,2a0a:4507:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:4580::,2a0a:4587:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:4600::,2a0a:4607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:4680::,2a0a:4687:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a0a:4700::,2a0a:4707:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:4780::,2a0a:4787:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:4800::,2a0a:4807:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a0a:4880::,2a0a:4887:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:4900::,2a0a:4907:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:4980::,2a0a:4987:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:4a00::,2a0a:4a07:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a0a:4a80::,2a0a:4a87:ffff:ffff:ffff:ffff:ffff:ffff,US
2a0a:4b00::,2a0a:4b07:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a0a:4b80::,2a0a:4b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:4c00::,2a0a:4c06:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:4c07::,2a0a:4c07::ffff:ffff:ffff:ffff:ffff,CA
2a0a:4c07:1::,2a0a:4c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:4c80::,2a0a:4c87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:4d00::,2a0a:4d07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:4d80::,2a0a:4d87:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a0a:4e00::,2a0a:4e07:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:4e80::,2a0a:4e87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:4f00::,2a0a:4f07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a0a:4f80::,2a0a:4f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:5000::,2a0a:5007:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a0a:5080::,2a0a:5087:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a0a:5100::,2a0a:5107:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:5180::,2a0a:5187:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:5200::,2a0a:5200:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a0a:5280::,2a0a:5287:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:5300::,2a0a:5307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:5380::,2a0a:5387:ffff:ffff:ffff:ffff:ffff:ffff,FI
2a0a:5400::,2a0a:5407:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a0a:5480::,2a0a:5487:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:5500::,2a0a:5507:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:5580::,2a0a:5587:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:5600::,2a0a:5607:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:5680::,2a0a:5687:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a0a:5700::,2a0a:5707:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a0a:5780::,2a0a:5780:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a0a:5800::,2a0a:5807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:5880::,2a0a:5887:ffff:ffff:ffff:ffff:ffff:ffff,IE
2a0a:5900::,2a0a:5907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:5980::,2a0a:5987:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:5a00::,2a0a:5a07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a0a:5a80::,2a0a:5a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:5b00::,2a0a:5b07:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a0a:5b80::,2a0a:5b87:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a0a:5c00::,2a0a:5c07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:5c80::,2a0a:5c87:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a0a:5d00::,2a0a:5d00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a0a:5d80::,2a0a:5d87:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a0a:5e00::,2a0a:5e07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:5e80::,2a0a:5e87:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a0a:5f00::,2a0a:5f07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a0a:5f80::,2a0a:5f87:ffff:ffff:ffff:ffff:ffff:ffff,IR
2a0a:6000::,2a0a:6007:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a0a:6080::,2a0a:6087:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:6100::,2a0a:6107:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a0a:6180::,2a0a:6187:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:6200::,2a0a:6200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:6280::,2a0a:6287:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:6300::,2a0a:6307:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a0a:6380::,2a0a:6387:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a0a:6400::,2a0a:6407:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:6480::,2a0a:6487:ffff:ffff:ffff:ffff:ffff:ffff,MD
2a0a:6500::,2a0a:6507:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:6580::,2a0a:6580:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a0a:6600::,2a0a:6607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:6680::,2a0a:6680:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:6700::,2a0a:6707:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:6780::,2a0a:6787:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a0a:6800::,2a0a:6807:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a0a:6880::,2a0a:6887:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:6900::,2a0a:6907:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:6980::,2a0a:6980:ffff:ffff:ffff:ffff:ffff:ffff,CH
2a0a:6a00::,2a0a:6a07:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a0a:6a80::,2a0a:6a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:6b00::,2a0a:6b07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:6b80::,2a0a:6b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:6c00::,2a0a:6c07:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a0a:6c80::,2a0a:6c87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:6d00::,2a0a:6d07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:6d80::,2a0a:6d87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:6e00::,2a0a:6e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:6e80::,2a0a:6e87:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a0a:6f00::,2a0a:6f07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a0a:6f80::,2a0a:6f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:7000::,2a0a:7007:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:7080::,2a0a:7087:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a0a:7100::,2a0a:7107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:7180::,2a0a:7187:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:7200::,2a0a:7207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:7280::,2a0a:7287:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:7300::,2a0a:7300:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a0a:7380::,2a0a:7387:ffff:ffff:ffff:ffff:ffff:ffff,KZ
2a0a:7400::,2a0a:7407:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:7480::,2a0a:7487:ffff:ffff:ffff:ffff:ffff:ffff,UA
2a0a:7500::,2a0a:7500:ffff:ffff:ffff:ffff:ffff:ffff,TJ
+2a0a:7580::,2a0a:7587:ffff:ffff:ffff:ffff:ffff:ffff,TR
2a0a:7600::,2a0a:7607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:7680::,2a0a:7687:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:7700::,2a0a:7707:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:7780::,2a0a:7787:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a0a:7800::,2a0a:7807:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a0a:7880::,2a0a:7887:ffff:ffff:ffff:ffff:ffff:ffff,BE
2a0a:7900::,2a0a:7907:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:7980::,2a0a:7987:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:7a00::,2a0a:7a04:7fff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:7a04:8000::,2a0a:7a04:8000:ffff:ffff:ffff:ffff:ffff,US
2a0a:7a04:8001::,2a0a:7a04:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:7a05::,2a0a:7a05:ffff:ffff:ffff:ffff:ffff:ffff,US
2a0a:7a06::,2a0a:7a07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:7a80::,2a0a:7a80:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:7b00::,2a0a:7b07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:7b80::,2a0a:7b87:ffff:ffff:ffff:ffff:ffff:ffff,PL
2a0a:7c00::,2a0a:7c07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a0a:7c80::,2a0a:7c80:ffff:ffff:ffff:ffff:ffff:ffff,AT
2a0a:7d00::,2a0a:7d07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a0a:7d80::,2a0a:7d87:ffff:ffff:ffff:ffff:ffff:ffff,BY
2a0a:7e00::,2a0a:7e03:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:7e04::,2a0a:7e04::ffff:ffff:ffff:ffff:ffff,US
2a0a:7e04:1::,2a0a:7e07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:7e80::,2a0a:7e87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:7f00::,2a0a:7f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:7f80::,2a0a:7f87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:8000::,2a0a:8007:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:8100::,2a0a:8107:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a0a:8180::,2a0a:8187:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:8200::,2a0a:8207:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a0a:8280::,2a0a:8287:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:8300::,2a0a:8307:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a0a:8380::,2a0a:8387:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:8400::,2a0a:8407:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:8480::,2a0a:8480:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:8500::,2a0a:8507:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:8580::,2a0a:8587:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:8600::,2a0a:8604:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:8605::,2a0a:8605::ffff:ffff:ffff:ffff:ffff,US
2a0a:8605:1::,2a0a:8605:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:8606::,2a0a:8606:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:8607::,2a0a:8607:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:8680::,2a0a:8687:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:8700::,2a0a:8707:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:8780::,2a0a:8787:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:8800::,2a0a:8807:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a0a:8880::,2a0a:8887:ffff:ffff:ffff:ffff:ffff:ffff,RO
2a0a:8900::,2a0a:8907:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a0a:8980::,2a0a:8987:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:8a00::,2a0a:8a00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:8a80::,2a0a:8a87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:8b00::,2a0a:8b07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:8b80::,2a0a:8b87:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:8c00::,2a0a:8c07:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a0a:8c80::,2a0a:8c87:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0a:8d00::,2a0a:8d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a0a:8d80::,2a0a:8d87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:8e00::,2a0a:8e07:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:8e80::,2a0a:8e87:ffff:ffff:ffff:ffff:ffff:ffff,IT
2a0a:8f00::,2a0a:8f00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:8f80::,2a0a:8f87:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:9000::,2a0a:9007:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a0a:9080::,2a0a:9087:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:9100::,2a0a:9107:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a0a:9180::,2a0a:9180:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:9200::,2a0a:9207:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:9280::,2a0a:9287:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:9300::,2a0a:9307:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0a:9380::,2a0a:9387:ffff:ffff:ffff:ffff:ffff:ffff,ES
2a0a:9400::,2a0a:9407:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a0a:9480::,2a0a:9480:ffff:ffff:ffff:ffff:ffff:ffff,IL
2a0a:9500::,2a0a:9507:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a0a:9580::,2a0a:9587:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:9600::,2a0a:9607:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:9680::,2a0a:9687:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a0a:9700::,2a0a:9700:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0a:9780::,2a0a:9787:ffff:ffff:ffff:ffff:ffff:ffff,NL
2a0a:9800::,2a0a:9807:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:9880::,2a0a:9887:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0a:9900::,2a0a:9907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:9980::,2a0a:9987:ffff:ffff:ffff:ffff:ffff:ffff,RU
2a0a:9a00::,2a0a:9a07:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:9a80::,2a0a:9a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:9b00::,2a0a:9b07:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a0a:9b80::,2a0a:9b80:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a0a:9c00::,2a0a:9c07:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a0a:9c80::,2a0a:9c80:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a0a:9d00::,2a0a:9d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0a:9d80::,2a0a:9d87:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0a:9e00::,2a0a:9e07:ffff:ffff:ffff:ffff:ffff:ffff,US
2a0a:9f00::,2a0a:9f07:ffff:ffff:ffff:ffff:ffff:ffff,US
2a0a:a000::,2a0a:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB
@@ -31135,11 +32044,17 @@
2a0b:f200::,2a0b:f200:ffff:ffff:ffff:ffff:ffff:ffff,NO
2a0b:f300::,2a0b:f307:ffff:ffff:ffff:ffff:ffff:ffff,GB
2a0b:f400::,2a0b:f400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0b:f500::,2a0b:f507:ffff:ffff:ffff:ffff:ffff:ffff,CZ
2a0b:f600::,2a0b:f607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a0b:f700::,2a0b:f707:ffff:ffff:ffff:ffff:ffff:ffff,DK
2a0b:f800::,2a0b:f800:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a0b:f900::,2a0b:f907:ffff:ffff:ffff:ffff:ffff:ffff,SE
2a0b:fa00::,2a0b:fa07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a0b:fb00::,2a0b:fb07:ffff:ffff:ffff:ffff:ffff:ffff,DE
2a0b:fc00::,2a0b:fc07:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a0b:fd00::,2a0b:fd00:ffff:ffff:ffff:ffff:ffff:ffff,FR
2a0b:fe00::,2a0b:fe07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a0b:ff00::,2a0b:ff07:ffff:ffff:ffff:ffff:ffff:ffff,GB
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
@@ -31187,6 +32102,18 @@
2c0f:f348::,2c0f:f348:ffff:ffff:ffff:ffff:ffff:ffff,ET
2c0f:f350::,2c0f:f350:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f358::,2c0f:f358:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f360::,2c0f:f360:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:f368::,2c0f:f368:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f370::,2c0f:f370:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f378::,2c0f:f378:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2c0f:f380::,2c0f:f380:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f388::,2c0f:f388:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f390::,2c0f:f390:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f398::,2c0f:f398:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f3a0::,2c0f:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:f3a8::,2c0f:f3a8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f3b0::,2c0f:f3b0:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2c0f:f3b8::,2c0f:f3b8:ffff:ffff:ffff:ffff:ffff:ffff,NG
2c0f:f400::,2c0f:f400:ffff:ffff:ffff:ffff:ffff:ffff,ZA
2c0f:f408::,2c0f:f408:ffff:ffff:ffff:ffff:ffff:ffff,KE
2c0f:f410::,2c0f:f410:ffff:ffff:ffff:ffff:ffff:ffff,NG
diff --git a/src/ext/trunnel/trunnel-impl.h b/src/ext/trunnel/trunnel-impl.h
index 0cbd4f5637..bc805851b1 100644
--- a/src/ext/trunnel/trunnel-impl.h
+++ b/src/ext/trunnel/trunnel-impl.h
@@ -1,4 +1,4 @@
-/* trunnel-impl.h -- copied from Trunnel v1.5
+/* trunnel-impl.h -- copied from Trunnel v1.5.1
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
diff --git a/src/ext/trunnel/trunnel.c b/src/ext/trunnel/trunnel.c
index f80a587a97..a008fb9f31 100644
--- a/src/ext/trunnel/trunnel.c
+++ b/src/ext/trunnel/trunnel.c
@@ -1,4 +1,4 @@
-/* trunnel.c -- copied from Trunnel v1.5
+/* trunnel.c -- copied from Trunnel v1.5.1
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
diff --git a/src/ext/trunnel/trunnel.h b/src/ext/trunnel/trunnel.h
index afd404db0f..85bbcc5451 100644
--- a/src/ext/trunnel/trunnel.h
+++ b/src/ext/trunnel/trunnel.h
@@ -1,4 +1,4 @@
-/* trunnel.h -- copied from Trunnel v1.5
+/* trunnel.h -- copied from Trunnel v1.5.1
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
diff --git a/src/or/bridges.c b/src/or/bridges.c
index 4058979bfb..7d1acdfeaa 100644
--- a/src/or/bridges.c
+++ b/src/or/bridges.c
@@ -263,18 +263,35 @@ node_is_a_configured_bridge(const node_t *node)
*/
void
learned_router_identity(const tor_addr_t *addr, uint16_t port,
- const char *digest)
+ const char *digest,
+ const ed25519_public_key_t *ed_id)
{
+ // XXXX prop220 use ed_id here, once there is some way to specify
+ (void)ed_id;
+ int learned = 0;
bridge_info_t *bridge =
get_configured_bridge_by_addr_port_digest(addr, port, digest);
if (bridge && tor_digest_is_zero(bridge->identity)) {
+ memcpy(bridge->identity, digest, DIGEST_LEN);
+ learned = 1;
+ }
+ /* XXXX prop220 remember bridge ed25519 identities -- add a field */
+#if 0
+ if (bridge && ed_id &&
+ ed25519_public_key_is_zero(&bridge->ed25519_identity) &&
+ !ed25519_public_key_is_zero(ed_id)) {
+ memcpy(&bridge->ed25519_identity, ed_id, sizeof(*ed_id));
+ learned = 1;
+ }
+#endif
+ if (learned) {
char *transport_info = NULL;
const char *transport_name =
find_transport_name_by_bridge_addrport(addr, port);
if (transport_name)
tor_asprintf(&transport_info, " (with transport '%s')", transport_name);
- memcpy(bridge->identity, digest, DIGEST_LEN);
+ // XXXX prop220 log both fingerprints.
log_notice(LD_DIR, "Learned fingerprint %s for bridge %s%s.",
hex_str(digest, DIGEST_LEN), fmt_addrport(addr, port),
transport_info ? transport_info : "");
@@ -373,6 +390,8 @@ bridge_add_from_config(bridge_line_t *bridge_line)
{
bridge_info_t *b;
+ // XXXX prop220 add a way to specify ed25519 ID to bridge_line_t.
+
{ /* Log the bridge we are about to register: */
log_debug(LD_GENERAL, "Registering bridge at %s (transport: %s) (%s)",
fmt_addrport(&bridge_line->addr, bridge_line->port),
diff --git a/src/or/bridges.h b/src/or/bridges.h
index 74c5113231..de23fe6eeb 100644
--- a/src/or/bridges.h
+++ b/src/or/bridges.h
@@ -34,7 +34,8 @@ int extend_info_is_a_configured_bridge(const extend_info_t *ei);
int routerinfo_is_a_configured_bridge(const routerinfo_t *ri);
int node_is_a_configured_bridge(const node_t *node);
void learned_router_identity(const tor_addr_t *addr, uint16_t port,
- const char *digest);
+ const char *digest,
+ const ed25519_public_key_t *ed_id);
void bridge_add_from_config(struct bridge_line_t *bridge_line);
void retry_bridge_descriptor_fetch_directly(const char *digest);
diff --git a/src/or/channel.c b/src/or/channel.c
index 9898148dde..2951a1d665 100644
--- a/src/or/channel.c
+++ b/src/or/channel.c
@@ -733,27 +733,62 @@ channel_find_by_global_id(uint64_t global_identifier)
return rv;
}
+/** Return true iff <b>chan</b> matches <b>rsa_id_digest</b> and <b>ed_id</b>.
+ * as its identity keys. If either is NULL, do not check for a match. */
+static int
+channel_remote_identity_matches(const channel_t *chan,
+ const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id)
+{
+ if (BUG(!chan))
+ return 0;
+ if (rsa_id_digest) {
+ if (tor_memneq(rsa_id_digest, chan->identity_digest, DIGEST_LEN))
+ return 0;
+ }
+ if (ed_id) {
+ if (tor_memneq(ed_id->pubkey, chan->ed25519_identity.pubkey,
+ ED25519_PUBKEY_LEN))
+ return 0;
+ }
+ return 1;
+}
+
/**
- * Find channel by digest of the remote endpoint
+ * Find channel by RSA/Ed25519 identity of of the remote endpoint
+ *
+ * This function looks up a channel by the digest of its remote endpoint's RSA
+ * identity key. If <b>ed_id</b> is provided and nonzero, only a channel
+ * matching the <b>ed_id</b> will be returned.
*
- * This function looks up a channel by the digest of its remote endpoint in
- * the channel digest map. It's possible that more than one channel to a
- * given endpoint exists. Use channel_next_with_digest() to walk the list.
+ * It's possible that more than one channel to a given endpoint exists. Use
+ * channel_next_with_rsa_identity() to walk the list of channels; make sure
+ * to test for Ed25519 identity match too (as appropriate)
*/
-
channel_t *
-channel_find_by_remote_digest(const char *identity_digest)
+channel_find_by_remote_identity(const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id)
{
channel_t *rv = NULL;
channel_idmap_entry_t *ent, search;
- tor_assert(identity_digest);
+ tor_assert(rsa_id_digest); /* For now, we require that every channel have
+ * an RSA identity, and that every lookup
+ * contain an RSA identity */
+ if (ed_id && ed25519_public_key_is_zero(ed_id)) {
+ /* Treat zero as meaning "We don't care about the presence or absence of
+ * an Ed key", not "There must be no Ed key". */
+ ed_id = NULL;
+ }
- memcpy(search.digest, identity_digest, DIGEST_LEN);
+ memcpy(search.digest, rsa_id_digest, DIGEST_LEN);
ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
if (ent) {
rv = TOR_LIST_FIRST(&ent->channel_list);
}
+ while (rv && ! channel_remote_identity_matches(rv, rsa_id_digest, ed_id)) {
+ rv = channel_next_with_rsa_identity(rv);
+ }
return rv;
}
@@ -766,7 +801,7 @@ channel_find_by_remote_digest(const char *identity_digest)
*/
channel_t *
-channel_next_with_digest(channel_t *chan)
+channel_next_with_rsa_identity(channel_t *chan)
{
tor_assert(chan);
@@ -1433,10 +1468,10 @@ channel_clear_identity_digest(channel_t *chan)
* This function sets the identity digest of the remote endpoint for a
* channel; this is intended for use by the lower layer.
*/
-
void
channel_set_identity_digest(channel_t *chan,
- const char *identity_digest)
+ const char *identity_digest,
+ const ed25519_public_key_t *ed_identity)
{
int was_in_digest_map, should_be_in_digest_map, state_not_in_map;
@@ -1475,6 +1510,11 @@ channel_set_identity_digest(channel_t *chan,
memset(chan->identity_digest, 0,
sizeof(chan->identity_digest));
}
+ if (ed_identity) {
+ memcpy(&chan->ed25519_identity, ed_identity, sizeof(*ed_identity));
+ } else {
+ memset(&chan->ed25519_identity, 0, sizeof(*ed_identity));
+ }
/* Put it in the digest map if we should */
if (should_be_in_digest_map)
@@ -3299,7 +3339,8 @@ channel_is_better(time_t now, channel_t *a, channel_t *b,
*/
channel_t *
-channel_get_for_extend(const char *digest,
+channel_get_for_extend(const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id,
const tor_addr_t *target_addr,
const char **msg_out,
int *launch_out)
@@ -3312,14 +3353,14 @@ channel_get_for_extend(const char *digest,
tor_assert(msg_out);
tor_assert(launch_out);
- chan = channel_find_by_remote_digest(digest);
+ chan = channel_find_by_remote_identity(rsa_id_digest, ed_id);
/* Walk the list, unrefing the old one and refing the new at each
* iteration.
*/
- for (; chan; chan = channel_next_with_digest(chan)) {
+ for (; chan; chan = channel_next_with_rsa_identity(chan)) {
tor_assert(tor_memeq(chan->identity_digest,
- digest, DIGEST_LEN));
+ rsa_id_digest, DIGEST_LEN));
if (CHANNEL_CONDEMNED(chan))
continue;
@@ -3330,6 +3371,11 @@ channel_get_for_extend(const char *digest,
continue;
}
+ /* The Ed25519 key has to match too */
+ if (!channel_remote_identity_matches(chan, rsa_id_digest, ed_id)) {
+ continue;
+ }
+
/* Never return a non-open connection. */
if (!CHANNEL_IS_OPEN(chan)) {
/* If the address matches, don't launch a new connection for this
@@ -4501,6 +4547,81 @@ channel_set_circid_type,(channel_t *chan,
}
}
+/** Helper for channel_update_bad_for_new_circs(): Perform the
+ * channel_update_bad_for_new_circs operation on all channels in <b>lst</b>,
+ * all of which MUST have the same RSA ID. (They MAY have different
+ * Ed25519 IDs.) */
+static void
+channel_rsa_id_group_set_badness(struct channel_list_s *lst, int force)
+{
+ /*XXXX This function should really be about channels. 15056 */
+ channel_t *chan;
+
+ /* First, get a minimal list of the ed25519 identites */
+ smartlist_t *ed_identities = smartlist_new();
+ TOR_LIST_FOREACH(chan, lst, next_with_same_id) {
+ uint8_t *id_copy =
+ tor_memdup(&chan->ed25519_identity.pubkey, DIGEST256_LEN);
+ smartlist_add(ed_identities, id_copy);
+ }
+ smartlist_sort_digests256(ed_identities);
+ smartlist_uniq_digests256(ed_identities);
+
+ /* Now, for each Ed identity, build a smartlist and find the best entry on
+ * it. */
+ smartlist_t *or_conns = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(ed_identities, const uint8_t *, ed_id) {
+ TOR_LIST_FOREACH(chan, lst, next_with_same_id) {
+ channel_tls_t *chantls = BASE_CHAN_TO_TLS(chan);
+ if (tor_memneq(ed_id, &chan->ed25519_identity.pubkey, DIGEST256_LEN))
+ continue;
+ or_connection_t *orconn = chantls->conn;
+ if (orconn) {
+ tor_assert(orconn->chan == chantls);
+ smartlist_add(or_conns, orconn);
+ }
+ }
+
+ connection_or_group_set_badness_(or_conns, force);
+ smartlist_clear(or_conns);
+ } SMARTLIST_FOREACH_END(ed_id);
+
+ /* XXXX 15056 we may want to do something special with connections that have
+ * no set Ed25519 identity! */
+
+ smartlist_free(or_conns);
+
+ SMARTLIST_FOREACH(ed_identities, uint8_t *, ed_id, tor_free(ed_id));
+ smartlist_free(ed_identities);
+}
+
+/** Go through all the channels (or if <b>digest</b> is non-NULL, just
+ * the OR connections with that digest), and set the is_bad_for_new_circs
+ * flag based on the rules in connection_or_group_set_badness() (or just
+ * always set it if <b>force</b> is true).
+ */
+void
+channel_update_bad_for_new_circs(const char *digest, int force)
+{
+ if (digest) {
+ channel_idmap_entry_t *ent;
+ channel_idmap_entry_t search;
+ memset(&search, 0, sizeof(search));
+ memcpy(search.digest, digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+ if (ent) {
+ channel_rsa_id_group_set_badness(&ent->channel_list, force);
+ }
+ return;
+ }
+
+ /* no digest; just look at everything. */
+ channel_idmap_entry_t **iter;
+ HT_FOREACH(iter, channel_idmap, &channel_identity_map) {
+ channel_rsa_id_group_set_badness(&(*iter)->channel_list, force);
+ }
+}
+
/**
* Update the estimated number of bytes queued to transmit for this channel,
* and notify the scheduler. The estimate includes both the channel queue and
diff --git a/src/or/channel.h b/src/or/channel.h
index 7e7b2ec899..26aa93b5e2 100644
--- a/src/or/channel.h
+++ b/src/or/channel.h
@@ -153,16 +153,32 @@ struct channel_s {
int (*write_var_cell)(channel_t *, var_cell_t *);
/**
- * Hash of the public RSA key for the other side's identity key, or
- * zeroes if the other side hasn't shown us a valid identity key.
+ * Hash of the public RSA key for the other side's RSA identity key -- or
+ * zeroes if we don't have an RSA identity in mind for the other side, and
+ * it hasn't shown us one.
+ *
+ * Note that this is the RSA identity that we hope the other side has -- not
+ * necessarily its true identity. Don't believe this identity unless
+ * authentication has happened.
*/
char identity_digest[DIGEST_LEN];
+ /**
+ * Ed25519 key for the other side of this channel -- or zeroes if we don't
+ * have an Ed25519 identity in mind for the other side, and it hasn't shown
+ * us one.
+ *
+ * Note that this is the identity that we hope the other side has -- not
+ * necessarily its true identity. Don't believe this identity unless
+ * authentication has happened.
+ */
+ ed25519_public_key_t ed25519_identity;
+
/** Nickname of the OR on the other side, or NULL if none. */
char *nickname;
/**
- * Linked list of channels with the same identity digest, for the
- * digest->channel map
+ * Linked list of channels with the same RSA identity digest, for use with
+ * the digest->channel map
*/
TOR_LIST_ENTRY(channel_s) next_with_same_id;
@@ -427,7 +443,8 @@ void channel_mark_incoming(channel_t *chan);
void channel_mark_outgoing(channel_t *chan);
void channel_mark_remote(channel_t *chan);
void channel_set_identity_digest(channel_t *chan,
- const char *identity_digest);
+ const char *identity_digest,
+ const ed25519_public_key_t *ed_identity);
void channel_set_remote_end(channel_t *chan,
const char *identity_digest,
const char *nickname);
@@ -489,10 +506,11 @@ int channel_send_destroy(circid_t circ_id, channel_t *chan,
*/
channel_t * channel_connect(const tor_addr_t *addr, uint16_t port,
- const char *id_digest,
+ const char *rsa_id_digest,
const ed25519_public_key_t *ed_id);
-channel_t * channel_get_for_extend(const char *digest,
+channel_t * channel_get_for_extend(const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id,
const tor_addr_t *target_addr,
const char **msg_out,
int *launch_out);
@@ -506,11 +524,13 @@ int channel_is_better(time_t now,
*/
channel_t * channel_find_by_global_id(uint64_t global_identifier);
-channel_t * channel_find_by_remote_digest(const char *identity_digest);
+channel_t * channel_find_by_remote_identity(const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id);
/** For things returned by channel_find_by_remote_digest(), walk the list.
+ * The RSA key will match for all returned elements; the Ed25519 key might not.
*/
-channel_t * channel_next_with_digest(channel_t *chan);
+channel_t * channel_next_with_rsa_identity(channel_t *chan);
/*
* Helper macros to lookup state of given channel.
@@ -582,6 +602,8 @@ void channel_listener_dump_statistics(channel_listener_t *chan_l,
void channel_listener_dump_transport_statistics(channel_listener_t *chan_l,
int severity);
+void channel_update_bad_for_new_circs(const char *digest, int force);
+
/* Flow control queries */
uint64_t channel_get_global_queue_estimate(void);
int channel_num_cells_writeable(channel_t *chan);
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index 02b783a8e3..dbed95fb43 100644
--- a/src/or/channeltls.c
+++ b/src/or/channeltls.c
@@ -175,7 +175,6 @@ channel_tls_connect(const tor_addr_t *addr, uint16_t port,
const char *id_digest,
const ed25519_public_key_t *ed_id)
{
- (void) ed_id; // XXXX not fully used yet
channel_tls_t *tlschan = tor_malloc_zero(sizeof(*tlschan));
channel_t *chan = &(tlschan->base_);
@@ -1661,9 +1660,10 @@ channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
connection_or_init_conn_from_address(chan->conn,
&(chan->conn->base_.addr),
chan->conn->base_.port,
+ /* zero, checked above */
(const char*)(chan->conn->handshake_state->
authenticated_rsa_peer_id),
- NULL, // XXXX Ed key
+ NULL, /* Ed25519 ID: Also checked as zero */
0);
}
}
@@ -2002,12 +2002,15 @@ channel_tls_process_certs_cell(var_cell_t *cell, channel_tls_t *chan)
checked_ed_id, sizeof(ed25519_public_key_t));
}
+ log_debug(LD_HANDSHAKE, "calling client_learned_peer_id from "
+ "process_certs_cell");
+
if (connection_or_client_learned_peer_id(chan->conn,
chan->conn->handshake_state->authenticated_rsa_peer_id,
checked_ed_id) < 0)
ERR("Problem setting or checking peer id");
- log_info(LD_OR,
+ log_info(LD_HANDSHAKE,
"Got some good certificates from %s:%d: Authenticated it with "
"RSA%s",
safe_str(chan->conn->base_.address), chan->conn->base_.port,
@@ -2343,6 +2346,13 @@ channel_tls_process_authenticate_cell(var_cell_t *cell, channel_tls_t *chan)
chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
crypto_pk_free(identity_rcvd);
+ log_debug(LD_HANDSHAKE,
+ "Calling connection_or_init_conn_from_address for %s "
+ " from %s, with%s ed25519 id.",
+ safe_str(chan->conn->base_.address),
+ __func__,
+ ed_identity_received ? "" : "out");
+
connection_or_init_conn_from_address(chan->conn,
&(chan->conn->base_.addr),
chan->conn->base_.port,
@@ -2351,7 +2361,7 @@ channel_tls_process_authenticate_cell(var_cell_t *cell, channel_tls_t *chan)
ed_identity_received,
0);
- log_info(LD_OR,
+ log_debug(LD_HANDSHAKE,
"Got an AUTHENTICATE cell from %s:%d, type %d: Looks good.",
safe_str(chan->conn->base_.address),
chan->conn->base_.port,
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index bf52b90730..a14a2b1482 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -64,8 +64,9 @@
#include "transports.h"
static channel_t * channel_connect_for_circuit(const tor_addr_t *addr,
- uint16_t port,
- const char *id_digest);
+ uint16_t port,
+ const char *id_digest,
+ const ed25519_public_key_t *ed_id);
static int circuit_deliver_create_cell(circuit_t *circ,
const create_cell_t *create_cell,
int relayed);
@@ -81,13 +82,12 @@ static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice);
*/
static channel_t *
channel_connect_for_circuit(const tor_addr_t *addr, uint16_t port,
- const char *id_digest)
+ const char *id_digest,
+ const ed25519_public_key_t *ed_id)
{
channel_t *chan;
- chan = channel_connect(addr, port, id_digest,
- NULL // XXXX Ed25519 id.
- );
+ chan = channel_connect(addr, port, id_digest, ed_id);
if (chan) command_setup_channel(chan);
return chan;
@@ -564,6 +564,7 @@ circuit_handle_first_hop(origin_circuit_t *circ)
firsthop->extend_info->port));
n_chan = channel_get_for_extend(firsthop->extend_info->identity_digest,
+ &firsthop->extend_info->ed_identity,
&firsthop->extend_info->addr,
&msg,
&should_launch);
@@ -581,7 +582,8 @@ circuit_handle_first_hop(origin_circuit_t *circ)
n_chan = channel_connect_for_circuit(
&firsthop->extend_info->addr,
firsthop->extend_info->port,
- firsthop->extend_info->identity_digest);
+ firsthop->extend_info->identity_digest,
+ &firsthop->extend_info->ed_identity);
if (!n_chan) { /* connect failed, forget the whole thing */
log_info(LD_CIRC,"connect to firsthop failed. Closing.");
return -END_CIRC_REASON_CONNECTFAILED;
@@ -1081,6 +1083,9 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
ec.orport_ipv4.port = hop->extend_info->port;
tor_addr_make_unspec(&ec.orport_ipv6.addr);
memcpy(ec.node_id, hop->extend_info->identity_digest, DIGEST_LEN);
+ /* Set the ED25519 identity too -- it will only get included
+ * in the extend2 cell if we're configured to use it, though. */
+ ed25519_pubkey_copy(&ec.ed_pubkey, &hop->extend_info->ed_identity);
len = onion_skin_create(ec.create_cell.handshake_type,
hop->extend_info,
@@ -1199,7 +1204,7 @@ circuit_extend(cell_t *cell, circuit_t *circ)
/* Check if they asked us for 0000..0000. We support using
* an empty fingerprint for the first hop (e.g. for a bridge relay),
- * but we don't want to let people send us extend cells for empty
+ * but we don't want to let clients send us extend cells for empty
* fingerprints -- a) because it opens the user up to a mitm attack,
* and b) because it lets an attacker force the relay to hold open a
* new TLS connection for each extend request. */
@@ -1209,6 +1214,18 @@ circuit_extend(cell_t *cell, circuit_t *circ)
return -1;
}
+ /* Fill in ed_pubkey if it was not provided and we can infer it from
+ * our networkstatus */
+ if (ed25519_public_key_is_zero(&ec.ed_pubkey)) {
+ const node_t *node = node_get_by_id((const char*)ec.node_id);
+ const ed25519_public_key_t *node_ed_id = NULL;
+ if (node &&
+ node_supports_ed25519_link_authentication(node) &&
+ (node_ed_id = node_get_ed25519_id(node))) {
+ ed25519_pubkey_copy(&ec.ed_pubkey, node_ed_id);
+ }
+ }
+
/* Next, check if we're being asked to connect to the hop that the
* extend cell came from. There isn't any reason for that, and it can
* assist circular-path attacks. */
@@ -1220,7 +1237,17 @@ circuit_extend(cell_t *cell, circuit_t *circ)
return -1;
}
+ /* Check the previous hop Ed25519 ID too */
+ if (! ed25519_public_key_is_zero(&ec.ed_pubkey) &&
+ ed25519_pubkey_eq(&ec.ed_pubkey,
+ &TO_OR_CIRCUIT(circ)->p_chan->ed25519_identity)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Client asked me to extend back to the previous hop "
+ "(by Ed25519 ID).");
+ }
+
n_chan = channel_get_for_extend((const char*)ec.node_id,
+ &ec.ed_pubkey,
&ec.orport_ipv4.addr,
&msg,
&should_launch);
@@ -1232,8 +1259,9 @@ circuit_extend(cell_t *cell, circuit_t *circ)
circ->n_hop = extend_info_new(NULL /*nickname*/,
(const char*)ec.node_id,
- NULL /*onion_key*/,
- NULL /*curve25519_key*/,
+ &ec.ed_pubkey,
+ NULL, /*onion_key*/
+ NULL, /*curve25519_key*/
&ec.orport_ipv4.addr,
ec.orport_ipv4.port);
@@ -1246,7 +1274,8 @@ circuit_extend(cell_t *cell, circuit_t *circ)
/* we should try to open a connection */
n_chan = channel_connect_for_circuit(&ec.orport_ipv4.addr,
ec.orport_ipv4.port,
- (const char*)ec.node_id);
+ (const char*)ec.node_id,
+ &ec.ed_pubkey);
if (!n_chan) {
log_info(LD_CIRC,"Launching n_chan failed. Closing circuit.");
circuit_mark_for_close(circ, END_CIRC_REASON_CONNECTFAILED);
@@ -1548,9 +1577,9 @@ circuit_get_unhandled_ports(time_t now)
* If we're returning 0, set need_uptime and need_capacity to
* indicate any requirements that the unhandled ports have.
*/
-int
-circuit_all_predicted_ports_handled(time_t now, int *need_uptime,
- int *need_capacity)
+MOCK_IMPL(int,
+circuit_all_predicted_ports_handled, (time_t now, int *need_uptime,
+ int *need_capacity))
{
int i, enough;
uint16_t *port;
@@ -2411,19 +2440,23 @@ onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice)
/** Allocate a new extend_info object based on the various arguments. */
extend_info_t *
-extend_info_new(const char *nickname, const char *digest,
+extend_info_new(const char *nickname,
+ const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id,
crypto_pk_t *onion_key,
- const curve25519_public_key_t *curve25519_key,
+ const curve25519_public_key_t *ntor_key,
const tor_addr_t *addr, uint16_t port)
{
extend_info_t *info = tor_malloc_zero(sizeof(extend_info_t));
- memcpy(info->identity_digest, digest, DIGEST_LEN);
+ memcpy(info->identity_digest, rsa_id_digest, DIGEST_LEN);
+ if (ed_id && !ed25519_public_key_is_zero(ed_id))
+ memcpy(&info->ed_identity, ed_id, sizeof(ed25519_public_key_t));
if (nickname)
strlcpy(info->nickname, nickname, sizeof(info->nickname));
if (onion_key)
info->onion_key = crypto_pk_dup_key(onion_key);
- if (curve25519_key)
- memcpy(&info->curve25519_onion_key, curve25519_key,
+ if (ntor_key)
+ memcpy(&info->curve25519_onion_key, ntor_key,
sizeof(curve25519_public_key_t));
tor_addr_copy(&info->addr, addr);
info->port = port;
@@ -2473,20 +2506,35 @@ extend_info_from_node(const node_t *node, int for_direct_connect)
return NULL;
}
+ const ed25519_public_key_t *ed_pubkey = NULL;
+
+ /* Don't send the ed25519 pubkey unless the target node actually supports
+ * authenticating with it. */
+ if (node_supports_ed25519_link_authentication(node)) {
+ log_info(LD_CIRC, "Including Ed25519 ID for %s", node_describe(node));
+ ed_pubkey = node_get_ed25519_id(node);
+ } else if (node_get_ed25519_id(node)) {
+ log_info(LD_CIRC, "Not including the ed25519 ID for %s, since it won't "
+ " be able to authenticate it.",
+ node_describe(node));
+ }
+
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);
+ node->identity,
+ ed_pubkey,
+ node->ri->onion_pkey,
+ node->ri->onion_curve25519_pkey,
+ &ap.addr,
+ ap.port);
else if (valid_addr && node->rs && node->md)
return extend_info_new(node->rs->nickname,
- node->identity,
- node->md->onion_pkey,
- node->md->onion_curve25519_pkey,
- &ap.addr,
- ap.port);
+ node->identity,
+ ed_pubkey,
+ node->md->onion_pkey,
+ node->md->onion_curve25519_pkey,
+ &ap.addr,
+ ap.port);
else
return NULL;
}
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index b85dbecf7e..ddb070b427 100644
--- a/src/or/circuitbuild.h
+++ b/src/or/circuitbuild.h
@@ -42,15 +42,18 @@ int onionskin_answer(or_circuit_t *circ,
const struct created_cell_t *created_cell,
const char *keys,
const uint8_t *rend_circ_nonce);
-int circuit_all_predicted_ports_handled(time_t now, int *need_uptime,
- int *need_capacity);
+MOCK_DECL(int, circuit_all_predicted_ports_handled, (time_t now,
+ int *need_uptime,
+ int *need_capacity));
int circuit_append_new_exit(origin_circuit_t *circ, extend_info_t *info);
int circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *info);
void onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop);
-extend_info_t *extend_info_new(const char *nickname, const char *digest,
+extend_info_t *extend_info_new(const char *nickname,
+ const char *rsa_id_digest,
+ const ed25519_public_key_t *ed_id,
crypto_pk_t *onion_key,
- const curve25519_public_key_t *curve25519_key,
+ const curve25519_public_key_t *ntor_key,
const tor_addr_t *addr, uint16_t port);
extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect);
extend_info_t *extend_info_dup(extend_info_t *info);
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index ab38b54985..5943e516ff 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -65,6 +65,7 @@
#include "control.h"
#include "entrynodes.h"
#include "main.h"
+#include "hs_circuitmap.h"
#include "hs_common.h"
#include "networkstatus.h"
#include "nodelist.h"
@@ -102,9 +103,6 @@ static smartlist_t *circuits_pending_close = NULL;
static void circuit_free_cpath_node(crypt_path_t *victim);
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);
@@ -932,7 +930,9 @@ circuit_free(circuit_t *circ)
crypto_cipher_free(ocirc->n_crypto);
crypto_digest_free(ocirc->n_digest);
- circuit_clear_rend_token(ocirc);
+ if (ocirc->hs_token) {
+ hs_circuitmap_remove_circuit(ocirc);
+ }
if (ocirc->rend_splice) {
or_circuit_t *other = ocirc->rend_splice;
@@ -1481,177 +1481,6 @@ circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
return NULL;
}
-/** Map from rendezvous cookie to or_circuit_t */
-static digestmap_t *rend_cookie_map = NULL;
-
-/** Map from introduction point digest to or_circuit_t */
-static digestmap_t *intro_digest_map = NULL;
-
-/** Return the OR circuit whose purpose is <b>purpose</b>, and whose
- * rend_token is the REND_TOKEN_LEN-byte <b>token</b>. If <b>is_rend_circ</b>,
- * look for rendezvous point circuits; otherwise look for introduction point
- * circuits. */
-static or_circuit_t *
-circuit_get_by_rend_token_and_purpose(uint8_t purpose, int is_rend_circ,
- const char *token)
-{
- or_circuit_t *circ;
- digestmap_t *map = is_rend_circ ? rend_cookie_map : intro_digest_map;
-
- if (!map)
- return NULL;
-
- circ = digestmap_get(map, token);
- if (!circ ||
- circ->base_.purpose != purpose ||
- circ->base_.marked_for_close)
- return NULL;
-
- if (!circ->rendinfo) {
- char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
- log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned a "
- "circuit with no rendinfo set.",
- safe_str(t), is_rend_circ);
- tor_free(t);
- return NULL;
- }
-
- if (! bool_eq(circ->rendinfo->is_rend_circ, is_rend_circ) ||
- tor_memneq(circ->rendinfo->rend_token, token, REND_TOKEN_LEN)) {
- char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
- log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned %s:%d",
- safe_str(t), is_rend_circ,
- safe_str(hex_str(circ->rendinfo->rend_token, REND_TOKEN_LEN)),
- (int)circ->rendinfo->is_rend_circ);
- tor_free(t);
- return NULL;
- }
-
- return circ;
-}
-
-/** Clear the rendezvous cookie or introduction point key digest that's
- * configured on <b>circ</b>, if any, and remove it from any such maps. */
-static void
-circuit_clear_rend_token(or_circuit_t *circ)
-{
- or_circuit_t *found_circ;
- digestmap_t *map;
-
- if (!circ || !circ->rendinfo)
- return;
-
- map = circ->rendinfo->is_rend_circ ? rend_cookie_map : intro_digest_map;
-
- if (!map) {
- log_warn(LD_BUG, "Tried to clear rend token on circuit, but found no map");
- return;
- }
-
- found_circ = digestmap_get(map, circ->rendinfo->rend_token);
- if (found_circ == circ) {
- /* Great, this is the right one. */
- digestmap_remove(map, circ->rendinfo->rend_token);
- } else if (found_circ) {
- log_warn(LD_BUG, "Tried to clear rend token on circuit, but "
- "it was already replaced in the map.");
- } else {
- log_warn(LD_BUG, "Tried to clear rend token on circuit, but "
- "it not in the map at all.");
- }
-
- tor_free(circ->rendinfo); /* Sets it to NULL too */
-}
-
-/** Set the rendezvous cookie (if is_rend_circ), or the introduction point
- * digest (if ! is_rend_circ) of <b>circ</b> to the REND_TOKEN_LEN-byte value
- * in <b>token</b>, and add it to the appropriate map. If it previously had a
- * token, clear it. If another circuit previously had the same
- * cookie/intro-digest, mark that circuit and remove it from the map. */
-static void
-circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ,
- const uint8_t *token)
-{
- digestmap_t **map_p, *map;
- or_circuit_t *found_circ;
-
- /* Find the right map, creating it as needed */
- map_p = is_rend_circ ? &rend_cookie_map : &intro_digest_map;
-
- if (!*map_p)
- *map_p = digestmap_new();
-
- map = *map_p;
-
- /* If this circuit already has a token, we need to remove that. */
- if (circ->rendinfo)
- circuit_clear_rend_token(circ);
-
- if (token == NULL) {
- /* We were only trying to remove this token, not set a new one. */
- return;
- }
-
- found_circ = digestmap_get(map, (const char *)token);
- if (found_circ) {
- tor_assert(found_circ != circ);
- circuit_clear_rend_token(found_circ);
- if (! found_circ->base_.marked_for_close) {
- circuit_mark_for_close(TO_CIRCUIT(found_circ), END_CIRC_REASON_FINISHED);
- if (is_rend_circ) {
- log_fn(LOG_PROTOCOL_WARN, LD_REND,
- "Duplicate rendezvous cookie (%s...) used on two circuits",
- hex_str((const char*)token, 4)); /* only log first 4 chars */
- }
- }
- }
-
- /* Now set up the rendinfo */
- circ->rendinfo = tor_malloc(sizeof(*circ->rendinfo));
- memcpy(circ->rendinfo->rend_token, token, REND_TOKEN_LEN);
- circ->rendinfo->is_rend_circ = is_rend_circ ? 1 : 0;
-
- digestmap_set(map, (const char *)token, circ);
-}
-
-/** Return the circuit waiting for a rendezvous with the provided cookie.
- * Return NULL if no such circuit is found.
- */
-or_circuit_t *
-circuit_get_rendezvous(const uint8_t *cookie)
-{
- return circuit_get_by_rend_token_and_purpose(
- CIRCUIT_PURPOSE_REND_POINT_WAITING,
- 1, (const char*)cookie);
-}
-
-/** Return the circuit waiting for intro cells of the given digest.
- * Return NULL if no such circuit is found.
- */
-or_circuit_t *
-circuit_get_intro_point(const uint8_t *digest)
-{
- return circuit_get_by_rend_token_and_purpose(
- CIRCUIT_PURPOSE_INTRO_POINT, 0,
- (const char *)digest);
-}
-
-/** Set the rendezvous cookie of <b>circ</b> to <b>cookie</b>. If another
- * circuit previously had that cookie, mark it. */
-void
-circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie)
-{
- circuit_set_rend_token(circ, 1, cookie);
-}
-
-/** Set the intro point key digest of <b>circ</b> to <b>cookie</b>. If another
- * circuit previously had that intro point digest, mark it. */
-void
-circuit_set_intro_point_digest(or_circuit_t *circ, const uint8_t *digest)
-{
- circuit_set_rend_token(circ, 0, digest);
-}
-
/** Return a circuit that is open, is CIRCUIT_PURPOSE_C_GENERAL,
* has a timestamp_dirty value of 0, has flags matching the CIRCLAUNCH_*
* flags in <b>flags</b>, and if info is defined, does not already use info
diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h
index e2102a118b..d83801a7a8 100644
--- a/src/or/circuitlist.h
+++ b/src/or/circuitlist.h
@@ -47,10 +47,6 @@ origin_circuit_t *circuit_get_ready_rend_circ_by_rend_data(
const rend_data_t *rend_data);
origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
const uint8_t *digest, uint8_t purpose);
-or_circuit_t *circuit_get_rendezvous(const uint8_t *cookie);
-or_circuit_t *circuit_get_intro_point(const uint8_t *digest);
-void circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie);
-void circuit_set_intro_point_digest(or_circuit_t *circ, const uint8_t *digest);
origin_circuit_t *circuit_find_to_cannibalize(uint8_t purpose,
extend_info_t *info, int flags);
void circuit_mark_all_unused_circs(void);
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
index 418acc0024..6cb99e4175 100644
--- a/src/or/circuitstats.c
+++ b/src/or/circuitstats.c
@@ -1431,7 +1431,7 @@ circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
#define MAX_TIMEOUT ((int32_t) (INT32_MAX/2))
/* Check to see if this has happened before. If so, double the timeout
- * to give people on abysmally bad network connections a shot at access */
+ * to give clients on abysmally bad network connections a shot at access */
if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) {
if (cbt->timeout_ms > MAX_TIMEOUT || cbt->close_ms > MAX_TIMEOUT) {
log_warn(LD_CIRC, "Insanely large circuit build timeout value. "
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 8e0fbd1d39..456a9c6712 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1039,8 +1039,117 @@ circuit_stream_is_being_handled(entry_connection_t *conn,
/** Don't keep more than this many unused open circuits around. */
#define MAX_UNUSED_OPEN_CIRCUITS 14
-/** Figure out how many circuits we have open that are clean. Make
- * sure it's enough for all the upcoming behaviors we predict we'll have.
+/* Return true if a circuit is available for use, meaning that it is open,
+ * clean, usable for new multi-hop connections, and a general purpose origin
+ * circuit.
+ * Accept any kind of circuit, return false if the above conditions are not
+ * met. */
+STATIC int
+circuit_is_available_for_use(const circuit_t *circ)
+{
+ const origin_circuit_t *origin_circ;
+ cpath_build_state_t *build_state;
+
+ if (!CIRCUIT_IS_ORIGIN(circ))
+ return 0; /* We first filter out only origin circuits before doing the
+ following checks. */
+ if (circ->marked_for_close)
+ return 0; /* Don't mess with marked circs */
+ if (circ->timestamp_dirty)
+ return 0; /* Only count clean circs */
+ if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL)
+ return 0; /* We only pay attention to general purpose circuits.
+ General purpose circuits are always origin circuits. */
+
+ origin_circ = CONST_TO_ORIGIN_CIRCUIT(circ);
+ if (origin_circ->unusable_for_new_conns)
+ return 0;
+
+ build_state = origin_circ->build_state;
+ if (build_state->onehop_tunnel)
+ return 0;
+
+ return 1;
+}
+
+/* Return true if we need any more exit circuits.
+ * needs_uptime and needs_capacity are set only if we need more exit circuits.
+ * Check if we know of a port that's been requested recently and no circuit
+ * is currently available that can handle it. */
+STATIC int
+needs_exit_circuits(time_t now, int *needs_uptime, int *needs_capacity)
+{
+ return (!circuit_all_predicted_ports_handled(now, needs_uptime,
+ needs_capacity) &&
+ router_have_consensus_path() == CONSENSUS_PATH_EXIT);
+}
+
+/* Hidden services need at least this many internal circuits */
+#define SUFFICIENT_UPTIME_INTERNAL_HS_SERVERS 3
+
+/* Return true if we need any more hidden service server circuits.
+ * HS servers only need an internal circuit. */
+STATIC int
+needs_hs_server_circuits(int num_uptime_internal)
+{
+ return (num_rend_services() &&
+ num_uptime_internal < SUFFICIENT_UPTIME_INTERNAL_HS_SERVERS &&
+ router_have_consensus_path() != CONSENSUS_PATH_UNKNOWN);
+}
+
+/* We need at least this many internal circuits for hidden service clients */
+#define SUFFICIENT_INTERNAL_HS_CLIENTS 3
+
+/* We need at least this much uptime for internal circuits for hidden service
+ * clients */
+#define SUFFICIENT_UPTIME_INTERNAL_HS_CLIENTS 2
+
+/* Return true if we need any more hidden service client circuits.
+ * HS clients only need an internal circuit. */
+STATIC int
+needs_hs_client_circuits(time_t now, int *needs_uptime, int *needs_capacity,
+ int num_internal, int num_uptime_internal)
+{
+ int used_internal_recently = rep_hist_get_predicted_internal(now,
+ needs_uptime,
+ needs_capacity);
+ int requires_uptime = num_uptime_internal <
+ SUFFICIENT_UPTIME_INTERNAL_HS_CLIENTS &&
+ needs_uptime;
+
+ return (used_internal_recently &&
+ (requires_uptime || num_internal < SUFFICIENT_INTERNAL_HS_CLIENTS) &&
+ router_have_consensus_path() != CONSENSUS_PATH_UNKNOWN);
+}
+
+/* The minimum number of open slots we should keep in order to preemptively
+ * build circuits. */
+#define CBT_MIN_REMAINING_PREEMPTIVE_CIRCUITS 2
+
+/* Check to see if we need more circuits to have a good build timeout. However,
+ * leave a couple slots open so that we can still build circuits preemptively
+ * as needed. */
+#define CBT_MAX_UNUSED_OPEN_CIRCUITS (MAX_UNUSED_OPEN_CIRCUITS - \
+ CBT_MIN_REMAINING_PREEMPTIVE_CIRCUITS)
+
+/* Return true if we need more circuits for a good build timeout.
+ * XXXX make the assumption that build timeout streams should be
+ * created whenever we can build internal circuits. */
+STATIC int
+needs_circuits_for_build(int num)
+{
+ if (router_have_consensus_path() != CONSENSUS_PATH_UNKNOWN) {
+ if (num < CBT_MAX_UNUSED_OPEN_CIRCUITS &&
+ !circuit_build_times_disabled() &&
+ circuit_build_times_needs_circuits_now(get_circuit_build_times())) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/** Determine how many circuits we have open that are clean,
+ * Make sure it's enough for all the upcoming behaviors we predict we'll have.
* But put an upper bound on the total number of circuits.
*/
static void
@@ -1052,25 +1161,14 @@ circuit_predict_and_launch_new(void)
time_t now = time(NULL);
int flags = 0;
- /* First, count how many of each type of circuit we have already. */
+ /* Count how many of each type of circuit we currently have. */
SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) {
- cpath_build_state_t *build_state;
- origin_circuit_t *origin_circ;
- if (!CIRCUIT_IS_ORIGIN(circ))
- continue;
- if (circ->marked_for_close)
- continue; /* don't mess with marked circs */
- if (circ->timestamp_dirty)
- continue; /* only count clean circs */
- if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL)
- continue; /* only pay attention to general-purpose circs */
- origin_circ = TO_ORIGIN_CIRCUIT(circ);
- if (origin_circ->unusable_for_new_conns)
- continue;
- build_state = origin_circ->build_state;
- if (build_state->onehop_tunnel)
+ if (!circuit_is_available_for_use(circ))
continue;
+
num++;
+
+ cpath_build_state_t *build_state = TO_ORIGIN_CIRCUIT(circ)->build_state;
if (build_state->is_internal)
num_internal++;
if (build_state->need_uptime && build_state->is_internal)
@@ -1080,19 +1178,14 @@ circuit_predict_and_launch_new(void)
/* If that's enough, then stop now. */
if (num >= MAX_UNUSED_OPEN_CIRCUITS)
- return; /* we already have many, making more probably will hurt */
-
- /* Second, see if we need any more exit circuits. */
- /* check if we know of a port that's been requested recently
- * and no circuit is currently available that can handle it.
- * Exits (obviously) require an exit circuit. */
- if (!circuit_all_predicted_ports_handled(now, &port_needs_uptime,
- &port_needs_capacity)
- && router_have_consensus_path() == CONSENSUS_PATH_EXIT) {
+ return;
+
+ if (needs_exit_circuits(now, &port_needs_uptime, &port_needs_capacity)) {
if (port_needs_uptime)
flags |= CIRCLAUNCH_NEED_UPTIME;
if (port_needs_capacity)
flags |= CIRCLAUNCH_NEED_CAPACITY;
+
log_info(LD_CIRC,
"Have %d clean circs (%d internal), need another exit circ.",
num, num_internal);
@@ -1100,12 +1193,10 @@ circuit_predict_and_launch_new(void)
return;
}
- /* Third, see if we need any more hidden service (server) circuits.
- * HS servers only need an internal circuit. */
- if (num_rend_services() && num_uptime_internal < 3
- && router_have_consensus_path() != CONSENSUS_PATH_UNKNOWN) {
+ if (needs_hs_server_circuits(num_uptime_internal)) {
flags = (CIRCLAUNCH_NEED_CAPACITY | CIRCLAUNCH_NEED_UPTIME |
CIRCLAUNCH_IS_INTERNAL);
+
log_info(LD_CIRC,
"Have %d clean circs (%d internal), need another internal "
"circ for my hidden service.",
@@ -1114,18 +1205,16 @@ circuit_predict_and_launch_new(void)
return;
}
- /* Fourth, see if we need any more hidden service (client) circuits.
- * HS clients only need an internal circuit. */
- if (rep_hist_get_predicted_internal(now, &hidserv_needs_uptime,
- &hidserv_needs_capacity) &&
- ((num_uptime_internal<2 && hidserv_needs_uptime) ||
- num_internal<3)
- && router_have_consensus_path() != CONSENSUS_PATH_UNKNOWN) {
+ if (needs_hs_client_circuits(now, &hidserv_needs_uptime,
+ &hidserv_needs_capacity,
+ num_internal, num_uptime_internal))
+ {
if (hidserv_needs_uptime)
flags |= CIRCLAUNCH_NEED_UPTIME;
if (hidserv_needs_capacity)
flags |= CIRCLAUNCH_NEED_CAPACITY;
flags |= CIRCLAUNCH_IS_INTERNAL;
+
log_info(LD_CIRC,
"Have %d clean circs (%d uptime-internal, %d internal), need"
" another hidden service circ.",
@@ -1134,26 +1223,17 @@ circuit_predict_and_launch_new(void)
return;
}
- /* Finally, check to see if we still need more circuits to learn
- * a good build timeout. But if we're close to our max number we
- * want, don't do another -- we want to leave a few slots open so
- * we can still build circuits preemptively as needed.
- * XXXX make the assumption that build timeout streams should be
- * created whenever we can build internal circuits. */
- if (router_have_consensus_path() != CONSENSUS_PATH_UNKNOWN) {
- if (num < MAX_UNUSED_OPEN_CIRCUITS-2 &&
- ! circuit_build_times_disabled() &&
- circuit_build_times_needs_circuits_now(get_circuit_build_times())) {
- flags = CIRCLAUNCH_NEED_CAPACITY;
- /* if there are no exits in the consensus, make timeout
- * circuits internal */
- if (router_have_consensus_path() == CONSENSUS_PATH_INTERNAL)
- flags |= CIRCLAUNCH_IS_INTERNAL;
+ if (needs_circuits_for_build(num)) {
+ flags = CIRCLAUNCH_NEED_CAPACITY;
+ /* if there are no exits in the consensus, make timeout
+ * circuits internal */
+ if (router_have_consensus_path() == CONSENSUS_PATH_INTERNAL)
+ flags |= CIRCLAUNCH_IS_INTERNAL;
+
log_info(LD_CIRC,
"Have %d clean circs need another buildtime test circ.", num);
circuit_launch(CIRCUIT_PURPOSE_C_GENERAL, flags);
return;
- }
}
}
@@ -2110,6 +2190,10 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
if (want_onehop && conn->chosen_exit_name[0] == '$') {
/* We're asking for a one-hop circuit to a router that
* we don't have a routerinfo about. Make up an extend_info. */
+ /* XXX prop220: we need to make chosen_exit_name able to
+ * encode both key formats. This is not absolutely critical
+ * since this is just for one-hop circuits, but we should
+ * still get it done */
char digest[DIGEST_LEN];
char *hexdigest = conn->chosen_exit_name+1;
tor_addr_t addr;
@@ -2124,9 +2208,12 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
escaped_safe_str_client(conn->socks_request->address));
return -1;
}
+ /* XXXX prop220 add a workaround for ed25519 ID below*/
extend_info = extend_info_new(conn->chosen_exit_name+1,
- digest, NULL, NULL, &addr,
- conn->socks_request->port);
+ digest,
+ NULL, /* Ed25519 ID */
+ NULL, NULL, /* onion keys */
+ &addr, conn->socks_request->port);
} else { /* ! (want_onehop && conn->chosen_exit_name[0] == '$') */
/* We will need an onion key for the router, and we
* don't have one. Refuse or relax requirements. */
@@ -2533,7 +2620,7 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
log_debug(LD_APP|LD_CIRC,
"Attaching apconn to circ %u (stream %d sec old).",
(unsigned)circ->base_.n_circ_id, conn_age);
- /* print the circ's path, so people can figure out which circs are
+ /* print the circ's path, so clients can figure out which circs are
* sucking. */
circuit_log_path(LOG_INFO,LD_APP|LD_CIRC,circ);
diff --git a/src/or/circuituse.h b/src/or/circuituse.h
index 110bdda5b2..e5f8700ea2 100644
--- a/src/or/circuituse.h
+++ b/src/or/circuituse.h
@@ -60,5 +60,25 @@ int hostname_in_track_host_exits(const or_options_t *options,
const char *address);
void mark_circuit_unusable_for_new_conns(origin_circuit_t *circ);
+#ifdef TOR_UNIT_TESTS
+/* Used only by circuituse.c and test_circuituse.c */
+
+STATIC int circuit_is_available_for_use(const circuit_t *circ);
+
+STATIC int needs_exit_circuits(time_t now,
+ int *port_needs_uptime,
+ int *port_needs_capacity);
+STATIC int needs_hs_server_circuits(int num_uptime_internal);
+
+STATIC int needs_hs_client_circuits(time_t now,
+ int *needs_uptime,
+ int *needs_capacity,
+ int num_internal,
+ int num_uptime_internal);
+
+STATIC int needs_circuits_for_build(int num);
+
+#endif
+
#endif
diff --git a/src/or/config.c b/src/or/config.c
index 2ec96d39e9..aba567a835 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -219,7 +219,7 @@ static config_var_t option_vars_[] = {
OBSOLETE("AuthDirListBadDirs"),
V(AuthDirListBadExits, BOOL, "0"),
V(AuthDirMaxServersPerAddr, UINT, "2"),
- V(AuthDirMaxServersPerAuthAddr,UINT, "5"),
+ OBSOLETE("AuthDirMaxServersPerAuthAddr"),
V(AuthDirHasIPv6Connectivity, BOOL, "0"),
VAR("AuthoritativeDirectory", BOOL, AuthoritativeDir, "0"),
V(AutomapHostsOnResolve, BOOL, "0"),
@@ -306,6 +306,7 @@ static config_var_t option_vars_[] = {
V(ExtORPortCookieAuthFile, STRING, NULL),
V(ExtORPortCookieAuthFileGroupReadable, BOOL, "0"),
V(ExtraInfoStatistics, BOOL, "1"),
+ V(ExtendByEd25519ID, AUTOBOOL, "auto"),
V(FallbackDir, LINELIST, NULL),
/* XXXX prop271 -- this has an ugly name to remind us to remove it. */
VAR("UseDeprecatedGuardAlgorithm_", BOOL,
@@ -502,6 +503,7 @@ static config_var_t option_vars_[] = {
V(User, STRING, NULL),
OBSOLETE("UserspaceIOCPBuffers"),
V(AuthDirSharedRandomness, BOOL, "1"),
+ V(AuthDirTestEd25519LinkKeys, BOOL, "1"),
OBSOLETE("V1AuthoritativeDirectory"),
OBSOLETE("V2AuthoritativeDirectory"),
VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir, "0"),
@@ -597,7 +599,6 @@ static const config_var_t testing_tor_network_defaults[] = {
V(EnforceDistinctSubnets, BOOL, "0"),
V(AssumeReachable, BOOL, "1"),
V(AuthDirMaxServersPerAddr, UINT, "0"),
- V(AuthDirMaxServersPerAuthAddr,UINT, "0"),
V(ClientBootstrapConsensusAuthorityDownloadSchedule, CSV_INTERVAL,
"0, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 16, 32, 60"),
V(ClientBootstrapConsensusFallbackDownloadSchedule, CSV_INTERVAL,
@@ -1815,25 +1816,6 @@ options_act(const or_options_t *old_options)
monitor_owning_controller_process(options->OwningControllerProcess);
- /* We must create new keys after we poison the directories, because our
- * poisoning code checks for existing keys, and refuses to modify their
- * directories. */
-
- /* If we use non-anonymous single onion services, make sure we poison any
- new hidden service directories, so that we never accidentally launch the
- non-anonymous hidden services thinking they are anonymous. */
- if (running_tor && rend_service_non_anonymous_mode_enabled(options)) {
- if (options->RendConfigLines && !num_rend_services()) {
- log_warn(LD_BUG,"Error: hidden services configured, but not parsed.");
- return -1;
- }
- if (rend_service_poison_new_single_onion_dirs(NULL) < 0) {
- log_warn(LD_GENERAL,"Failed to mark new hidden services as non-anonymous"
- ".");
- return -1;
- }
- }
-
/* reload keys as needed for rendezvous services. */
if (rend_service_load_all_keys(NULL)<0) {
log_warn(LD_GENERAL,"Error loading rendezvous service keys");
@@ -1964,7 +1946,7 @@ options_act(const or_options_t *old_options)
addressmap_clear_invalid_automaps(options);
/* How long should we delay counting bridge stats after becoming a bridge?
- * We use this so we don't count people who used our bridge thinking it is
+ * We use this so we don't count clients who used our bridge thinking it is
* a relay. If you change this, don't forget to change the log message
* below. It's 4 hours (the time it takes to stop being used by clients)
* plus some extra time for clock skew. */
@@ -2990,21 +2972,6 @@ options_validate_single_onion(or_options_t *options, char **msg)
options->UseEntryGuards = 0;
}
- /* Check if existing hidden service keys were created in a different
- * single onion service mode, and refuse to launch if they
- * have. We'll poison new keys in options_act() just before we create them.
- */
- if (rend_service_list_verify_single_onion_poison(NULL, options) < 0) {
- log_warn(LD_GENERAL, "We are configured with "
- "HiddenServiceNonAnonymousMode %d, but one or more hidden "
- "service keys were created in %s mode. This is not allowed.",
- rend_service_non_anonymous_mode_enabled(options) ? 1 : 0,
- rend_service_non_anonymous_mode_enabled(options) ?
- "an anonymous" : "a non-anonymous"
- );
- return -1;
- }
-
return 0;
}
@@ -3144,7 +3111,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
} else if (!strcasecmp(options->TransProxyType, "ipfw")) {
#ifndef KERNEL_MAY_SUPPORT_IPFW
/* Earlier versions of OS X have ipfw */
- REJECT("ipfw is a FreeBSD-specific"
+ REJECT("ipfw is a FreeBSD-specific "
"and OS X/Darwin-specific feature.");
#else
options->TransProxyType_parsed = TPT_IPFW;
@@ -4978,12 +4945,12 @@ options_init_from_torrc(int argc, char **argv)
}
if (config_line_find(cmdline_only_options, "--version")) {
- printf("Tor version %s.\n",get_version());
+ printf("Tor %s\n", get_version());
exit(0);
}
if (config_line_find(cmdline_only_options, "--library-versions")) {
- printf("Tor version %s. \n", get_version());
+ printf("Tor %s\n", get_version());
printf("Library versions\tCompiled\t\tRuntime\n");
printf("Libevent\t\t%-15s\t\t%s\n",
tor_libevent_get_header_version_str(),
diff --git a/src/or/connection.c b/src/or/connection.c
index 87f0f91fd2..5b22594969 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -650,7 +650,7 @@ connection_free_(connection_t *conn)
if (conn->type == CONN_TYPE_OR &&
!tor_digest_is_zero(TO_OR_CONN(conn)->identity_digest)) {
log_warn(LD_BUG, "called on OR conn with non-zeroed identity_digest");
- connection_or_remove_from_identity_map(TO_OR_CONN(conn));
+ connection_or_clear_identity(TO_OR_CONN(conn));
}
if (conn->type == CONN_TYPE_OR || conn->type == CONN_TYPE_EXT_OR) {
connection_or_remove_from_ext_or_id_map(TO_OR_CONN(conn));
@@ -681,7 +681,7 @@ connection_free,(connection_t *conn))
}
if (connection_speaks_cells(conn)) {
if (!tor_digest_is_zero(TO_OR_CONN(conn)->identity_digest)) {
- connection_or_remove_from_identity_map(TO_OR_CONN(conn));
+ connection_or_clear_identity(TO_OR_CONN(conn));
}
}
if (conn->type == CONN_TYPE_CONTROL) {
@@ -1601,16 +1601,19 @@ connection_handle_listener_read(connection_t *conn, int new_type)
/* remember the remote address */
tor_addr_copy(&newconn->addr, &addr);
- newconn->port = port;
- newconn->address = tor_addr_to_str_dup(&addr);
+ if (new_type == CONN_TYPE_AP && conn->socket_family == AF_UNIX) {
+ newconn->port = 0;
+ newconn->address = tor_strdup(conn->address);
+ } else {
+ newconn->port = port;
+ newconn->address = tor_addr_to_str_dup(&addr);
+ }
if (new_type == CONN_TYPE_AP && conn->socket_family != AF_UNIX) {
log_info(LD_NET, "New SOCKS connection opened from %s.",
fmt_and_decorate_addr(&addr));
}
if (new_type == CONN_TYPE_AP && conn->socket_family == AF_UNIX) {
- newconn->port = 0;
- newconn->address = tor_strdup(conn->address);
log_info(LD_NET, "New SOCKS AF_UNIX connection opened");
}
if (new_type == CONN_TYPE_CONTROL) {
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 3874d52c23..fb077bb0c5 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -1300,7 +1300,7 @@ connection_ap_handshake_rewrite(entry_connection_t *conn,
* an internal address? If so, we should reject it if we're configured to
* do so. */
if (options->ClientDNSRejectInternalAddresses) {
- /* Don't let people try to do a reverse lookup on 10.0.0.1. */
+ /* Don't let clients try to do a reverse lookup on 10.0.0.1. */
tor_addr_t addr;
int ok;
ok = tor_addr_parse_PTR_name(
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 6233fb7669..b3ae291831 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -76,56 +76,25 @@ static void connection_or_mark_bad_for_new_circs(or_connection_t *or_conn);
static void connection_or_change_state(or_connection_t *conn, uint8_t state);
-/**************************************************************/
+static void connection_or_check_canonicity(or_connection_t *conn,
+ int started_here);
-/** Map from identity digest of connected OR or desired OR to a connection_t
- * with that identity digest. If there is more than one such connection_t,
- * they form a linked list, with next_with_same_id as the next pointer. */
-static digestmap_t *orconn_identity_map = NULL;
+/**************************************************************/
/** Global map between Extended ORPort identifiers and OR
* connections. */
static digestmap_t *orconn_ext_or_id_map = NULL;
-/** If conn is listed in orconn_identity_map, remove it, and clear
- * conn->identity_digest. Otherwise do nothing. */
+/** Clear clear conn->identity_digest and update other data
+ * structures as appropriate.*/
void
-connection_or_remove_from_identity_map(or_connection_t *conn)
+connection_or_clear_identity(or_connection_t *conn)
{
- or_connection_t *tmp;
tor_assert(conn);
- if (!orconn_identity_map)
- return;
- tmp = digestmap_get(orconn_identity_map, conn->identity_digest);
- if (!tmp) {
- if (!tor_digest_is_zero(conn->identity_digest)) {
- log_warn(LD_BUG, "Didn't find connection '%s' on identity map when "
- "trying to remove it.",
- conn->nickname ? conn->nickname : "NULL");
- }
- return;
- }
- if (conn == tmp) {
- if (conn->next_with_same_id)
- digestmap_set(orconn_identity_map, conn->identity_digest,
- conn->next_with_same_id);
- else
- digestmap_remove(orconn_identity_map, conn->identity_digest);
- } else {
- while (tmp->next_with_same_id) {
- if (tmp->next_with_same_id == conn) {
- tmp->next_with_same_id = conn->next_with_same_id;
- break;
- }
- tmp = tmp->next_with_same_id;
- }
- }
memset(conn->identity_digest, 0, DIGEST_LEN);
- conn->next_with_same_id = NULL;
}
-/** Remove all entries from the identity-to-orconn map, and clear
- * all identities in OR conns.*/
+/** Clear all identities in OR conns.*/
void
connection_or_clear_identity_map(void)
{
@@ -133,60 +102,72 @@ connection_or_clear_identity_map(void)
SMARTLIST_FOREACH(conns, connection_t *, conn,
{
if (conn->type == CONN_TYPE_OR) {
- or_connection_t *or_conn = TO_OR_CONN(conn);
- memset(or_conn->identity_digest, 0, DIGEST_LEN);
- or_conn->next_with_same_id = NULL;
+ connection_or_clear_identity(TO_OR_CONN(conn));
}
});
-
- digestmap_free(orconn_identity_map, NULL);
- orconn_identity_map = NULL;
}
/** Change conn->identity_digest to digest, and add conn into
- * orconn_digest_map. */
+ * the appropriate digest maps.
+ *
+ * NOTE that this function only allows two kinds of transitions: from
+ * unset identity to set identity, and from idempotent re-settings
+ * of the same identity. It's not allowed to clear an identity or to
+ * change an identity. Return 0 on success, and -1 if the transition
+ * is not allowed.
+ **/
static void
connection_or_set_identity_digest(or_connection_t *conn,
const char *rsa_digest,
const ed25519_public_key_t *ed_id)
{
- (void) ed_id; // DOCDOC // XXXX not implemented yet.
- or_connection_t *tmp;
+ channel_t *chan = NULL;
tor_assert(conn);
tor_assert(rsa_digest);
- if (!orconn_identity_map)
- orconn_identity_map = digestmap_new();
- if (tor_memeq(conn->identity_digest, rsa_digest, DIGEST_LEN))
+ if (conn->chan)
+ chan = TLS_CHAN_TO_BASE(conn->chan);
+
+ log_info(LD_HANDSHAKE, "Set identity digest for %p (%s): %s %s.",
+ conn,
+ escaped_safe_str(conn->base_.address),
+ hex_str(rsa_digest, DIGEST_LEN),
+ ed25519_fmt(ed_id));
+ log_info(LD_HANDSHAKE, " (Previously: %s %s)",
+ hex_str(conn->identity_digest, DIGEST_LEN),
+ chan ? ed25519_fmt(&chan->ed25519_identity) : "<null>");
+
+ const int rsa_id_was_set = ! tor_digest_is_zero(conn->identity_digest);
+ const int ed_id_was_set =
+ chan && !ed25519_public_key_is_zero(&chan->ed25519_identity);
+ const int rsa_changed =
+ tor_memneq(conn->identity_digest, rsa_digest, DIGEST_LEN);
+ const int ed_changed = ed_id_was_set &&
+ (!ed_id || !ed25519_pubkey_eq(ed_id, &chan->ed25519_identity));
+
+ tor_assert(!rsa_changed || !rsa_id_was_set);
+ tor_assert(!ed_changed || !ed_id_was_set);
+
+ if (!rsa_changed && !ed_changed)
return;
/* If the identity was set previously, remove the old mapping. */
- if (! tor_digest_is_zero(conn->identity_digest)) {
- connection_or_remove_from_identity_map(conn);
- if (conn->chan)
- channel_clear_identity_digest(TLS_CHAN_TO_BASE(conn->chan));
+ if (rsa_id_was_set) {
+ connection_or_clear_identity(conn);
+ if (chan)
+ channel_clear_identity_digest(chan);
}
memcpy(conn->identity_digest, rsa_digest, DIGEST_LEN);
- /* If we're setting the ID to zero, don't add a mapping. */
- if (tor_digest_is_zero(rsa_digest))
+ /* If we're initializing the IDs to zero, don't add a mapping yet. */
+ if (tor_digest_is_zero(rsa_digest) &&
+ (!ed_id || ed25519_public_key_is_zero(ed_id)))
return;
- tmp = digestmap_set(orconn_identity_map, rsa_digest, conn);
- conn->next_with_same_id = tmp;
-
/* Deal with channels */
- if (conn->chan)
- channel_set_identity_digest(TLS_CHAN_TO_BASE(conn->chan), rsa_digest);
-
-#if 1
- /* Testing code to check for bugs in representation. */
- for (; tmp; tmp = tmp->next_with_same_id) {
- tor_assert(tor_memeq(tmp->identity_digest, rsa_digest, DIGEST_LEN));
- tor_assert(tmp != conn);
- }
-#endif
+ if (chan)
+ channel_set_identity_digest(chan, rsa_digest, ed_id);
}
/** Remove the Extended ORPort identifier of <b>conn</b> from the
@@ -889,14 +870,44 @@ connection_or_init_conn_from_address(or_connection_t *conn,
const ed25519_public_key_t *ed_id,
int started_here)
{
- (void) ed_id; // not fully used yet.
- const node_t *r = node_get_by_id(id_digest);
+ log_debug(LD_HANDSHAKE, "init conn from address %s: %s, %s (%d)",
+ fmt_addr(addr),
+ hex_str((const char*)id_digest, DIGEST_LEN),
+ ed25519_fmt(ed_id),
+ started_here);
+
connection_or_set_identity_digest(conn, id_digest, ed_id);
connection_or_update_token_buckets_helper(conn, 1, get_options());
conn->base_.port = port;
tor_addr_copy(&conn->base_.addr, addr);
tor_addr_copy(&conn->real_addr, addr);
+
+ connection_or_check_canonicity(conn, started_here);
+}
+
+/** Check whether the identity of <b>conn</b> matches a known node. If it
+ * does, check whether the address of conn matches the expected address, and
+ * update the connection's is_canonical flag, nickname, and address fields as
+ * appropriate. */
+static void
+connection_or_check_canonicity(or_connection_t *conn, int started_here)
+{
+ const char *id_digest = conn->identity_digest;
+ const ed25519_public_key_t *ed_id = NULL;
+ const tor_addr_t *addr = &conn->real_addr;
+ if (conn->chan)
+ ed_id = & TLS_CHAN_TO_BASE(conn->chan)->ed25519_identity;
+
+ const node_t *r = node_get_by_id(id_digest);
+ if (r &&
+ node_supports_ed25519_link_authentication(r) &&
+ ! node_ed25519_id_matches(r, ed_id)) {
+ /* If this node is capable of proving an ed25519 ID,
+ * we can't call this a canonical connection unless both IDs match. */
+ r = NULL;
+ }
+
if (r) {
tor_addr_port_t node_ap;
node_get_pref_orport(r, &node_ap);
@@ -918,10 +929,12 @@ connection_or_init_conn_from_address(or_connection_t *conn,
tor_addr_copy(&conn->base_.addr, &node_ap.addr);
conn->base_.port = node_ap.port;
}
+ tor_free(conn->nickname);
conn->nickname = tor_strdup(node_get_nickname(r));
tor_free(conn->base_.address);
conn->base_.address = tor_addr_to_str_dup(&node_ap.addr);
} else {
+ tor_free(conn->nickname);
conn->nickname = tor_malloc(HEX_DIGEST_LEN+2);
conn->nickname[0] = '$';
base16_encode(conn->nickname+1, HEX_DIGEST_LEN+1,
@@ -967,7 +980,7 @@ connection_or_mark_bad_for_new_circs(or_connection_t *or_conn)
* too old for new circuits? */
#define TIME_BEFORE_OR_CONN_IS_TOO_OLD (60*60*24*7)
-/** Given the head of the linked list for all the or_connections with a given
+/** Given a list of all the or_connections with a given
* identity, set elements of that list as is_bad_for_new_circs as
* appropriate. Helper for connection_or_set_bad_connections().
*
@@ -984,16 +997,19 @@ connection_or_mark_bad_for_new_circs(or_connection_t *or_conn)
* See channel_is_better() in channel.c for our idea of what makes one OR
* connection better than another.
*/
-static void
-connection_or_group_set_badness(or_connection_t *head, int force)
+void
+connection_or_group_set_badness_(smartlist_t *group, int force)
{
- or_connection_t *or_conn = NULL, *best = NULL;
+ /* XXXX this function should be entirely about channels, not OR
+ * XXXX connections. */
+
+ or_connection_t *best = NULL;
int n_old = 0, n_inprogress = 0, n_canonical = 0, n_other = 0;
time_t now = time(NULL);
/* Pass 1: expire everything that's old, and see what the status of
* everything else is. */
- for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
+ SMARTLIST_FOREACH_BEGIN(group, or_connection_t *, or_conn) {
if (or_conn->base_.marked_for_close ||
connection_or_is_bad_for_new_circs(or_conn))
continue;
@@ -1017,11 +1033,11 @@ connection_or_group_set_badness(or_connection_t *head, int force)
} else {
++n_other;
}
- }
+ } SMARTLIST_FOREACH_END(or_conn);
/* Pass 2: We know how about how good the best connection is.
* expire everything that's worse, and find the very best if we can. */
- for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
+ SMARTLIST_FOREACH_BEGIN(group, or_connection_t *, or_conn) {
if (or_conn->base_.marked_for_close ||
connection_or_is_bad_for_new_circs(or_conn))
continue; /* This one doesn't need to be marked bad. */
@@ -1048,7 +1064,7 @@ connection_or_group_set_badness(or_connection_t *head, int force)
0)) {
best = or_conn;
}
- }
+ } SMARTLIST_FOREACH_END(or_conn);
if (!best)
return;
@@ -1067,7 +1083,7 @@ connection_or_group_set_badness(or_connection_t *head, int force)
* 0.1.2.x dies out, the first case will go away, and the second one is
* "mostly harmless", so a fix can wait until somebody is bored.
*/
- for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
+ SMARTLIST_FOREACH_BEGIN(group, or_connection_t *, or_conn) {
if (or_conn->base_.marked_for_close ||
connection_or_is_bad_for_new_circs(or_conn) ||
or_conn->base_.state != OR_CONN_STATE_OPEN)
@@ -1101,24 +1117,7 @@ connection_or_group_set_badness(or_connection_t *head, int force)
connection_or_mark_bad_for_new_circs(or_conn);
}
}
- }
-}
-
-/** Go through all the OR connections (or if <b>digest</b> is non-NULL, just
- * the OR connections with that digest), and set the is_bad_for_new_circs
- * flag based on the rules in connection_or_group_set_badness() (or just
- * always set it if <b>force</b> is true).
- */
-void
-connection_or_set_bad_connections(const char *digest, int force)
-{
- if (!orconn_identity_map)
- return;
-
- DIGESTMAP_FOREACH(orconn_identity_map, identity, or_connection_t *, conn) {
- if (!digest || tor_memeq(digest, conn->identity_digest, DIGEST_LEN))
- connection_or_group_set_badness(conn, force);
- } DIGESTMAP_FOREACH_END;
+ } SMARTLIST_FOREACH_END(or_conn);
}
/** <b>conn</b> is in the 'connecting' state, and it failed to complete
@@ -1188,7 +1187,6 @@ connection_or_connect, (const tor_addr_t *_addr, uint16_t port,
const ed25519_public_key_t *ed_id,
channel_tls_t *chan))
{
- (void) ed_id; // XXXX not fully used yet.
or_connection_t *conn;
const or_options_t *options = get_options();
int socket_error = 0;
@@ -1207,6 +1205,11 @@ connection_or_connect, (const tor_addr_t *_addr, uint16_t port,
log_info(LD_PROTOCOL,"Client asked me to connect to myself. Refusing.");
return NULL;
}
+ if (server_mode(options) && router_ed25519_id_is_me(ed_id)) {
+ log_info(LD_PROTOCOL,"Client asked me to connect to myself by Ed25519 "
+ "identity. Refusing.");
+ return NULL;
+ }
conn = or_connection_new(CONN_TYPE_OR, tor_addr_family(&addr));
@@ -1576,20 +1579,25 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
crypto_pk_free(identity_rcvd);
- if (started_here)
+ if (started_here) {
+ /* A TLS handshake can't teach us an Ed25519 ID, so we set it to NULL
+ * here. */
+ log_debug(LD_HANDSHAKE, "Calling client_learned_peer_id from "
+ "check_valid_tls_handshake");
return connection_or_client_learned_peer_id(conn,
(const uint8_t*)digest_rcvd_out,
- NULL // Ed25519 ID
- );
+ NULL);
+ }
return 0;
}
/** Called when we (as a connection initiator) have definitively,
* authenticatedly, learned that ID of the Tor instance on the other
- * side of <b>conn</b> is <b>peer_id</b>. For v1 and v2 handshakes,
+ * side of <b>conn</b> is <b>rsa_peer_id</b> and optionally <b>ed_peer_id</b>.
+ * For v1 and v2 handshakes,
* this is right after we get a certificate chain in a TLS handshake
- * or renegotiation. For v3 handshakes, this is right after we get a
+ * or renegotiation. For v3+ handshakes, this is right after we get a
* certificate chain in a CERTS cell.
*
* If we did not know the ID before, record the one we got.
@@ -1613,11 +1621,26 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
const uint8_t *rsa_peer_id,
const ed25519_public_key_t *ed_peer_id)
{
- (void) ed_peer_id; // not used yet.
-
const or_options_t *options = get_options();
-
- if (tor_digest_is_zero(conn->identity_digest)) {
+ channel_tls_t *chan_tls = conn->chan;
+ channel_t *chan = channel_tls_to_base(chan_tls);
+ int changed_identity = 0;
+ tor_assert(chan);
+
+ const int expected_rsa_key =
+ ! tor_digest_is_zero(conn->identity_digest);
+ const int expected_ed_key =
+ ! ed25519_public_key_is_zero(&chan->ed25519_identity);
+
+ log_info(LD_HANDSHAKE, "learned peer id for %p (%s): %s, %s",
+ conn,
+ safe_str_client(conn->base_.address),
+ hex_str((const char*)rsa_peer_id, DIGEST_LEN),
+ ed25519_fmt(ed_peer_id));
+
+ if (! expected_rsa_key && ! expected_ed_key) {
+ log_info(LD_HANDSHAKE, "(we had no ID in mind when we made this "
+ "connection.");
connection_or_set_identity_digest(conn,
(const char*)rsa_peer_id, ed_peer_id);
tor_free(conn->nickname);
@@ -1631,16 +1654,39 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
/* if it's a bridge and we didn't know its identity fingerprint, now
* we do -- remember it for future attempts. */
learned_router_identity(&conn->base_.addr, conn->base_.port,
- (const char*)rsa_peer_id /*, ed_peer_id XXXX */);
+ (const char*)rsa_peer_id, ed_peer_id);
+ changed_identity = 1;
}
- if (tor_memneq(rsa_peer_id, conn->identity_digest, DIGEST_LEN)) {
+ const int rsa_mismatch = expected_rsa_key &&
+ tor_memneq(rsa_peer_id, conn->identity_digest, DIGEST_LEN);
+ /* It only counts as an ed25519 mismatch if we wanted an ed25519 identity
+ * and didn't get it. It's okay if we get one that we didn't ask for. */
+ const int ed25519_mismatch =
+ expected_ed_key &&
+ (ed_peer_id == NULL ||
+ ! ed25519_pubkey_eq(&chan->ed25519_identity, ed_peer_id));
+
+ if (rsa_mismatch || ed25519_mismatch) {
/* I was aiming for a particular digest. I didn't get it! */
- char seen[HEX_DIGEST_LEN+1];
- char expected[HEX_DIGEST_LEN+1];
- base16_encode(seen, sizeof(seen), (const char*)rsa_peer_id, DIGEST_LEN);
- base16_encode(expected, sizeof(expected), conn->identity_digest,
+ char seen_rsa[HEX_DIGEST_LEN+1];
+ char expected_rsa[HEX_DIGEST_LEN+1];
+ char seen_ed[ED25519_BASE64_LEN+1];
+ char expected_ed[ED25519_BASE64_LEN+1];
+ base16_encode(seen_rsa, sizeof(seen_rsa),
+ (const char*)rsa_peer_id, DIGEST_LEN);
+ base16_encode(expected_rsa, sizeof(expected_rsa), conn->identity_digest,
DIGEST_LEN);
+ if (ed_peer_id) {
+ ed25519_public_to_base64(seen_ed, ed_peer_id);
+ } else {
+ strlcpy(seen_ed, "no ed25519 key", sizeof(seen_ed));
+ }
+ if (! ed25519_public_key_is_zero(&chan->ed25519_identity)) {
+ ed25519_public_to_base64(expected_ed, &chan->ed25519_identity);
+ } else {
+ strlcpy(expected_ed, "no ed25519 key", sizeof(expected_ed));
+ }
const int using_hardcoded_fingerprints =
!networkstatus_get_reasonably_live_consensus(time(NULL),
usable_consensus_flavor());
@@ -1675,9 +1721,11 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
}
log_fn(severity, LD_HANDSHAKE,
- "Tried connecting to router at %s:%d, but identity key was not "
- "as expected: wanted %s but got %s.%s",
- conn->base_.address, conn->base_.port, expected, seen, extra_log);
+ "Tried connecting to router at %s:%d, but RSA identity key was not "
+ "as expected: wanted %s + %s but got %s + %s.%s",
+ conn->base_.address, conn->base_.port,
+ expected_rsa, expected_ed, seen_rsa, seen_ed, extra_log);
+
/* Tell the new guard API about the channel failure */
entry_guard_chan_failed(TLS_CHAN_TO_BASE(conn->chan));
#ifdef ENABLE_LEGACY_GUARD_ALGORITHM
@@ -1694,9 +1742,24 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
conn);
return -1;
}
+
+ if (!expected_ed_key && ed_peer_id) {
+ log_info(LD_HANDSHAKE, "(we had no Ed25519 ID in mind when we made this "
+ "connection.");
+ connection_or_set_identity_digest(conn,
+ (const char*)rsa_peer_id, ed_peer_id);
+ changed_identity = 1;
+ }
+
+ if (changed_identity) {
+ /* If we learned an identity for this connection, then we might have
+ * just discovered it to be canonical. */
+ connection_or_check_canonicity(conn, conn->handshake_state->started_here);
+ }
+
if (authdir_mode_tests_reachability(options)) {
dirserv_orconn_tls_done(&conn->base_.addr, conn->base_.port,
- (const char*)rsa_peer_id /*, ed_id XXXX */);
+ (const char*)rsa_peer_id, ed_peer_id);
}
return 0;
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index da95718ac9..80a5bddb14 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -12,14 +12,13 @@
#ifndef TOR_CONNECTION_OR_H
#define TOR_CONNECTION_OR_H
-void connection_or_remove_from_identity_map(or_connection_t *conn);
+void connection_or_clear_identity(or_connection_t *conn);
void connection_or_clear_identity_map(void);
void clear_broken_connection_map(int disable);
or_connection_t *connection_or_get_for_extend(const char *digest,
const tor_addr_t *target_addr,
const char **msg_out,
int *launch_out);
-void connection_or_set_bad_connections(const char *digest, int force);
void connection_or_block_renegotiation(or_connection_t *conn);
int connection_or_reached_eof(or_connection_t *conn);
@@ -111,5 +110,7 @@ void var_cell_free(var_cell_t *cell);
/* DOCDOC */
#define MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS 4
+void connection_or_group_set_badness_(smartlist_t *group, int force);
+
#endif
diff --git a/src/or/control.c b/src/or/control.c
index 9a8845a0d3..248c780cce 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -2030,7 +2030,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
} else if (!strcmpstart(question, "dir/status/")) {
*answer = tor_strdup("");
} else if (!strcmp(question, "dir/status-vote/current/consensus")) { /* v3 */
- if (directory_caches_dir_info(get_options())) {
+ if (we_want_to_fetch_flavor(get_options(), FLAV_NS)) {
const cached_dir_t *consensus = dirserv_get_consensus("ns");
if (consensus)
*answer = tor_strdup(consensus->dir);
diff --git a/src/or/directory.c b/src/or/directory.c
index 9c039a006f..1c9ee96c43 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -2994,6 +2994,28 @@ handle_get_frontpage(dir_connection_t *conn, const get_handler_args_t *args)
return 0;
}
+/** Warn that the consensus <b>v</b> of type <b>flavor</b> is too old and will
+ * not be served to clients. Rate-limit the warning to avoid logging an entry
+ * on every request.
+ */
+static void
+warn_consensus_is_too_old(networkstatus_t *v, const char *flavor, time_t now)
+{
+#define TOO_OLD_WARNING_INTERVAL (60*60)
+ static ratelim_t warned = RATELIM_INIT(TOO_OLD_WARNING_INTERVAL);
+ char timestamp[ISO_TIME_LEN+1];
+ char *dupes;
+
+ if ((dupes = rate_limit_log(&warned, now))) {
+ format_local_iso_time(timestamp, v->valid_until);
+ log_warn(LD_DIRSERV, "Our %s%sconsensus is too old, so we will not "
+ "serve it to clients. It was valid until %s local time and we "
+ "continued to serve it for up to 24 hours after it expired.%s",
+ flavor ? flavor : "", flavor ? " " : "", timestamp, dupes);
+ tor_free(dupes);
+ }
+}
+
/** Helper function for GET /tor/status-vote/current/consensus
*/
static int
@@ -3038,6 +3060,15 @@ handle_get_current_consensus(dir_connection_t *conn,
v = networkstatus_get_latest_consensus_by_flavor(flav);
+ if (v && !networkstatus_consensus_reasonably_live(v, now)) {
+ write_http_status_line(conn, 404, "Consensus is too old");
+ warn_consensus_is_too_old(v, flavor, now);
+ smartlist_free(dir_fps);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_FOUND);
+ tor_free(flavor);
+ goto done;
+ }
+
if (v && want_fps &&
!client_likes_consensus(v, want_fps)) {
write_http_status_line(conn, 404, "Consensus not signed by sufficient "
@@ -4043,10 +4074,12 @@ STATIC int
next_random_exponential_delay(int delay, int max_delay)
{
/* Check preconditions */
+ if (BUG(max_delay < 0))
+ max_delay = 0;
if (BUG(delay > max_delay))
delay = max_delay;
- if (BUG(delay == INT_MAX))
- delay -= 1; /* prevent overflow */
+ if (delay == INT_MAX)
+ return INT_MAX; /* prevent overflow */
if (BUG(delay < 0))
delay = 0;
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 7ff37b4c62..4d349ddf16 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -1069,8 +1069,10 @@ directory_fetches_dir_info_later(const or_options_t *options)
return options->UseBridges != 0;
}
-/** Return true iff we want to fetch and keep certificates for authorities
+/** Return true iff we want to serve certificates for authorities
* that we don't acknowledge as authorities ourself.
+ * Use we_want_to_fetch_unknown_auth_certs to check if we want to fetch
+ * and keep these certificates.
*/
int
directory_caches_unknown_auth_certs(const or_options_t *options)
@@ -1078,11 +1080,14 @@ directory_caches_unknown_auth_certs(const or_options_t *options)
return dir_server_mode(options) || options->BridgeRelay;
}
-/** Return 1 if we want to keep descriptors, networkstatuses, etc around.
+/** Return 1 if we want to fetch and serve descriptors, networkstatuses, etc
* Else return 0.
* Check options->DirPort_set and directory_permits_begindir_requests()
* to see if we are willing to serve these directory documents to others via
* the DirPort and begindir-over-ORPort, respectively.
+ *
+ * To check if we should fetch documents, use we_want_to_fetch_flavor and
+ * we_want_to_fetch_unknown_auth_certs instead of this function.
*/
int
directory_caches_dir_info(const or_options_t *options)
@@ -1097,7 +1102,7 @@ directory_caches_dir_info(const or_options_t *options)
should_refuse_unknown_exits(options);
}
-/** Return 1 if we want to allow remote people to ask us directory
+/** Return 1 if we want to allow remote clients to ask us directory
* requests via the "begin_dir" interface, which doesn't require
* having any separate port open. */
int
@@ -2051,12 +2056,8 @@ get_possible_sybil_list(const smartlist_t *routers)
int addr_count;
/* Allow at most this number of Tor servers on a single IP address, ... */
int max_with_same_addr = options->AuthDirMaxServersPerAddr;
- /* ... unless it's a directory authority, in which case allow more. */
- int max_with_same_addr_on_authority = options->AuthDirMaxServersPerAuthAddr;
if (max_with_same_addr <= 0)
max_with_same_addr = INT_MAX;
- if (max_with_same_addr_on_authority <= 0)
- max_with_same_addr_on_authority = INT_MAX;
smartlist_add_all(routers_by_ip, routers);
smartlist_sort(routers_by_ip, compare_routerinfo_by_ip_and_bw_);
@@ -2069,9 +2070,7 @@ get_possible_sybil_list(const smartlist_t *routers)
last_addr = ri->addr;
addr_count = 1;
} else if (++addr_count > max_with_same_addr) {
- if (!router_addr_is_trusted_dir(ri->addr) ||
- addr_count > max_with_same_addr_on_authority)
- digestmap_set(omit_as_sybil, ri->cache_info.identity_digest, ri);
+ digestmap_set(omit_as_sybil, ri->cache_info.identity_digest, ri);
}
} SMARTLIST_FOREACH_END(ri);
@@ -2231,8 +2230,8 @@ dirserv_set_routerstatus_testing(routerstatus_t *rs)
}
/** Routerstatus <b>rs</b> is part of a group of routers that are on
- * too narrow an IP-space. Clear out its flags: we don't want people
- * using it.
+ * too narrow an IP-space. Clear out its flags since we don't want it be used
+ * because of its Sybil-like appearance.
*/
static void
clear_status_flags_on_sybil(routerstatus_t *rs)
@@ -3171,7 +3170,8 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
void
dirserv_orconn_tls_done(const tor_addr_t *addr,
uint16_t or_port,
- const char *digest_rcvd)
+ const char *digest_rcvd,
+ const ed25519_public_key_t *ed_id_rcvd)
{
node_t *node = NULL;
tor_addr_port_t orport;
@@ -3183,8 +3183,25 @@ dirserv_orconn_tls_done(const tor_addr_t *addr,
node = node_get_mutable_by_id(digest_rcvd);
if (node == NULL || node->ri == NULL)
return;
+
ri = node->ri;
+ if (get_options()->AuthDirTestEd25519LinkKeys &&
+ ri->cache_info.signing_key_cert) {
+ /* We allow the node to have an ed25519 key if we haven't been told one in
+ * the routerinfo, but if we *HAVE* been told one in the routerinfo, it
+ * needs to match. */
+ const ed25519_public_key_t *expected_id =
+ &ri->cache_info.signing_key_cert->signing_key;
+ tor_assert(!ed25519_public_key_is_zero(expected_id));
+ if (! ed_id_rcvd || ! ed25519_pubkey_eq(ed_id_rcvd, expected_id)) {
+ log_info(LD_DIRSERV, "Router at %s:%d with RSA ID %s "
+ "did not present expected Ed25519 ID.",
+ fmt_addr(addr), or_port, hex_str(digest_rcvd, DIGEST_LEN));
+ return; /* Don't mark it as reachable. */
+ }
+ }
+
tor_addr_copy(&orport.addr, addr);
orport.port = or_port;
if (router_has_orport(ri, &orport)) {
@@ -3240,23 +3257,31 @@ dirserv_should_launch_reachability_test(const routerinfo_t *ri,
void
dirserv_single_reachability_test(time_t now, routerinfo_t *router)
{
+ const or_options_t *options = get_options();
channel_t *chan = NULL;
node_t *node = NULL;
tor_addr_t router_addr;
+ const ed25519_public_key_t *ed_id_key;
(void) now;
tor_assert(router);
node = node_get_mutable_by_id(router->cache_info.identity_digest);
tor_assert(node);
+ if (options->AuthDirTestEd25519LinkKeys &&
+ node_supports_ed25519_link_authentication(node)) {
+ ed_id_key = &router->cache_info.signing_key_cert->signing_key;
+ } else {
+ ed_id_key = NULL;
+ }
+
/* IPv4. */
log_debug(LD_OR,"Testing reachability of %s at %s:%u.",
router->nickname, fmt_addr32(router->addr), router->or_port);
tor_addr_from_ipv4h(&router_addr, router->addr);
chan = channel_tls_connect(&router_addr, router->or_port,
router->cache_info.identity_digest,
- NULL // XXXX Ed25519 ID.
- );
+ ed_id_key);
if (chan) command_setup_channel(chan);
/* Possible IPv6. */
@@ -3269,8 +3294,7 @@ dirserv_single_reachability_test(time_t now, routerinfo_t *router)
router->ipv6_orport);
chan = channel_tls_connect(&router->ipv6_addr, router->ipv6_orport,
router->cache_info.identity_digest,
- NULL // XXXX Ed25519 ID.
- );
+ ed_id_key);
if (chan) command_setup_channel(chan);
}
}
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index 1e4f27e3d7..e83da5e5ac 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -73,7 +73,8 @@ int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
const char **msg);
void dirserv_orconn_tls_done(const tor_addr_t *addr,
uint16_t or_port,
- const char *digest_rcvd);
+ const char *digest_rcvd,
+ const ed25519_public_key_t *ed_id_rcvd);
int dirserv_should_launch_reachability_test(const routerinfo_t *ri,
const routerinfo_t *ri_old);
void dirserv_single_reachability_test(time_t now, routerinfo_t *router);
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index c5c0a88b09..8768b2a1d1 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -284,7 +284,7 @@ dnsserv_reject_request(entry_connection_t *conn)
}
/** Look up the original name that corresponds to 'addr' in req. We use this
- * to preserve case in order to facilitate people using 0x20-hacks to avoid
+ * to preserve case in order to facilitate clients using 0x20-hacks to avoid
* DNS poisoning. */
static const char *
evdns_get_orig_address(const struct evdns_server_request *req,
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index ac5398f5f8..4c6824760c 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -118,6 +118,7 @@
#define ENTRYNODES_PRIVATE
#include "or.h"
+#include "channel.h"
#include "bridges.h"
#include "circpathbias.h"
#include "circuitbuild.h"
@@ -126,7 +127,6 @@
#include "config.h"
#include "confparse.h"
#include "connection.h"
-#include "connection_or.h"
#include "control.h"
#include "directory.h"
#include "entrynodes.h"
@@ -4859,7 +4859,7 @@ entries_retry_helper(const or_options_t *options, int act)
* the node down and undermine the retry attempt. We mark even
* the established conns, since if the network just came back
* we'll want to attach circuits to fresh conns. */
- connection_or_set_bad_connections(node->identity, 1);
+ channel_update_bad_for_new_circs(node->identity, 1);
/* mark this entry node for retry */
router_set_status(node->identity, 1);
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index aaf5c4bdcd..c2b3bbb839 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -424,8 +424,8 @@ configure_accounting(time_t now)
if (-0.50 <= delta && delta <= 0.50) {
/* The start of the period is now a little later or earlier than we
* remembered. That's fine; we might lose some bytes we could otherwise
- * have written, but better to err on the side of obeying people's
- * accounting settings. */
+ * have written, but better to err on the side of obeying accounting
+ * settings. */
log_info(LD_ACCT, "Accounting interval moved by %.02f%%; "
"that's fine.", delta*100);
interval_end_time = start_of_accounting_period_after(now);
@@ -896,7 +896,7 @@ hibernate_go_dormant(time_t now)
log_notice(LD_ACCT,"Going dormant. Blowing away remaining connections.");
/* Close all OR/AP/exit conns. Leave dir conns because we still want
- * to be able to upload server descriptors so people know we're still
+ * to be able to upload server descriptors so clients know we're still
* running, and download directories so we can detect if we're obsolete.
* Leave control conns because we still want to be controllable.
*/
diff --git a/src/or/hs_circuitmap.c b/src/or/hs_circuitmap.c
new file mode 100644
index 0000000000..5003b4b593
--- /dev/null
+++ b/src/or/hs_circuitmap.c
@@ -0,0 +1,328 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file hs_circuitmap.c
+ *
+ * \brief Manage the hidden service circuitmap: A hash table that maps binary
+ * tokens to introduction and rendezvous circuits.
+ **/
+
+#define HS_CIRCUITMAP_PRIVATE
+
+#include "or.h"
+#include "config.h"
+#include "circuitlist.h"
+#include "hs_circuitmap.h"
+
+/************************** HS circuitmap code *******************************/
+
+/* This is the hidden service circuitmap. It's a hash table that maps
+ introduction and rendezvous tokens to specific circuits such that given a
+ token it's easy to find the corresponding circuit. */
+static struct hs_circuitmap_ht *the_hs_circuitmap = NULL;
+
+/* This is a helper function used by the hash table code (HT_). It returns 1 if
+ * two circuits have the same HS token. */
+static int
+hs_circuits_have_same_token(const or_circuit_t *first_circuit,
+ const or_circuit_t *second_circuit)
+{
+ const hs_token_t *first_token;
+ const hs_token_t *second_token;
+
+ tor_assert(first_circuit);
+ tor_assert(second_circuit);
+
+ first_token = first_circuit->hs_token;
+ second_token = second_circuit->hs_token;
+
+ /* Both circs must have a token */
+ if (BUG(!first_token) || BUG(!second_token)) {
+ return 0;
+ }
+
+ if (first_token->type != second_token->type) {
+ return 0;
+ }
+
+ if (first_token->token_len != second_token->token_len)
+ return 0;
+
+ return tor_memeq(first_token->token,
+ second_token->token,
+ first_token->token_len);
+}
+
+/* This is a helper function for the hash table code (HT_). It hashes a circuit
+ * HS token into an unsigned int for use as a key by the hash table routines.*/
+static inline unsigned int
+hs_circuit_hash_token(const or_circuit_t *circuit)
+{
+ tor_assert(circuit->hs_token);
+
+ return (unsigned) siphash24g(circuit->hs_token->token,
+ circuit->hs_token->token_len);
+}
+
+/* Register the circuitmap hash table */
+HT_PROTOTYPE(hs_circuitmap_ht, // The name of the hashtable struct
+ or_circuit_t, // The name of the element struct,
+ hs_circuitmap_node, // The name of HT_ENTRY member
+ hs_circuit_hash_token, hs_circuits_have_same_token)
+
+HT_GENERATE2(hs_circuitmap_ht, or_circuit_t, hs_circuitmap_node,
+ hs_circuit_hash_token, hs_circuits_have_same_token,
+ 0.6, tor_reallocarray, tor_free_)
+
+#ifdef TOR_UNIT_TESTS
+
+/* Return the global HS circuitmap. Used by unittests. */
+hs_circuitmap_ht *
+get_hs_circuitmap(void)
+{
+ return the_hs_circuitmap;
+}
+
+#endif
+
+/****************** HS circuitmap utility functions **************************/
+
+/** Return a new HS token of type <b>type</b> containing <b>token</b>. */
+static hs_token_t *
+hs_token_new(hs_token_type_t type, size_t token_len,
+ const uint8_t *token)
+{
+ tor_assert(token);
+
+ hs_token_t *hs_token = tor_malloc_zero(sizeof(hs_token_t));
+ hs_token->type = type;
+ hs_token->token_len = token_len;
+ hs_token->token = tor_memdup(token, token_len);
+
+ return hs_token;
+}
+
+/** Free memory allocated by this <b>hs_token</b>. */
+static void
+hs_token_free(hs_token_t *hs_token)
+{
+ if (!hs_token) {
+ return;
+ }
+
+ tor_free(hs_token->token);
+ tor_free(hs_token);
+}
+
+/** Return the circuit from the circuitmap with token <b>search_token</b>. */
+static or_circuit_t *
+get_circuit_with_token(hs_token_t *search_token)
+{
+ tor_assert(the_hs_circuitmap);
+
+ /* We use a dummy circuit object for the hash table search routine. */
+ or_circuit_t search_circ;
+ search_circ.hs_token = search_token;
+ return HT_FIND(hs_circuitmap_ht, the_hs_circuitmap, &search_circ);
+}
+
+/* Helper function that registers <b>circ</b> with <b>token</b> on the HS
+ circuitmap. This function steals reference of <b>token</b>. */
+static void
+hs_circuitmap_register_impl(or_circuit_t *circ, hs_token_t *token)
+{
+ tor_assert(circ);
+ tor_assert(token);
+ tor_assert(the_hs_circuitmap);
+
+ /* If this circuit already has a token, clear it. */
+ if (circ->hs_token) {
+ hs_circuitmap_remove_circuit(circ);
+ }
+
+ /* Kill old circuits with the same token. We want new intro/rend circuits to
+ take precedence over old ones, so that HSes and clients and reestablish
+ killed circuits without changing the HS token. */
+ {
+ or_circuit_t *found_circ;
+ found_circ = get_circuit_with_token(token);
+ if (found_circ) {
+ hs_circuitmap_remove_circuit(found_circ);
+ if (!found_circ->base_.marked_for_close) {
+ circuit_mark_for_close(TO_CIRCUIT(found_circ),
+ END_CIRC_REASON_FINISHED);
+ }
+ }
+ }
+
+ /* Register circuit and token to circuitmap. */
+ circ->hs_token = token;
+ HT_INSERT(hs_circuitmap_ht, the_hs_circuitmap, circ);
+}
+
+/** Helper function: Register <b>circ</b> of <b>type</b> on the HS
+ * circuitmap. Use the HS <b>token</b> as the key to the hash table. If
+ * <b>token</b> is not set, clear the circuit of any HS tokens. */
+static void
+hs_circuitmap_register_circuit(or_circuit_t *circ,
+ hs_token_type_t type, size_t token_len,
+ const uint8_t *token)
+{
+ hs_token_t *hs_token = NULL;
+
+ /* Create a new token and register it to the circuitmap */
+ tor_assert(token);
+ hs_token = hs_token_new(type, token_len, token);
+ tor_assert(hs_token);
+ hs_circuitmap_register_impl(circ, hs_token);
+}
+
+/* Query circuitmap for circuit with <b>token</b> of size <b>token_len</b>.
+ * Only returns a circuit with purpose equal to the <b>wanted_circ_purpose</b>
+ * parameter and if it is NOT marked for close. Return NULL if no such circuit
+ * is found. */
+static or_circuit_t *
+hs_circuitmap_get_circuit(hs_token_type_t type,
+ size_t token_len,
+ const uint8_t *token,
+ uint8_t wanted_circ_purpose)
+{
+ or_circuit_t *found_circ = NULL;
+
+ tor_assert(the_hs_circuitmap);
+
+ /* Check the circuitmap if we have a circuit with this token */
+ {
+ hs_token_t *search_hs_token = hs_token_new(type, token_len, token);
+ tor_assert(search_hs_token);
+ found_circ = get_circuit_with_token(search_hs_token);
+ hs_token_free(search_hs_token);
+ }
+
+ /* Check that the circuit is useful to us */
+ if (!found_circ ||
+ found_circ->base_.purpose != wanted_circ_purpose ||
+ found_circ->base_.marked_for_close) {
+ return NULL;
+ }
+
+ return found_circ;
+}
+
+/************** Public circuitmap API ****************************************/
+
+/* Public function: Return v3 introduction circuit with <b>auth_key</b>. Return
+ * NULL if no such circuit is found in the circuitmap. */
+or_circuit_t *
+hs_circuitmap_get_intro_circ_v3(const ed25519_public_key_t *auth_key)
+{
+ tor_assert(auth_key);
+
+ return hs_circuitmap_get_circuit(HS_TOKEN_INTRO_V3,
+ ED25519_PUBKEY_LEN, auth_key->pubkey,
+ CIRCUIT_PURPOSE_INTRO_POINT);
+}
+
+/* Public function: Return v2 introduction circuit with <b>digest</b>. Return
+ * NULL if no such circuit is found in the circuitmap. */
+or_circuit_t *
+hs_circuitmap_get_intro_circ_v2(const uint8_t *digest)
+{
+ tor_assert(digest);
+
+ return hs_circuitmap_get_circuit(HS_TOKEN_INTRO_V2,
+ REND_TOKEN_LEN, digest,
+ CIRCUIT_PURPOSE_INTRO_POINT);
+}
+
+/* Public function: Return rendezvous circuit with rendezvous
+ * <b>cookie</b>. Return NULL if no such circuit is found in the circuitmap. */
+or_circuit_t *
+hs_circuitmap_get_rend_circ(const uint8_t *cookie)
+{
+ tor_assert(cookie);
+
+ return hs_circuitmap_get_circuit(HS_TOKEN_REND,
+ REND_TOKEN_LEN, cookie,
+ CIRCUIT_PURPOSE_REND_POINT_WAITING);
+}
+
+/* Public function: Register rendezvous circuit with key <b>cookie</b> to the
+ * circuitmap. */
+void
+hs_circuitmap_register_rend_circ(or_circuit_t *circ, const uint8_t *cookie)
+{
+ hs_circuitmap_register_circuit(circ,
+ HS_TOKEN_REND,
+ REND_TOKEN_LEN, cookie);
+}
+
+/* Public function: Register v2 intro circuit with key <b>digest</b> to the
+ * circuitmap. */
+void
+hs_circuitmap_register_intro_circ_v2(or_circuit_t *circ, const uint8_t *digest)
+{
+ hs_circuitmap_register_circuit(circ,
+ HS_TOKEN_INTRO_V2,
+ REND_TOKEN_LEN, digest);
+}
+
+/* Public function: Register v3 intro circuit with key <b>auth_key</b> to the
+ * circuitmap. */
+void
+hs_circuitmap_register_intro_circ_v3(or_circuit_t *circ,
+ const ed25519_public_key_t *auth_key)
+{
+ hs_circuitmap_register_circuit(circ,
+ HS_TOKEN_INTRO_V3,
+ ED25519_PUBKEY_LEN, auth_key->pubkey);
+}
+
+/** Remove this circuit from the HS circuitmap. Clear its HS token, and remove
+ * it from the hashtable. */
+void
+hs_circuitmap_remove_circuit(or_circuit_t *circ)
+{
+ tor_assert(the_hs_circuitmap);
+
+ if (!circ || !circ->hs_token) {
+ return;
+ }
+
+ /* Remove circ from circuitmap */
+ or_circuit_t *tmp;
+ tmp = HT_REMOVE(hs_circuitmap_ht, the_hs_circuitmap, circ);
+ /* ... and ensure the removal was successful. */
+ if (tmp) {
+ tor_assert(tmp == circ);
+ } else {
+ log_warn(LD_BUG, "Could not find circuit (%u) in circuitmap.",
+ circ->p_circ_id);
+ }
+
+ /* Clear token from circ */
+ hs_token_free(circ->hs_token);
+ circ->hs_token = NULL;
+}
+
+/* Initialize the global HS circuitmap. */
+void
+hs_circuitmap_init(void)
+{
+ tor_assert(!the_hs_circuitmap);
+
+ the_hs_circuitmap = tor_malloc_zero(sizeof(struct hs_circuitmap_ht));
+ HT_INIT(hs_circuitmap_ht, the_hs_circuitmap);
+}
+
+/* Free all memory allocated by the global HS circuitmap. */
+void
+hs_circuitmap_free_all(void)
+{
+ if (the_hs_circuitmap) {
+ HT_CLEAR(hs_circuitmap_ht, the_hs_circuitmap);
+ tor_free(the_hs_circuitmap);
+ }
+}
+
diff --git a/src/or/hs_circuitmap.h b/src/or/hs_circuitmap.h
new file mode 100644
index 0000000000..b587039310
--- /dev/null
+++ b/src/or/hs_circuitmap.h
@@ -0,0 +1,70 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file hs_circuitmap.h
+ * \brief Header file for hs_circuitmap.c.
+ **/
+
+#ifndef TOR_HS_CIRCUITMAP_H
+#define TOR_HS_CIRCUITMAP_H
+
+typedef HT_HEAD(hs_circuitmap_ht, or_circuit_t) hs_circuitmap_ht;
+
+typedef struct hs_token_s hs_token_t;
+struct or_circuit_t;
+
+/** Public HS circuitmap API: */
+
+struct or_circuit_t *hs_circuitmap_get_rend_circ(const uint8_t *cookie);
+struct or_circuit_t *hs_circuitmap_get_intro_circ_v3(
+ const ed25519_public_key_t *auth_key);
+struct or_circuit_t *hs_circuitmap_get_intro_circ_v2(const uint8_t *digest);
+
+void hs_circuitmap_register_rend_circ(struct or_circuit_t *circ,
+ const uint8_t *cookie);
+void hs_circuitmap_register_intro_circ_v2(struct or_circuit_t *circ,
+ const uint8_t *digest);
+void hs_circuitmap_register_intro_circ_v3(struct or_circuit_t *circ,
+ const ed25519_public_key_t *auth_key);
+
+void hs_circuitmap_remove_circuit(struct or_circuit_t *circ);
+
+void hs_circuitmap_init(void);
+void hs_circuitmap_free_all(void);
+
+#ifdef HS_CIRCUITMAP_PRIVATE
+
+/** Represents the type of HS token. */
+typedef enum {
+ /** A rendezvous cookie (128bit)*/
+ HS_TOKEN_REND,
+ /** A v2 introduction point pubkey (160bit) */
+ HS_TOKEN_INTRO_V2,
+ /** A v3 introduction point pubkey (256bit) */
+ HS_TOKEN_INTRO_V3,
+} hs_token_type_t;
+
+/** Represents a token used in the HS protocol. Each such token maps to a
+ * specific introduction or rendezvous circuit. */
+struct hs_token_s {
+ /* Type of HS token. */
+ hs_token_type_t type;
+
+ /* The size of the token (depends on the type). */
+ size_t token_len;
+
+ /* The token itself. Memory allocated at runtime. */
+ uint8_t *token;
+};
+
+#endif /* HS_CIRCUITMAP_PRIVATE */
+
+#ifdef TOR_UNIT_TESTS
+
+hs_circuitmap_ht *get_hs_circuitmap(void);
+
+#endif /* TOR_UNIT_TESTS */
+
+#endif /* TOR_HS_CIRCUITMAP_H */
+
diff --git a/src/or/hs_common.h b/src/or/hs_common.h
index 2502f35ad4..8158d278df 100644
--- a/src/or/hs_common.h
+++ b/src/or/hs_common.h
@@ -17,6 +17,12 @@
/* Version 3 of the protocol (prop224). */
#define HS_VERSION_THREE 3
+/* Denotes ed25519 authentication key on ESTABLISH_INTRO cell. */
+#define AUTH_KEY_ED25519 0x02
+
+/* String prefix for the signature of ESTABLISH_INTRO */
+#define ESTABLISH_INTRO_SIG_PREFIX "Tor establish-intro cell v1"
+
void rend_data_free(rend_data_t *data);
rend_data_t *rend_data_dup(const rend_data_t *data);
rend_data_t *rend_data_client_create(const char *onion_address,
diff --git a/src/or/hs_descriptor.c b/src/or/hs_descriptor.c
index d381732eff..37aa1d745e 100644
--- a/src/or/hs_descriptor.c
+++ b/src/or/hs_descriptor.c
@@ -15,6 +15,7 @@
#include "ed25519_cert.h" /* Trunnel interface. */
#include "parsecommon.h"
#include "rendcache.h"
+#include "torcert.h" /* tor_cert_encode_ed22519() */
/* Constant string value used for the descriptor format. */
#define str_hs_desc "hs-descriptor"
@@ -135,45 +136,6 @@ desc_encrypted_data_free_contents(hs_desc_encrypted_data_t *desc)
/* === ENCODING === */
-/* Encode the ed25519 certificate <b>cert</b> and put the newly allocated
- * string in <b>cert_str_out</b>. Return 0 on success else a negative value. */
-STATIC int
-encode_cert(const tor_cert_t *cert, char **cert_str_out)
-{
- int ret = -1;
- char *ed_cert_b64 = NULL;
- size_t ed_cert_b64_len;
-
- tor_assert(cert);
- tor_assert(cert_str_out);
-
- /* Get the encoded size and add the NUL byte. */
- ed_cert_b64_len = base64_encode_size(cert->encoded_len,
- BASE64_ENCODE_MULTILINE) + 1;
- ed_cert_b64 = tor_malloc_zero(ed_cert_b64_len);
-
- /* Base64 encode the encoded certificate. */
- if (base64_encode(ed_cert_b64, ed_cert_b64_len,
- (const char *) cert->encoded, cert->encoded_len,
- BASE64_ENCODE_MULTILINE) < 0) {
- log_err(LD_BUG, "Couldn't base64-encode descriptor signing key cert!");
- goto err;
- }
-
- /* Put everything together in a NUL terminated string. */
- tor_asprintf(cert_str_out,
- "-----BEGIN ED25519 CERT-----\n"
- "%s"
- "-----END ED25519 CERT-----",
- ed_cert_b64);
- /* Success! */
- ret = 0;
-
- err:
- tor_free(ed_cert_b64);
- return ret;
-}
-
/* Encode the given link specifier objects into a newly allocated string.
* This can't fail so caller can always assume a valid string being
* returned. */
@@ -327,7 +289,7 @@ encode_enc_key(const ed25519_keypair_t *sig_key,
if (!cross_cert) {
goto err;
}
- ret = encode_cert(cross_cert, &encoded_cert);
+ ret = tor_cert_encode_ed22519(cross_cert, &encoded_cert);
tor_cert_free(cross_cert);
if (ret) {
goto err;
@@ -375,7 +337,7 @@ encode_intro_point(const ed25519_keypair_t *sig_key,
/* Authentication key encoding. */
{
char *encoded_cert;
- if (encode_cert(ip->auth_key_cert, &encoded_cert) < 0) {
+ if (tor_cert_encode_ed22519(ip->auth_key_cert, &encoded_cert) < 0) {
goto err;
}
smartlist_add_asprintf(lines, "%s\n%s", str_ip_auth_key, encoded_cert);
@@ -769,7 +731,7 @@ desc_encode_v3(const hs_descriptor_t *desc, char **encoded_out)
"(%d)", (int) desc->plaintext_data.signing_key_cert->cert_type);
goto err;
}
- if (encode_cert(desc->plaintext_data.signing_key_cert,
+ if (tor_cert_encode_ed22519(desc->plaintext_data.signing_key_cert,
&encoded_cert) < 0) {
/* The function will print error logs. */
goto err;
diff --git a/src/or/hs_descriptor.h b/src/or/hs_descriptor.h
index 895bed2485..083d353860 100644
--- a/src/or/hs_descriptor.h
+++ b/src/or/hs_descriptor.h
@@ -216,7 +216,6 @@ size_t hs_desc_plaintext_obj_size(const hs_desc_plaintext_data_t *data);
#ifdef HS_DESCRIPTOR_PRIVATE
/* Encoding. */
-STATIC int encode_cert(const tor_cert_t *cert, char **cert_str_out);
STATIC char *encode_link_specifiers(const smartlist_t *specs);
STATIC size_t build_plaintext_padding(const char *plaintext,
size_t plaintext_len,
diff --git a/src/or/hs_intropoint.c b/src/or/hs_intropoint.c
new file mode 100644
index 0000000000..bfc7ec3876
--- /dev/null
+++ b/src/or/hs_intropoint.c
@@ -0,0 +1,288 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file hs_intropoint.c
+ * \brief Implement next generation introductions point functionality
+ **/
+
+#define HS_INTROPOINT_PRIVATE
+
+#include "or.h"
+#include "circuitlist.h"
+#include "circuituse.h"
+#include "config.h"
+#include "relay.h"
+#include "rendmid.h"
+#include "rephist.h"
+
+#include "hs/cell_establish_intro.h"
+#include "hs/cell_common.h"
+#include "hs_circuitmap.h"
+#include "hs_intropoint.h"
+#include "hs_common.h"
+
+/** Extract the authentication key from an ESTABLISH_INTRO <b>cell</b> and
+ * place it in <b>auth_key_out</b>. */
+STATIC void
+get_auth_key_from_establish_intro_cell(ed25519_public_key_t *auth_key_out,
+ const hs_cell_establish_intro_t *cell)
+{
+ tor_assert(auth_key_out);
+
+ const uint8_t *key_array =
+ hs_cell_establish_intro_getconstarray_auth_key(cell);
+ tor_assert(key_array);
+ tor_assert(hs_cell_establish_intro_getlen_auth_key(cell) ==
+ sizeof(auth_key_out->pubkey));
+
+ memcpy(auth_key_out->pubkey, key_array, cell->auth_key_len);
+}
+
+/** We received an ESTABLISH_INTRO <b>cell</b>. Verify its signature and MAC,
+ * given <b>circuit_key_material</b>. Return 0 on success else -1 on error. */
+STATIC int
+verify_establish_intro_cell(const hs_cell_establish_intro_t *cell,
+ const uint8_t *circuit_key_material,
+ size_t circuit_key_material_len)
+{
+ /* We only reach this function if the first byte of the cell is 0x02 which
+ * means that auth_key_type is AUTH_KEY_ED25519, hence this check should
+ * always pass. See hs_intro_received_establish_intro(). */
+ if (BUG(cell->auth_key_type != AUTH_KEY_ED25519)) {
+ return -1;
+ }
+
+ /* Make sure the auth key length is of the right size for this type. For
+ * EXTRA safety, we check both the size of the array and the length which
+ * must be the same. Safety first!*/
+ if (hs_cell_establish_intro_getlen_auth_key(cell) != ED25519_PUBKEY_LEN ||
+ hs_cell_establish_intro_get_auth_key_len(cell) != ED25519_PUBKEY_LEN) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "ESTABLISH_INTRO auth key length is invalid");
+ return -1;
+ }
+
+ const uint8_t *msg = cell->start_cell;
+
+ /* Verify the sig */
+ {
+ ed25519_signature_t sig_struct;
+ const uint8_t *sig_array = hs_cell_establish_intro_getconstarray_sig(cell);
+
+ if (hs_cell_establish_intro_getlen_sig(cell) != sizeof(sig_struct.sig)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "ESTABLISH_INTRO sig len is invalid");
+ return -1;
+ }
+ /* We are now sure that sig_len is of the right size. */
+ memcpy(sig_struct.sig, sig_array, cell->sig_len);
+
+ ed25519_public_key_t auth_key;
+ get_auth_key_from_establish_intro_cell(&auth_key, cell);
+
+ const size_t sig_msg_len = cell->end_sig_fields - msg;
+ int sig_mismatch = ed25519_checksig_prefixed(&sig_struct,
+ (uint8_t*) msg, sig_msg_len,
+ ESTABLISH_INTRO_SIG_PREFIX,
+ &auth_key);
+ if (sig_mismatch) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "ESTABLISH_INTRO signature not as expected");
+ return -1;
+ }
+ }
+
+ /* Verify the MAC */
+ {
+ const size_t auth_msg_len = cell->end_mac_fields - msg;
+ uint8_t mac[DIGEST256_LEN];
+ crypto_mac_sha3_256(mac, sizeof(mac),
+ circuit_key_material, circuit_key_material_len,
+ msg, auth_msg_len);
+ if (tor_memneq(mac, cell->handshake_mac, sizeof(mac))) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "ESTABLISH_INTRO handshake_auth not as expected");
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+/* Send an INTRO_ESTABLISHED cell to <b>circ</b>. */
+MOCK_IMPL(int,
+hs_intro_send_intro_established_cell,(or_circuit_t *circ))
+{
+ int ret;
+ uint8_t *encoded_cell = NULL;
+ ssize_t encoded_len, result_len;
+ hs_cell_intro_established_t *cell;
+ cell_extension_t *ext;
+
+ tor_assert(circ);
+
+ /* Build the cell payload. */
+ cell = hs_cell_intro_established_new();
+ ext = cell_extension_new();
+ cell_extension_set_num(ext, 0);
+ hs_cell_intro_established_set_extensions(cell, ext);
+ /* Encode the cell to binary format. */
+ encoded_len = hs_cell_intro_established_encoded_len(cell);
+ tor_assert(encoded_len > 0);
+ encoded_cell = tor_malloc_zero(encoded_len);
+ result_len = hs_cell_intro_established_encode(encoded_cell, encoded_len,
+ cell);
+ tor_assert(encoded_len == result_len);
+
+ ret = relay_send_command_from_edge(0, TO_CIRCUIT(circ),
+ RELAY_COMMAND_INTRO_ESTABLISHED,
+ (char *) encoded_cell, encoded_len,
+ NULL);
+ /* On failure, the above function will close the circuit. */
+ hs_cell_intro_established_free(cell);
+ tor_free(encoded_cell);
+ return ret;
+}
+
+/** We received an ESTABLISH_INTRO <b>parsed_cell</b> on <b>circ</b>. It's
+ * well-formed and passed our verifications. Perform appropriate actions to
+ * establish an intro point. */
+static int
+handle_verified_establish_intro_cell(or_circuit_t *circ,
+ const hs_cell_establish_intro_t *parsed_cell)
+{
+ /* Get the auth key of this intro point */
+ ed25519_public_key_t auth_key;
+ get_auth_key_from_establish_intro_cell(&auth_key, parsed_cell);
+
+ /* Then notify the hidden service that the intro point is established by
+ sending an INTRO_ESTABLISHED cell */
+ if (hs_intro_send_intro_established_cell(circ)) {
+ log_warn(LD_BUG, "Couldn't send INTRO_ESTABLISHED cell.");
+ return -1;
+ }
+
+ /* Associate intro point auth key with this circuit. */
+ hs_circuitmap_register_intro_circ_v3(circ, &auth_key);
+ /* Repurpose this circuit into an intro circuit. */
+ circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_INTRO_POINT);
+
+ return 0;
+}
+
+/** We just received an ESTABLISH_INTRO cell in <b>circ</b> with payload in
+ * <b>request</b>. Handle it by making <b>circ</b> an intro circuit. Return 0
+ * if everything went well, or -1 if there were errors. */
+static int
+handle_establish_intro(or_circuit_t *circ, const uint8_t *request,
+ size_t request_len)
+{
+ int cell_ok, retval = -1;
+ hs_cell_establish_intro_t *parsed_cell = NULL;
+
+ tor_assert(circ);
+ tor_assert(request);
+
+ log_info(LD_REND, "Received an ESTABLISH_INTRO request on circuit %" PRIu32,
+ circ->p_circ_id);
+
+ /* Check that the circuit is in shape to become an intro point */
+ if (!hs_intro_circuit_is_suitable(circ)) {
+ goto err;
+ }
+
+ /* Parse the cell */
+ ssize_t parsing_result = hs_cell_establish_intro_parse(&parsed_cell,
+ request, request_len);
+ if (parsing_result < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Rejecting %s ESTABLISH_INTRO cell.",
+ parsing_result == -1 ? "invalid" : "truncated");
+ goto err;
+ }
+
+ cell_ok = verify_establish_intro_cell(parsed_cell,
+ (uint8_t *) circ->rend_circ_nonce,
+ sizeof(circ->rend_circ_nonce));
+ if (cell_ok < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Failed to verify ESTABLISH_INTRO cell.");
+ goto err;
+ }
+
+ /* This cell is legit. Take the appropriate actions. */
+ cell_ok = handle_verified_establish_intro_cell(circ, parsed_cell);
+ if (cell_ok < 0) {
+ goto err;
+ }
+
+ log_warn(LD_GENERAL, "Established prop224 intro point on circuit %" PRIu32,
+ circ->p_circ_id);
+
+ /* We are done! */
+ retval = 0;
+ goto done;
+
+ err:
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+
+ done:
+ hs_cell_establish_intro_free(parsed_cell);
+ return retval;
+}
+
+/* Return True if circuit is suitable for becoming an intro circuit. */
+int
+hs_intro_circuit_is_suitable(const or_circuit_t *circ)
+{
+ /* Basic circuit state sanity checks. */
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Rejecting ESTABLISH_INTRO on non-OR circuit.");
+ return 0;
+ }
+
+ if (circ->base_.n_chan) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Rejecting ESTABLISH_INTRO on non-edge circuit.");
+ return 0;
+ }
+
+ return 1;
+}
+
+/* We just received an ESTABLISH_INTRO cell in <b>circ</b>. Figure out of it's
+ * a legacy or a next gen cell, and pass it to the appropriate handler. */
+int
+hs_intro_received_establish_intro(or_circuit_t *circ, const uint8_t *request,
+ size_t request_len)
+{
+ tor_assert(circ);
+ tor_assert(request);
+
+ if (request_len == 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, "Empty ESTABLISH_INTRO cell.");
+ goto err;
+ }
+
+ /* Using the first byte of the cell, figure out the version of
+ * ESTABLISH_INTRO and pass it to the appropriate cell handler */
+ const uint8_t first_byte = request[0];
+ switch (first_byte) {
+ case HS_INTRO_AUTH_KEY_TYPE_LEGACY0:
+ case HS_INTRO_AUTH_KEY_TYPE_LEGACY1:
+ return rend_mid_establish_intro_legacy(circ, request, request_len);
+ case HS_INTRO_AUTH_KEY_TYPE_ED25519:
+ return handle_establish_intro(circ, request, request_len);
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Unrecognized AUTH_KEY_TYPE %u.", first_byte);
+ goto err;
+ }
+
+ err:
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+ return -1;
+}
+
diff --git a/src/or/hs_intropoint.h b/src/or/hs_intropoint.h
new file mode 100644
index 0000000000..46d8d6f7de
--- /dev/null
+++ b/src/or/hs_intropoint.h
@@ -0,0 +1,42 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file hs_intropoint.h
+ * \brief Header file for hs_intropoint.c.
+ **/
+
+#ifndef TOR_HS_INTRO_H
+#define TOR_HS_INTRO_H
+
+/* Authentication key type in an ESTABLISH_INTRO cell. */
+enum hs_intro_auth_key_type {
+ HS_INTRO_AUTH_KEY_TYPE_LEGACY0 = 0x00,
+ HS_INTRO_AUTH_KEY_TYPE_LEGACY1 = 0x01,
+ HS_INTRO_AUTH_KEY_TYPE_ED25519 = 0x02,
+};
+
+int hs_intro_received_establish_intro(or_circuit_t *circ,
+ const uint8_t *request,
+ size_t request_len);
+
+MOCK_DECL(int, hs_intro_send_intro_established_cell,(or_circuit_t *circ));
+
+/* also used by rendservice.c */
+int hs_intro_circuit_is_suitable(const or_circuit_t *circ);
+
+#ifdef HS_INTROPOINT_PRIVATE
+
+STATIC int
+verify_establish_intro_cell(const hs_cell_establish_intro_t *out,
+ const uint8_t *circuit_key_material,
+ size_t circuit_key_material_len);
+
+STATIC void
+get_auth_key_from_establish_intro_cell(ed25519_public_key_t *auth_key_out,
+ const hs_cell_establish_intro_t *cell);
+
+#endif /* HS_INTROPOINT_PRIVATE */
+
+#endif /* TOR_HS_INTRO_H */
+
diff --git a/src/or/hs_service.c b/src/or/hs_service.c
new file mode 100644
index 0000000000..3b5a3e7853
--- /dev/null
+++ b/src/or/hs_service.c
@@ -0,0 +1,177 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file hs_service.c
+ * \brief Implement next generation hidden service functionality
+ **/
+
+#define HS_SERVICE_PRIVATE
+
+#include "or.h"
+#include "relay.h"
+#include "rendservice.h"
+#include "circuitlist.h"
+#include "circpathbias.h"
+
+#include "hs_service.h"
+#include "hs_common.h"
+
+#include "hs/cell_establish_intro.h"
+#include "hs/cell_common.h"
+
+/* XXX We don't currently use these functions, apart from generating unittest
+ data. When we start implementing the service-side support for prop224 we
+ should revisit these functions and use them. For now we mark them as
+ unittest-only code: */
+#ifdef TOR_UNIT_TESTS
+
+/** Given an ESTABLISH_INTRO <b>cell</b>, encode it and place its payload in
+ * <b>buf_out</b> which has size <b>buf_out_len</b>. Return the number of
+ * bytes written, or a negative integer if there was an error. */
+STATIC ssize_t
+get_establish_intro_payload(uint8_t *buf_out, size_t buf_out_len,
+ const hs_cell_establish_intro_t *cell)
+{
+ ssize_t bytes_used = 0;
+
+ if (buf_out_len < RELAY_PAYLOAD_SIZE) {
+ return -1;
+ }
+
+ bytes_used = hs_cell_establish_intro_encode(buf_out, buf_out_len,
+ cell);
+ return bytes_used;
+}
+
+/* Set the cell extensions of <b>cell</b>. */
+static void
+set_cell_extensions(hs_cell_establish_intro_t *cell)
+{
+ cell_extension_t *cell_extensions = cell_extension_new();
+
+ /* For now, we don't use extensions at all. */
+ cell_extensions->num = 0; /* It's already zeroed, but be explicit. */
+ hs_cell_establish_intro_set_extensions(cell, cell_extensions);
+}
+
+/** Given the circuit handshake info in <b>circuit_key_material</b>, create and
+ * return an ESTABLISH_INTRO cell. Return NULL if something went wrong. The
+ * returned cell is allocated on the heap and it's the responsibility of the
+ * caller to free it. */
+STATIC hs_cell_establish_intro_t *
+generate_establish_intro_cell(const uint8_t *circuit_key_material,
+ size_t circuit_key_material_len)
+{
+ hs_cell_establish_intro_t *cell = NULL;
+ ssize_t encoded_len;
+
+ log_warn(LD_GENERAL,
+ "Generating ESTABLISH_INTRO cell (key_material_len: %u)",
+ (unsigned) circuit_key_material_len);
+
+ /* Generate short-term keypair for use in ESTABLISH_INTRO */
+ ed25519_keypair_t key_struct;
+ if (ed25519_keypair_generate(&key_struct, 0) < 0) {
+ goto err;
+ }
+
+ cell = hs_cell_establish_intro_new();
+
+ /* Set AUTH_KEY_TYPE: 2 means ed25519 */
+ hs_cell_establish_intro_set_auth_key_type(cell, AUTH_KEY_ED25519);
+
+ /* Set AUTH_KEY_LEN field */
+ /* Must also set byte-length of AUTH_KEY to match */
+ int auth_key_len = ED25519_PUBKEY_LEN;
+ hs_cell_establish_intro_set_auth_key_len(cell, auth_key_len);
+ hs_cell_establish_intro_setlen_auth_key(cell, auth_key_len);
+
+ /* Set AUTH_KEY field */
+ uint8_t *auth_key_ptr = hs_cell_establish_intro_getarray_auth_key(cell);
+ memcpy(auth_key_ptr, key_struct.pubkey.pubkey, auth_key_len);
+
+ /* No cell extensions needed */
+ set_cell_extensions(cell);
+
+ /* Set signature size.
+ We need to do this up here, because _encode() needs it and we need to call
+ _encode() to calculate the MAC and signature.
+ */
+ int sig_len = ED25519_SIG_LEN;
+ hs_cell_establish_intro_set_sig_len(cell, sig_len);
+ hs_cell_establish_intro_setlen_sig(cell, sig_len);
+
+ /* XXX How to make this process easier and nicer? */
+
+ /* Calculate the cell MAC (aka HANDSHAKE_AUTH). */
+ {
+ /* To calculate HANDSHAKE_AUTH, we dump the cell in bytes, and then derive
+ the MAC from it. */
+ uint8_t cell_bytes_tmp[RELAY_PAYLOAD_SIZE] = {0};
+ uint8_t mac[TRUNNEL_SHA3_256_LEN];
+
+ encoded_len = hs_cell_establish_intro_encode(cell_bytes_tmp,
+ sizeof(cell_bytes_tmp),
+ cell);
+ if (encoded_len < 0) {
+ log_warn(LD_OR, "Unable to pre-encode ESTABLISH_INTRO cell.");
+ goto err;
+ }
+
+ /* sanity check */
+ tor_assert(encoded_len > ED25519_SIG_LEN + 2 + TRUNNEL_SHA3_256_LEN);
+
+ /* Calculate MAC of all fields before HANDSHAKE_AUTH */
+ crypto_mac_sha3_256(mac, sizeof(mac),
+ circuit_key_material, circuit_key_material_len,
+ cell_bytes_tmp,
+ encoded_len -
+ (ED25519_SIG_LEN + 2 + TRUNNEL_SHA3_256_LEN));
+ /* Write the MAC to the cell */
+ uint8_t *handshake_ptr =
+ hs_cell_establish_intro_getarray_handshake_mac(cell);
+ memcpy(handshake_ptr, mac, sizeof(mac));
+ }
+
+ /* Calculate the cell signature */
+ {
+ /* To calculate the sig we follow the same procedure as above. We first
+ dump the cell up to the sig, and then calculate the sig */
+ uint8_t cell_bytes_tmp[RELAY_PAYLOAD_SIZE] = {0};
+ ed25519_signature_t sig;
+
+ encoded_len = hs_cell_establish_intro_encode(cell_bytes_tmp,
+ sizeof(cell_bytes_tmp),
+ cell);
+ if (encoded_len < 0) {
+ log_warn(LD_OR, "Unable to pre-encode ESTABLISH_INTRO cell (2).");
+ goto err;
+ }
+
+ tor_assert(encoded_len > ED25519_SIG_LEN);
+
+ if (ed25519_sign_prefixed(&sig,
+ (uint8_t*) cell_bytes_tmp,
+ encoded_len - ED25519_SIG_LEN,
+ ESTABLISH_INTRO_SIG_PREFIX,
+ &key_struct)) {
+ log_warn(LD_BUG, "Unable to gen signature for ESTABLISH_INTRO cell.");
+ goto err;
+ }
+
+ /* And write the signature to the cell */
+ uint8_t *sig_ptr = hs_cell_establish_intro_getarray_sig(cell);
+ memcpy(sig_ptr, sig.sig, sig_len);
+ }
+
+ /* We are done! Return the cell! */
+ return cell;
+
+ err:
+ hs_cell_establish_intro_free(cell);
+ return NULL;
+}
+
+#endif /* TOR_UNIT_TESTS */
+
diff --git a/src/or/hs_service.h b/src/or/hs_service.h
new file mode 100644
index 0000000000..994521fc50
--- /dev/null
+++ b/src/or/hs_service.h
@@ -0,0 +1,32 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file hs_service.h
+ * \brief Header file for hs_service.c.
+ **/
+
+#ifndef TOR_HS_SERVICE_H
+#define TOR_HS_SERVICE_H
+
+#include "or.h"
+#include "hs/cell_establish_intro.h"
+
+#ifdef HS_SERVICE_PRIVATE
+
+#ifdef TOR_UNIT_TESTS
+
+STATIC hs_cell_establish_intro_t *
+generate_establish_intro_cell(const uint8_t *circuit_key_material,
+ size_t circuit_key_material_len);
+
+STATIC ssize_t
+get_establish_intro_payload(uint8_t *buf, size_t buf_len,
+ const hs_cell_establish_intro_t *cell);
+
+#endif /* TOR_UNIT_TESTS */
+
+#endif /* HS_SERVICE_PRIVATE */
+
+#endif /* TOR_HS_SERVICE_H */
+
diff --git a/src/or/include.am b/src/or/include.am
index 278aa9baad..4e54deca55 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -46,6 +46,9 @@ LIBTOR_A_SOURCES = \
src/or/dnsserv.c \
src/or/fp_pair.c \
src/or/geoip.c \
+ src/or/hs_intropoint.c \
+ src/or/hs_circuitmap.c \
+ src/or/hs_service.c \
src/or/entrynodes.c \
src/or/ext_orport.c \
src/or/hibernate.c \
@@ -166,6 +169,9 @@ ORHEADERS = \
src/or/hs_cache.h \
src/or/hs_common.h \
src/or/hs_descriptor.h \
+ src/or/hs_intropoint.h \
+ src/or/hs_circuitmap.h \
+ src/or/hs_service.h \
src/or/keypin.h \
src/or/main.h \
src/or/microdesc.h \
@@ -208,7 +214,7 @@ noinst_HEADERS+= $(ORHEADERS) micro-revision.i
micro-revision.i: FORCE
$(AM_V_at)rm -f micro-revision.tmp; \
- if test -d "$(top_srcdir)/.git" && \
+ if test -r "$(top_srcdir)/.git" && \
test -x "`which git 2>&1;true`"; then \
HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
echo \"$$HASH\" > micro-revision.tmp; \
diff --git a/src/or/main.c b/src/or/main.c
index 25f8b1270c..0d4da65764 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -75,6 +75,7 @@
#include "geoip.h"
#include "hibernate.h"
#include "hs_cache.h"
+#include "hs_circuitmap.h"
#include "keypin.h"
#include "main.h"
#include "microdesc.h"
@@ -363,7 +364,7 @@ connection_unlink(connection_t *conn)
}
if (conn->type == CONN_TYPE_OR) {
if (!tor_digest_is_zero(TO_OR_CONN(conn)->identity_digest))
- connection_or_remove_from_identity_map(TO_OR_CONN(conn));
+ connection_or_clear_identity(TO_OR_CONN(conn));
/* connection_unlink() can only get called if the connection
* was already on the closeable list, and it got there by
* connection_mark_for_close(), which was called from
@@ -1437,7 +1438,7 @@ run_scheduled_events(time_t now)
}
/* 5. We do housekeeping for each connection... */
- connection_or_set_bad_connections(NULL, 0);
+ channel_update_bad_for_new_circs(NULL, 0);
int i;
for (i=0;i<smartlist_len(connection_array);i++) {
run_connection_housekeeping(i, now);
@@ -2411,6 +2412,9 @@ do_main_loop(void)
}
}
+ /* Initialize relay-side HS circuitmap */
+ hs_circuitmap_init();
+
/* set up once-a-second callback. */
if (! second_timer) {
struct timeval one_second;
@@ -3119,6 +3123,7 @@ tor_free_all(int postfork)
connection_edge_free_all();
scheduler_free_all();
nodelist_free_all();
+ hs_circuitmap_free_all();
microdesc_free_all();
routerparse_free_all();
ext_orport_free_all();
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index ce23d67979..49ff12bd6c 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -815,8 +815,11 @@ networkstatus_nickname_is_unnamed(const char *nickname)
#define NONAUTHORITY_NS_CACHE_INTERVAL (60*60)
/** Return true iff, given the options listed in <b>options</b>, <b>flavor</b>
- * is the flavor of a consensus networkstatus that we would like to fetch. */
-static int
+ * is the flavor of a consensus networkstatus that we would like to fetch.
+ *
+ * For certificate fetches, use we_want_to_fetch_unknown_auth_certs, and
+ * for serving fetched documents, use directory_caches_dir_info. */
+int
we_want_to_fetch_flavor(const or_options_t *options, int flavor)
{
if (flavor < 0 || flavor > N_CONSENSUS_FLAVORS) {
@@ -838,6 +841,29 @@ we_want_to_fetch_flavor(const or_options_t *options, int flavor)
return flavor == usable_consensus_flavor();
}
+/** Return true iff, given the options listed in <b>options</b>, we would like
+ * to fetch and store unknown authority certificates.
+ *
+ * For consensus and descriptor fetches, use we_want_to_fetch_flavor, and
+ * for serving fetched certificates, use directory_caches_unknown_auth_certs.
+ */
+int
+we_want_to_fetch_unknown_auth_certs(const or_options_t *options)
+{
+ if (authdir_mode_v3(options) ||
+ directory_caches_unknown_auth_certs((options))) {
+ /* We want to serve all certs to others, regardless if we would use
+ * them ourselves. */
+ return 1;
+ }
+ if (options->FetchUselessDescriptors) {
+ /* Unknown certificates are definitely useless. */
+ return 1;
+ }
+ /* Otherwise, don't fetch unknown certificates. */
+ return 0;
+}
+
/** How long will we hang onto a possibly live consensus for which we're
* fetching certs before we check whether there is a better one? */
#define DELAY_WHILE_FETCHING_CERTS (20*60)
@@ -1352,6 +1378,24 @@ networkstatus_get_live_consensus,(time_t now))
return NULL;
}
+/** Determine if <b>consensus</b> is valid or expired recently enough that
+ * we can still use it.
+ *
+ * Return 1 if the consensus is reasonably live, or 0 if it is too old.
+ */
+int
+networkstatus_consensus_reasonably_live(networkstatus_t *consensus, time_t now)
+{
+#define REASONABLY_LIVE_TIME (24*60*60)
+ if (BUG(!consensus))
+ return 0;
+
+ if (now <= consensus->valid_until + REASONABLY_LIVE_TIME)
+ return 1;
+
+ return 0;
+}
+
/* XXXX remove this in favor of get_live_consensus. But actually,
* leave something like it for bridge users, who need to not totally
* lose if they spend a while fetching a new consensus. */
@@ -1360,12 +1404,11 @@ networkstatus_get_live_consensus,(time_t now))
networkstatus_t *
networkstatus_get_reasonably_live_consensus(time_t now, int flavor)
{
-#define REASONABLY_LIVE_TIME (24*60*60)
networkstatus_t *consensus =
networkstatus_get_latest_consensus_by_flavor(flavor);
if (consensus &&
consensus->valid_after <= now &&
- now <= consensus->valid_until+REASONABLY_LIVE_TIME)
+ networkstatus_consensus_reasonably_live(consensus, now))
return consensus;
else
return NULL;
@@ -1729,9 +1772,9 @@ networkstatus_set_current_consensus(const char *consensus,
}
if (flav != usable_consensus_flavor() &&
- !directory_caches_dir_info(options)) {
- /* This consensus is totally boring to us: we won't use it, and we won't
- * serve it. Drop it. */
+ !we_want_to_fetch_flavor(options, flav)) {
+ /* This consensus is totally boring to us: we won't use it, we didn't want
+ * it, and we won't serve it. Drop it. */
goto done;
}
@@ -1933,7 +1976,7 @@ networkstatus_set_current_consensus(const char *consensus,
download_status_failed(&consensus_dl_status[flav], 0);
}
- if (directory_caches_dir_info(options)) {
+ if (we_want_to_fetch_flavor(options, flav)) {
dirserv_set_cached_consensus_networkstatus(consensus,
flavor,
&c->digests,
@@ -2401,9 +2444,9 @@ int
client_would_use_router(const routerstatus_t *rs, time_t now,
const or_options_t *options)
{
- if (!rs->is_flagged_running && !options->FetchUselessDescriptors) {
+ if (!rs->is_flagged_running) {
/* If we had this router descriptor, we wouldn't even bother using it.
- * But, if we want to have a complete list, fetch it anyway. */
+ * (Fetching and storing depends on by we_want_to_fetch_flavor().) */
return 0;
}
if (rs->published_on + options->TestingEstimatedDescriptorPropagationTime
diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h
index 4b3854db0c..edf2dc7b7a 100644
--- a/src/or/networkstatus.h
+++ b/src/or/networkstatus.h
@@ -66,6 +66,8 @@ const routerstatus_t *router_get_consensus_status_by_nickname(
int warn_if_unnamed);
const char *networkstatus_get_router_digest_by_nickname(const char *nickname);
int networkstatus_nickname_is_unnamed(const char *nickname);
+int we_want_to_fetch_flavor(const or_options_t *options, int flavor);
+int we_want_to_fetch_unknown_auth_certs(const or_options_t *options);
void networkstatus_consensus_download_failed(int status_code,
const char *flavname);
void update_consensus_networkstatus_fetch_time(time_t now);
@@ -79,6 +81,8 @@ MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus,(void));
MOCK_DECL(networkstatus_t *,networkstatus_get_latest_consensus_by_flavor,
(consensus_flavor_t f));
MOCK_DECL(networkstatus_t *, networkstatus_get_live_consensus,(time_t now));
+int networkstatus_consensus_reasonably_live(networkstatus_t *consensus,
+ time_t now);
networkstatus_t *networkstatus_get_reasonably_live_consensus(time_t now,
int flavor);
MOCK_DECL(int, networkstatus_consensus_is_bootstrapping,(time_t now));
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index 2802d5b9e0..2bcedbfb0c 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -49,10 +49,12 @@
#include "networkstatus.h"
#include "nodelist.h"
#include "policies.h"
+#include "protover.h"
#include "rendservice.h"
#include "router.h"
#include "routerlist.h"
#include "routerset.h"
+#include "torcert.h"
#include <string.h>
@@ -646,6 +648,73 @@ node_get_by_nickname,(const char *nickname, int warn_if_unnamed))
}
}
+/** Return the Ed25519 identity key for the provided node, or NULL if it
+ * doesn't have one. */
+const ed25519_public_key_t *
+node_get_ed25519_id(const node_t *node)
+{
+ if (node->ri) {
+ if (node->ri->cache_info.signing_key_cert) {
+ const ed25519_public_key_t *pk =
+ &node->ri->cache_info.signing_key_cert->signing_key;
+ if (BUG(ed25519_public_key_is_zero(pk)))
+ goto try_the_md;
+ return pk;
+ }
+ }
+ try_the_md:
+ if (node->md) {
+ if (node->md->ed25519_identity_pkey) {
+ return node->md->ed25519_identity_pkey;
+ }
+ }
+ return NULL;
+}
+
+/** Return true iff this node's Ed25519 identity matches <b>id</b>.
+ * (An absent Ed25519 identity matches NULL or zero.) */
+int
+node_ed25519_id_matches(const node_t *node, const ed25519_public_key_t *id)
+{
+ const ed25519_public_key_t *node_id = node_get_ed25519_id(node);
+ if (node_id == NULL || ed25519_public_key_is_zero(node_id)) {
+ return id == NULL || ed25519_public_key_is_zero(id);
+ } else {
+ return id && ed25519_pubkey_eq(node_id, id);
+ }
+}
+
+/** Return true iff <b>node</b> supports authenticating itself
+ * by ed25519 ID during the link handshake in a way that we can understand
+ * when we probe it. */
+int
+node_supports_ed25519_link_authentication(const node_t *node)
+{
+ /* XXXX Oh hm. What if some day in the future there are link handshake
+ * versions that aren't 3 but which are ed25519 */
+ if (! node_get_ed25519_id(node))
+ return 0;
+ if (node->ri) {
+ const char *protos = node->ri->protocol_list;
+ if (protos == NULL)
+ return 0;
+ return protocol_list_supports_protocol(protos, PRT_LINKAUTH, 3);
+ }
+ if (node->rs) {
+ return node->rs->supports_ed25519_link_handshake;
+ }
+ tor_assert_nonfatal_unreached_once();
+ return 0;
+}
+
+/** Return the RSA ID key's SHA1 digest for the provided node. */
+const uint8_t *
+node_get_rsa_id_digest(const node_t *node)
+{
+ tor_assert(node);
+ return (const uint8_t*)node->identity;
+}
+
/** Return the nickname of <b>node</b>, or NULL if we can't find one. */
const char *
node_get_nickname(const node_t *node)
@@ -1569,8 +1638,8 @@ router_have_minimum_dir_info(void)
* this can cause router_have_consensus_path() to be set to
* CONSENSUS_PATH_EXIT, even if there are no nodes with accept exit policies.
*/
-consensus_path_type_t
-router_have_consensus_path(void)
+MOCK_IMPL(consensus_path_type_t,
+router_have_consensus_path, (void))
{
return have_consensus_path;
}
@@ -1659,9 +1728,9 @@ count_usable_descriptors(int *num_present, int *num_usable,
* If **<b>status_out</b> is present, allocate a new string and print the
* available percentages of guard, middle, and exit nodes to it, noting
* whether there are exits in the consensus.
- * If there are no guards in the consensus,
- * we treat the exit fraction as 100%.
- */
+ * If there are no exits in the consensus, we treat the exit fraction as 100%,
+ * but set router_have_consensus_path() so that we can only build internal
+ * paths. */
static double
compute_frac_paths_available(const networkstatus_t *consensus,
const or_options_t *options, time_t now,
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index 71a91e107f..8456d21c6c 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -55,6 +55,11 @@ 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);
+const ed25519_public_key_t *node_get_ed25519_id(const node_t *node);
+int node_ed25519_id_matches(const node_t *node,
+ const ed25519_public_key_t *id);
+int node_supports_ed25519_link_authentication(const node_t *node);
+const uint8_t *node_get_rsa_id_digest(const node_t *node);
int node_has_ipv6_addr(const node_t *node);
int node_has_ipv6_orport(const node_t *node);
@@ -118,7 +123,8 @@ typedef enum {
* create exit and internal paths, circuits, streams, ... */
CONSENSUS_PATH_EXIT = 1
} consensus_path_type_t;
-consensus_path_type_t router_have_consensus_path(void);
+
+MOCK_DECL(consensus_path_type_t, router_have_consensus_path, (void));
void router_dir_info_changed(void);
const char *get_dir_info_status_string(void);
diff --git a/src/or/onion.c b/src/or/onion.c
index a987883802..42b9ca4b18 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -76,6 +76,9 @@
#include "rephist.h"
#include "router.h"
+// trunnel
+#include "ed25519_cert.h"
+
/** Type for a linked list of circuits that are waiting for a free CPU worker
* to process a waiting onion handshake. */
typedef struct onion_queue_t {
@@ -871,13 +874,114 @@ check_extend_cell(const extend_cell_t *cell)
return check_create_cell(&cell->create_cell, 1);
}
-/** Protocol constants for specifier types in EXTEND2
- * @{
- */
-#define SPECTYPE_IPV4 0
-#define SPECTYPE_IPV6 1
-#define SPECTYPE_LEGACY_ID 2
-/** @} */
+static int
+extend_cell_from_extend1_cell_body(extend_cell_t *cell_out,
+ const extend1_cell_body_t *cell)
+{
+ tor_assert(cell_out);
+ tor_assert(cell);
+ memset(cell_out, 0, sizeof(*cell_out));
+ tor_addr_make_unspec(&cell_out->orport_ipv4.addr);
+ tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
+
+ cell_out->cell_type = RELAY_COMMAND_EXTEND;
+ tor_addr_from_ipv4h(&cell_out->orport_ipv4.addr, cell->ipv4addr);
+ cell_out->orport_ipv4.port = cell->port;
+ if (tor_memeq(cell->onionskin, NTOR_CREATE_MAGIC, 16)) {
+ cell_out->create_cell.cell_type = CELL_CREATE2;
+ cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_NTOR;
+ cell_out->create_cell.handshake_len = NTOR_ONIONSKIN_LEN;
+ memcpy(cell_out->create_cell.onionskin, cell->onionskin + 16,
+ NTOR_ONIONSKIN_LEN);
+ } else {
+ cell_out->create_cell.cell_type = CELL_CREATE;
+ cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_TAP;
+ cell_out->create_cell.handshake_len = TAP_ONIONSKIN_CHALLENGE_LEN;
+ memcpy(cell_out->create_cell.onionskin, cell->onionskin,
+ TAP_ONIONSKIN_CHALLENGE_LEN);
+ }
+ memcpy(cell_out->node_id, cell->identity, DIGEST_LEN);
+ return 0;
+}
+
+static int
+create_cell_from_create2_cell_body(create_cell_t *cell_out,
+ const create2_cell_body_t *cell)
+{
+ tor_assert(cell_out);
+ tor_assert(cell);
+ memset(cell_out, 0, sizeof(create_cell_t));
+ if (BUG(cell->handshake_len > sizeof(cell_out->onionskin))) {
+ /* This should be impossible because there just isn't enough room in the
+ * input cell to make the handshake_len this large and provide a
+ * handshake_data to match. */
+ return -1;
+ }
+
+ cell_out->cell_type = CELL_CREATE2;
+ cell_out->handshake_type = cell->handshake_type;
+ cell_out->handshake_len = cell->handshake_len;
+ memcpy(cell_out->onionskin,
+ create2_cell_body_getconstarray_handshake_data(cell),
+ cell->handshake_len);
+ return 0;
+}
+
+static int
+extend_cell_from_extend2_cell_body(extend_cell_t *cell_out,
+ const extend2_cell_body_t *cell)
+{
+ tor_assert(cell_out);
+ tor_assert(cell);
+ int found_ipv4 = 0, found_ipv6 = 0, found_rsa_id = 0, found_ed_id = 0;
+ memset(cell_out, 0, sizeof(*cell_out));
+ tor_addr_make_unspec(&cell_out->orport_ipv4.addr);
+ tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
+ cell_out->cell_type = RELAY_COMMAND_EXTEND2;
+
+ unsigned i;
+ for (i = 0; i < cell->n_spec; ++i) {
+ const link_specifier_t *ls = extend2_cell_body_getconst_ls(cell, i);
+ switch (ls->ls_type) {
+ case LS_IPV4:
+ if (found_ipv4)
+ continue;
+ found_ipv4 = 1;
+ tor_addr_from_ipv4h(&cell_out->orport_ipv4.addr, ls->un_ipv4_addr);
+ cell_out->orport_ipv4.port = ls->un_ipv4_port;
+ break;
+ case LS_IPV6:
+ if (found_ipv6)
+ continue;
+ found_ipv6 = 1;
+ tor_addr_from_ipv6_bytes(&cell_out->orport_ipv6.addr,
+ (const char *)ls->un_ipv6_addr);
+ cell_out->orport_ipv6.port = ls->un_ipv6_port;
+ break;
+ case LS_LEGACY_ID:
+ if (found_rsa_id)
+ return -1;
+ found_rsa_id = 1;
+ memcpy(cell_out->node_id, ls->un_legacy_id, 20);
+ break;
+ case LS_ED25519_ID:
+ if (found_ed_id)
+ return -1;
+ found_ed_id = 1;
+ memcpy(cell_out->ed_pubkey.pubkey, ls->un_ed25519_id, 32);
+ break;
+ default:
+ /* Ignore this, whatever it is. */
+ break;
+ }
+ }
+
+ if (!found_rsa_id || !found_ipv4) /* These are mandatory */
+ return -1;
+
+ return create_cell_from_create2_cell_body(&cell_out->create_cell,
+ cell->create2);
+}
/** Parse an EXTEND or EXTEND2 cell (according to <b>command</b>) from the
* <b>payload_length</b> bytes of <b>payload</b> into <b>cell_out</b>. Return
@@ -886,101 +990,44 @@ int
extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
const uint8_t *payload, size_t payload_length)
{
- const uint8_t *eop;
- memset(cell_out, 0, sizeof(*cell_out));
+ tor_assert(cell_out);
+ tor_assert(payload);
+
if (payload_length > RELAY_PAYLOAD_SIZE)
return -1;
- eop = payload + payload_length;
switch (command) {
case RELAY_COMMAND_EXTEND:
{
- if (payload_length != 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN)
+ extend1_cell_body_t *cell = NULL;
+ if (extend1_cell_body_parse(&cell, payload, payload_length)<0 ||
+ cell == NULL) {
+ if (cell)
+ extend1_cell_body_free(cell);
return -1;
-
- cell_out->cell_type = RELAY_COMMAND_EXTEND;
- tor_addr_from_ipv4n(&cell_out->orport_ipv4.addr, get_uint32(payload));
- cell_out->orport_ipv4.port = ntohs(get_uint16(payload+4));
- tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
- if (tor_memeq(payload + 6, NTOR_CREATE_MAGIC, 16)) {
- cell_out->create_cell.cell_type = CELL_CREATE2;
- cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_NTOR;
- cell_out->create_cell.handshake_len = NTOR_ONIONSKIN_LEN;
- memcpy(cell_out->create_cell.onionskin, payload + 22,
- NTOR_ONIONSKIN_LEN);
- } else {
- cell_out->create_cell.cell_type = CELL_CREATE;
- cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_TAP;
- cell_out->create_cell.handshake_len = TAP_ONIONSKIN_CHALLENGE_LEN;
- memcpy(cell_out->create_cell.onionskin, payload + 6,
- TAP_ONIONSKIN_CHALLENGE_LEN);
}
- memcpy(cell_out->node_id, payload + 6 + TAP_ONIONSKIN_CHALLENGE_LEN,
- DIGEST_LEN);
- break;
+ int r = extend_cell_from_extend1_cell_body(cell_out, cell);
+ extend1_cell_body_free(cell);
+ if (r < 0)
+ return r;
}
+ break;
case RELAY_COMMAND_EXTEND2:
{
- uint8_t n_specs, spectype, speclen;
- int i;
- int found_ipv4 = 0, found_ipv6 = 0, found_id = 0;
- tor_addr_make_unspec(&cell_out->orport_ipv4.addr);
- tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
-
- if (payload_length == 0)
+ extend2_cell_body_t *cell = NULL;
+ if (extend2_cell_body_parse(&cell, payload, payload_length) < 0 ||
+ cell == NULL) {
+ if (cell)
+ extend2_cell_body_free(cell);
return -1;
-
- cell_out->cell_type = RELAY_COMMAND_EXTEND2;
- n_specs = *payload++;
- /* Parse the specifiers. We'll only take the first IPv4 and first IPv6
- * address, and the node ID, and ignore everything else */
- for (i = 0; i < n_specs; ++i) {
- if (eop - payload < 2)
- return -1;
- spectype = payload[0];
- speclen = payload[1];
- payload += 2;
- if (eop - payload < speclen)
- return -1;
- switch (spectype) {
- case SPECTYPE_IPV4:
- if (speclen != 6)
- return -1;
- if (!found_ipv4) {
- tor_addr_from_ipv4n(&cell_out->orport_ipv4.addr,
- get_uint32(payload));
- cell_out->orport_ipv4.port = ntohs(get_uint16(payload+4));
- found_ipv4 = 1;
- }
- break;
- case SPECTYPE_IPV6:
- if (speclen != 18)
- return -1;
- if (!found_ipv6) {
- tor_addr_from_ipv6_bytes(&cell_out->orport_ipv6.addr,
- (const char*)payload);
- cell_out->orport_ipv6.port = ntohs(get_uint16(payload+16));
- found_ipv6 = 1;
- }
- break;
- case SPECTYPE_LEGACY_ID:
- if (speclen != 20)
- return -1;
- if (found_id)
- return -1;
- memcpy(cell_out->node_id, payload, 20);
- found_id = 1;
- break;
- }
- payload += speclen;
}
- if (!found_id || !found_ipv4)
- return -1;
- if (parse_create2_payload(&cell_out->create_cell,payload,eop-payload)<0)
- return -1;
- break;
+ int r = extend_cell_from_extend2_cell_body(cell_out, cell);
+ extend2_cell_body_free(cell);
+ if (r < 0)
+ return r;
}
+ break;
default:
return -1;
}
@@ -992,6 +1039,7 @@ extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
static int
check_extended_cell(const extended_cell_t *cell)
{
+ tor_assert(cell);
if (cell->created_cell.cell_type == CELL_CREATED) {
if (cell->cell_type != RELAY_COMMAND_EXTENDED)
return -1;
@@ -1013,6 +1061,9 @@ extended_cell_parse(extended_cell_t *cell_out,
const uint8_t command, const uint8_t *payload,
size_t payload_len)
{
+ tor_assert(cell_out);
+ tor_assert(payload);
+
memset(cell_out, 0, sizeof(*cell_out));
if (payload_len > RELAY_PAYLOAD_SIZE)
return -1;
@@ -1129,6 +1180,21 @@ created_cell_format(cell_t *cell_out, const created_cell_t *cell_in)
return 0;
}
+/** Return true iff we are configured (by torrc or by the networkstatus
+ * parameters) to use Ed25519 identities in our Extend2 cells. */
+static int
+should_include_ed25519_id_extend_cells(const networkstatus_t *ns,
+ const or_options_t *options)
+{
+ if (options->ExtendByEd25519ID != -1)
+ return options->ExtendByEd25519ID; /* The user has an opinion. */
+
+ return (int) networkstatus_get_param(ns, "ExtendByEd25519ID",
+ 0 /* default */,
+ 0 /* min */,
+ 1 /*max*/);
+}
+
/** Format the EXTEND{,2} cell in <b>cell_in</b>, storing its relay payload in
* <b>payload_out</b>, the number of bytes used in *<b>len_out</b>, and the
* relay command in *<b>command_out</b>. The <b>payload_out</b> must have
@@ -1137,12 +1203,11 @@ int
extend_cell_format(uint8_t *command_out, uint16_t *len_out,
uint8_t *payload_out, const extend_cell_t *cell_in)
{
- uint8_t *p, *eop;
+ uint8_t *p;
if (check_extend_cell(cell_in) < 0)
return -1;
p = payload_out;
- eop = payload_out + RELAY_PAYLOAD_SIZE;
memset(p, 0, RELAY_PAYLOAD_SIZE);
@@ -1165,33 +1230,56 @@ extend_cell_format(uint8_t *command_out, uint16_t *len_out,
break;
case RELAY_COMMAND_EXTEND2:
{
- uint8_t n = 2;
+ uint8_t n_specifiers = 2;
*command_out = RELAY_COMMAND_EXTEND2;
-
- *p++ = n; /* 2 identifiers */
- *p++ = SPECTYPE_IPV4; /* First is IPV4. */
- *p++ = 6; /* It's 6 bytes long. */
- set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr));
- set_uint16(p+4, htons(cell_in->orport_ipv4.port));
- p += 6;
- *p++ = SPECTYPE_LEGACY_ID; /* Next is an identity digest. */
- *p++ = 20; /* It's 20 bytes long */
- memcpy(p, cell_in->node_id, DIGEST_LEN);
- p += 20;
-
- /* Now we can send the handshake */
- set_uint16(p, htons(cell_in->create_cell.handshake_type));
- set_uint16(p+2, htons(cell_in->create_cell.handshake_len));
- p += 4;
-
- if (cell_in->create_cell.handshake_len > eop - p)
- return -1;
-
- memcpy(p, cell_in->create_cell.onionskin,
+ extend2_cell_body_t *cell = extend2_cell_body_new();
+ link_specifier_t *ls;
+ {
+ /* IPv4 specifier first. */
+ ls = link_specifier_new();
+ extend2_cell_body_add_ls(cell, ls);
+ ls->ls_type = LS_IPV4;
+ ls->ls_len = 6;
+ ls->un_ipv4_addr = tor_addr_to_ipv4h(&cell_in->orport_ipv4.addr);
+ ls->un_ipv4_port = cell_in->orport_ipv4.port;
+ }
+ {
+ /* Then RSA id */
+ ls = link_specifier_new();
+ extend2_cell_body_add_ls(cell, ls);
+ ls->ls_type = LS_LEGACY_ID;
+ ls->ls_len = DIGEST_LEN;
+ memcpy(ls->un_legacy_id, cell_in->node_id, DIGEST_LEN);
+ }
+ if (should_include_ed25519_id_extend_cells(NULL, get_options()) &&
+ !ed25519_public_key_is_zero(&cell_in->ed_pubkey)) {
+ /* Then, maybe, the ed25519 id! */
+ ++n_specifiers;
+ ls = link_specifier_new();
+ extend2_cell_body_add_ls(cell, ls);
+ ls->ls_type = LS_ED25519_ID;
+ ls->ls_len = 32;
+ memcpy(ls->un_ed25519_id, cell_in->ed_pubkey.pubkey, 32);
+ }
+ cell->n_spec = n_specifiers;
+
+ /* Now, the handshake */
+ cell->create2 = create2_cell_body_new();
+ cell->create2->handshake_type = cell_in->create_cell.handshake_type;
+ cell->create2->handshake_len = cell_in->create_cell.handshake_len;
+ create2_cell_body_setlen_handshake_data(cell->create2,
+ cell_in->create_cell.handshake_len);
+ memcpy(create2_cell_body_getarray_handshake_data(cell->create2),
+ cell_in->create_cell.onionskin,
cell_in->create_cell.handshake_len);
- p += cell_in->create_cell.handshake_len;
- *len_out = p - payload_out;
+ ssize_t len_encoded = extend2_cell_body_encode(
+ payload_out, RELAY_PAYLOAD_SIZE,
+ cell);
+ extend2_cell_body_free(cell);
+ if (len_encoded < 0 || len_encoded > UINT16_MAX)
+ return -1;
+ *len_out = (uint16_t) len_encoded;
}
break;
default:
diff --git a/src/or/onion.h b/src/or/onion.h
index 0275fa00d2..19e4a7c381 100644
--- a/src/or/onion.h
+++ b/src/or/onion.h
@@ -85,6 +85,8 @@ typedef struct extend_cell_t {
tor_addr_port_t orport_ipv6;
/** Identity fingerprint of the node we're conecting to.*/
uint8_t node_id[DIGEST_LEN];
+ /** Ed25519 public identity key. Zero if not set. */
+ ed25519_public_key_t ed_pubkey;
/** The "create cell" embedded in this extend cell. Note that unlike the
* create cells we generate ourself, this once can have a handshake type we
* don't recognize. */
diff --git a/src/or/or.h b/src/or/or.h
index 04ff548a78..d45dc687b4 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -80,6 +80,7 @@
#include "crypto_ed25519.h"
#include "tor_queue.h"
#include "util_format.h"
+#include "hs_circuitmap.h"
/* These signals are defined to help handle_control_signal work.
*/
@@ -1585,8 +1586,6 @@ typedef struct or_connection_t {
* bandwidthburst. (OPEN ORs only) */
int write_bucket; /**< When this hits 0, stop writing. Like read_bucket. */
- struct or_connection_t *next_with_same_id; /**< Next connection with same
- * identity digest as this one. */
/** Last emptied read token bucket in msec since midnight; only used if
* TB_EMPTY events are enabled. */
uint32_t read_emptied_time;
@@ -1664,6 +1663,8 @@ typedef struct entry_connection_t {
edge_connection_t edge_;
/** Nickname of planned exit node -- used with .exit support. */
+ /* XXX prop220: we need to make chosen_exit_name able to encode Ed IDs too.
+ * That's logically part of the UI parts for prop220 though. */
char *chosen_exit_name;
socks_request_t *socks_request; /**< SOCKS structure describing request (AP
@@ -2718,7 +2719,10 @@ typedef struct {
typedef struct extend_info_t {
char nickname[MAX_HEX_NICKNAME_LEN+1]; /**< This router's nickname for
* display. */
- char identity_digest[DIGEST_LEN]; /**< Hash of this router's identity key. */
+ /** Hash of this router's RSA identity key. */
+ char identity_digest[DIGEST_LEN];
+ /** Ed25519 identity for this router, if any. */
+ ed25519_public_key_t ed_identity;
uint16_t port; /**< OR port. */
tor_addr_t addr; /**< IP address. */
crypto_pk_t *onion_key; /**< Current onionskin key. */
@@ -3369,7 +3373,12 @@ typedef struct or_circuit_t {
* is not marked for close. */
struct or_circuit_t *rend_splice;
- struct or_circuit_rendinfo_s *rendinfo;
+ /** If set, points to an HS token that this circuit might be carrying.
+ * Used by the HS circuitmap. */
+ hs_token_t *hs_token;
+ /** Hashtable node: used to look up the circuit by its HS token using the HS
+ circuitmap. */
+ HT_ENTRY(or_circuit_t) hs_circuitmap_node;
/** Stores KH for the handshake. */
char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */
@@ -3404,25 +3413,11 @@ typedef struct or_circuit_t {
uint32_t max_middle_cells;
} or_circuit_t;
-typedef struct or_circuit_rendinfo_s {
-
#if REND_COOKIE_LEN != DIGEST_LEN
#error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN"
#endif
#define REND_TOKEN_LEN DIGEST_LEN
- /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a
- * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes
- * otherwise.
- */
- char rend_token[REND_TOKEN_LEN];
-
- /** True if this is a rendezvous point circuit; false if this is an
- * introduction point. */
- unsigned is_rend_circ;
-
-} or_circuit_rendinfo_t;
-
/** Convert a circuit subtype to a circuit_t. */
#define TO_CIRCUIT(x) (&((x)->base_))
@@ -3897,7 +3892,7 @@ typedef struct {
uint64_t BandwidthBurst; /**< How much bandwidth, at maximum, are we willing
* to use in a second? */
uint64_t MaxAdvertisedBandwidth; /**< How much bandwidth are we willing to
- * tell people we have? */
+ * tell other nodes we have? */
uint64_t RelayBandwidthRate; /**< How much bandwidth, on average, are we
* willing to use for all relayed conns? */
uint64_t RelayBandwidthBurst; /**< How much bandwidth, at maximum, will we
@@ -3983,9 +3978,6 @@ typedef struct {
* and vote for all other exits as good. */
int AuthDirMaxServersPerAddr; /**< Do not permit more than this
* number of servers per IP address. */
- int AuthDirMaxServersPerAuthAddr; /**< Do not permit more than this
- * number of servers per IP address shared
- * with an authority. */
int AuthDirHasIPv6Connectivity; /**< Boolean: are we on IPv6? */
int AuthDirPinKeys; /**< Boolean: Do we enforce key-pinning? */
@@ -4588,6 +4580,15 @@ typedef struct {
/** If 1, we skip all OOS checks. */
int DisableOOSCheck;
+ /** Autobool: Should we include Ed25519 identities in extend2 cells?
+ * If -1, we should do whatever the consensus parameter says. */
+ int ExtendByEd25519ID;
+
+ /** Bool (default: 1): When testing routerinfos as a directory authority,
+ * do we enforce Ed25519 identity match? */
+ /* NOTE: remove this option someday. */
+ int AuthDirTestEd25519LinkKeys;
+
/** If 1, we use the old (pre-prop271) guard selection algorithm.
*
* XXXX prop271 This option is only here as a stopgap while we're
diff --git a/src/or/protover.c b/src/or/protover.c
index 5972e61be7..ceaf2d5ccf 100644
--- a/src/or/protover.c
+++ b/src/or/protover.c
@@ -697,7 +697,7 @@ protover_compute_for_old_tor(const char *version)
if (tor_version_as_new_as(version,
FIRST_TOR_VERSION_TO_ADVERTISE_PROTOCOLS)) {
return "";
- } else if (tor_version_as_new_as(version, "0.2.7.5")) {
+ } else if (tor_version_as_new_as(version, "0.2.9.1-alpha")) {
/* 0.2.9.1-alpha HSRend=2 */
return "Cons=1-2 Desc=1-2 DirCache=1 HSDir=1 HSIntro=3 HSRend=1-2 "
"Link=1-4 LinkAuth=1 "
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index f2060e528c..def51b7986 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -16,6 +16,7 @@
#include "rendclient.h"
#include "rendcommon.h"
#include "rendmid.h"
+#include "hs_intropoint.h"
#include "rendservice.h"
#include "rephist.h"
#include "router.h"
@@ -762,7 +763,7 @@ rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint,
switch (command) {
case RELAY_COMMAND_ESTABLISH_INTRO:
if (or_circ)
- r = rend_mid_establish_intro(or_circ,payload,length);
+ r = hs_intro_received_establish_intro(or_circ,payload,length);
break;
case RELAY_COMMAND_ESTABLISH_RENDEZVOUS:
if (or_circ)
diff --git a/src/or/rendmid.c b/src/or/rendmid.c
index f39c92afae..3319a639b9 100644
--- a/src/or/rendmid.c
+++ b/src/or/rendmid.c
@@ -11,16 +11,19 @@
#include "circuitlist.h"
#include "circuituse.h"
#include "config.h"
+#include "crypto.h"
#include "relay.h"
#include "rendmid.h"
#include "rephist.h"
+#include "hs_circuitmap.h"
+#include "hs_intropoint.h"
/** Respond to an ESTABLISH_INTRO cell by checking the signed data and
* setting the circuit's purpose and service pk digest.
*/
int
-rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
- size_t request_len)
+rend_mid_establish_intro_legacy(or_circuit_t *circ, const uint8_t *request,
+ size_t request_len)
{
crypto_pk_t *pk = NULL;
char buf[DIGEST_LEN+9];
@@ -32,15 +35,14 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
int reason = END_CIRC_REASON_INTERNAL;
log_info(LD_REND,
- "Received an ESTABLISH_INTRO request on circuit %u",
+ "Received a legacy ESTABLISH_INTRO request on circuit %u",
(unsigned) circ->p_circ_id);
- if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Rejecting ESTABLISH_INTRO on non-OR or non-edge circuit.");
+ if (!hs_intro_circuit_is_suitable(circ)) {
reason = END_CIRC_REASON_TORPROTOCOL;
goto err;
}
+
if (request_len < 2+DIGEST_LEN)
goto truncated;
/* First 2 bytes: length of asn1-encoded key. */
@@ -94,7 +96,7 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
/* Close any other intro circuits with the same pk. */
c = NULL;
- while ((c = circuit_get_intro_point((const uint8_t *)pk_digest))) {
+ while ((c = hs_circuitmap_get_intro_circ_v2((const uint8_t *)pk_digest))) {
log_info(LD_REND, "Replacing old circuit for service %s",
safe_str(serviceid));
circuit_mark_for_close(TO_CIRCUIT(c), END_CIRC_REASON_FINISHED);
@@ -102,16 +104,14 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
}
/* Acknowledge the request. */
- if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
- RELAY_COMMAND_INTRO_ESTABLISHED,
- "", 0, NULL)<0) {
+ if (hs_intro_send_intro_established_cell(circ) < 0) {
log_info(LD_GENERAL, "Couldn't send INTRO_ESTABLISHED cell.");
goto err_no_close;
}
/* Now, set up this circuit. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_INTRO_POINT);
- circuit_set_intro_point_digest(circ, (uint8_t *)pk_digest);
+ hs_circuitmap_register_intro_circ_v2(circ, (uint8_t *)pk_digest);
log_info(LD_REND,
"Established introduction point on circuit %u for service %s",
@@ -181,7 +181,7 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
/* The first 20 bytes are all we look at: they have a hash of the service's
* PK. */
- intro_circ = circuit_get_intro_point((const uint8_t*)request);
+ intro_circ = hs_circuitmap_get_intro_circ_v2((const uint8_t*)request);
if (!intro_circ) {
log_info(LD_REND,
"No intro circ found for INTRODUCE1 cell (%s) from circuit %u; "
@@ -258,7 +258,7 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
goto err;
}
- if (circuit_get_rendezvous(request)) {
+ if (hs_circuitmap_get_rend_circ(request)) {
log_warn(LD_PROTOCOL,
"Duplicate rendezvous cookie in ESTABLISH_RENDEZVOUS.");
goto err;
@@ -274,7 +274,7 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
}
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_POINT_WAITING);
- circuit_set_rendezvous_cookie(circ, request);
+ hs_circuitmap_register_rend_circ(circ, request);
base16_encode(hexid,9,(char*)request,4);
@@ -323,7 +323,7 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
"Got request for rendezvous from circuit %u to cookie %s.",
(unsigned)circ->p_circ_id, hexid);
- rend_circ = circuit_get_rendezvous(request);
+ rend_circ = hs_circuitmap_get_rend_circ(request);
if (!rend_circ) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Rejecting RENDEZVOUS1 cell with unrecognized rendezvous cookie %s.",
@@ -358,7 +358,7 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_ESTABLISHED);
circuit_change_purpose(TO_CIRCUIT(rend_circ),
CIRCUIT_PURPOSE_REND_ESTABLISHED);
- circuit_set_rendezvous_cookie(circ, NULL);
+ hs_circuitmap_remove_circuit(circ);
rend_circ->rend_splice = circ;
circ->rend_splice = rend_circ;
diff --git a/src/or/rendmid.h b/src/or/rendmid.h
index 10d1287085..374f2b7d66 100644
--- a/src/or/rendmid.h
+++ b/src/or/rendmid.h
@@ -12,8 +12,8 @@
#ifndef TOR_RENDMID_H
#define TOR_RENDMID_H
-int rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
- size_t request_len);
+int rend_mid_establish_intro_legacy(or_circuit_t *circ, const uint8_t *request,
+ size_t request_len);
int rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
size_t request_len);
int rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index cf57c7d061..1713a84bbd 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -76,6 +76,13 @@ static ssize_t rend_service_parse_intro_for_v3(
static int rend_service_check_private_dir(const or_options_t *options,
const rend_service_t *s,
int create);
+static int rend_service_check_private_dir_impl(const or_options_t *options,
+ const rend_service_t *s,
+ int create);
+static const smartlist_t* rend_get_service_list(
+ const smartlist_t* substitute_service_list);
+static smartlist_t* rend_get_service_list_mutable(
+ smartlist_t* substitute_service_list);
/** Represents the mapping from a virtual port of a rendezvous service to
* a real port on some IP.
@@ -121,8 +128,44 @@ static const char *hostname_fname = "hostname";
static const char *client_keys_fname = "client_keys";
static const char *sos_poison_fname = "onion_service_non_anonymous";
+/** A list of rend_service_t's for services run on this OP.
+ */
+static smartlist_t *rend_service_list = NULL;
+
+/* Like rend_get_service_list_mutable, but returns a read-only list. */
+static const smartlist_t*
+rend_get_service_list(const smartlist_t* substitute_service_list)
+{
+ /* It is safe to cast away the const here, because
+ * rend_get_service_list_mutable does not actually modify the list */
+ return rend_get_service_list_mutable((smartlist_t*)substitute_service_list);
+}
+
+/* Return a mutable list of hidden services.
+ * If substitute_service_list is not NULL, return it.
+ * Otherwise, check if the global rend_service_list is non-NULL, and if so,
+ * return it.
+ * Otherwise, log a BUG message and return NULL.
+ * */
+static smartlist_t*
+rend_get_service_list_mutable(smartlist_t* substitute_service_list)
+{
+ if (substitute_service_list) {
+ return substitute_service_list;
+ }
+
+ /* If no special service list is provided, then just use the global one. */
+
+ if (BUG(!rend_service_list)) {
+ /* No global HS list, which is a programmer error. */
+ return NULL;
+ }
+
+ return rend_service_list;
+}
+
/** Tells if onion service <b>s</b> is ephemeral.
-*/
+ */
static unsigned int
rend_service_is_ephemeral(const struct rend_service_t *s)
{
@@ -137,10 +180,6 @@ rend_service_escaped_dir(const struct rend_service_t *s)
return rend_service_is_ephemeral(s) ? "[EPHEMERAL]" : escaped(s->directory);
}
-/** A list of rend_service_t's for services run on this OP.
- */
-static smartlist_t *rend_service_list = NULL;
-
/** Return the number of rendezvous services we have configured. */
int
num_rend_services(void)
@@ -225,21 +264,32 @@ rend_service_free_all(void)
rend_service_list = NULL;
}
-/** Validate <b>service</b> and add it to rend_service_list if possible.
+/** Validate <b>service</b> and add it to <b>service_list</b>, or to
+ * the global rend_service_list if <b>service_list</b> is NULL.
* Return 0 on success. On failure, free <b>service</b> and return -1.
+ * Takes ownership of <b>service</b>.
*/
static int
-rend_add_service(rend_service_t *service)
+rend_add_service(smartlist_t *service_list, rend_service_t *service)
{
int i;
rend_service_port_config_t *p;
+ tor_assert(service);
+
+ smartlist_t *s_list = rend_get_service_list_mutable(service_list);
+ /* We must have a service list, even if it's a temporary one, so we can
+ * check for duplicate services */
+ if (BUG(!s_list)) {
+ return -1;
+ }
+
service->intro_nodes = smartlist_new();
service->expiring_nodes = smartlist_new();
if (service->max_streams_per_circuit < 0) {
log_warn(LD_CONFIG, "Hidden service (%s) configured with negative max "
- "streams per circuit; ignoring.",
+ "streams per circuit.",
rend_service_escaped_dir(service));
rend_service_free(service);
return -1;
@@ -248,24 +298,24 @@ rend_add_service(rend_service_t *service)
if (service->max_streams_close_circuit < 0 ||
service->max_streams_close_circuit > 1) {
log_warn(LD_CONFIG, "Hidden service (%s) configured with invalid "
- "max streams handling; ignoring.",
+ "max streams handling.",
rend_service_escaped_dir(service));
rend_service_free(service);
return -1;
}
if (service->auth_type != REND_NO_AUTH &&
- smartlist_len(service->clients) == 0) {
+ (!service->clients ||
+ smartlist_len(service->clients) == 0)) {
log_warn(LD_CONFIG, "Hidden service (%s) with client authorization but no "
- "clients; ignoring.",
+ "clients.",
rend_service_escaped_dir(service));
rend_service_free(service);
return -1;
}
- if (!smartlist_len(service->ports)) {
- log_warn(LD_CONFIG, "Hidden service (%s) with no ports configured; "
- "ignoring.",
+ if (!service->ports || !smartlist_len(service->ports)) {
+ log_warn(LD_CONFIG, "Hidden service (%s) with no ports configured.",
rend_service_escaped_dir(service));
rend_service_free(service);
return -1;
@@ -286,20 +336,20 @@ rend_add_service(rend_service_t *service)
* lock file. But this is enough to detect a simple mistake that
* at least one person has actually made.
*/
+ tor_assert(s_list);
if (!rend_service_is_ephemeral(service)) {
/* Skip dupe for ephemeral services. */
- SMARTLIST_FOREACH(rend_service_list, rend_service_t*, ptr,
+ SMARTLIST_FOREACH(s_list, rend_service_t*, ptr,
dupe = dupe ||
!strcmp(ptr->directory, service->directory));
if (dupe) {
log_warn(LD_REND, "Another hidden service is already configured for "
- "directory %s, ignoring.",
+ "directory %s.",
rend_service_escaped_dir(service));
rend_service_free(service);
return -1;
}
}
- smartlist_add(rend_service_list, service);
log_debug(LD_REND,"Configuring service with directory %s",
rend_service_escaped_dir(service));
for (i = 0; i < smartlist_len(service->ports); ++i) {
@@ -315,14 +365,19 @@ rend_add_service(rend_service_t *service)
"Service maps port %d to socket at \"%s\"",
p->virtual_port, p->unix_addr);
#else
- log_debug(LD_REND,
- "Service maps port %d to an AF_UNIX socket, but we "
- "have no AF_UNIX support on this platform. This is "
- "probably a bug.",
- p->virtual_port);
+ log_warn(LD_BUG,
+ "Service maps port %d to an AF_UNIX socket, but we "
+ "have no AF_UNIX support on this platform. This is "
+ "probably a bug.",
+ p->virtual_port);
+ rend_service_free(service);
+ return -1;
#endif /* defined(HAVE_SYS_UN_H) */
}
}
+ /* The service passed all the checks */
+ tor_assert(s_list);
+ smartlist_add(s_list, service);
return 0;
}
/* NOTREACHED */
@@ -452,6 +507,41 @@ rend_service_port_config_free(rend_service_port_config_t *p)
tor_free(p);
}
+/* Check the directory for <b>service</b>, and add the service to
+ * <b>service_list</b>, or to the global list if <b>service_list</b> is NULL.
+ * Only add the service to the list if <b>validate_only</b> is false.
+ * If <b>validate_only</b> is true, free the service.
+ * If <b>service</b> is NULL, ignore it, and return 0.
+ * Returns 0 on success, and -1 on failure.
+ * Takes ownership of <b>service</b>, either freeing it, or adding it to the
+ * global service list.
+ */
+STATIC int
+rend_service_check_dir_and_add(smartlist_t *service_list,
+ const or_options_t *options,
+ rend_service_t *service,
+ int validate_only)
+{
+ if (!service) {
+ /* It is ok for a service to be NULL, this means there are no services */
+ return 0;
+ }
+
+ if (rend_service_check_private_dir(options, service, !validate_only)
+ < 0) {
+ rend_service_free(service);
+ return -1;
+ }
+
+ smartlist_t *s_list = rend_get_service_list_mutable(service_list);
+ /* We must have a service list, even if it's a temporary one, so we can
+ * check for duplicate services */
+ if (BUG(!s_list)) {
+ return -1;
+ }
+ return rend_add_service(s_list, service);
+}
+
/** Set up rend_service_list, based on the values of HiddenServiceDir and
* HiddenServicePort in <b>options</b>. Return 0 on success and -1 on
* failure. (If <b>validate_only</b> is set, parse, warn and return as
@@ -464,25 +554,21 @@ rend_config_services(const or_options_t *options, int validate_only)
rend_service_t *service = NULL;
rend_service_port_config_t *portcfg;
smartlist_t *old_service_list = NULL;
+ smartlist_t *temp_service_list = NULL;
int ok = 0;
- if (!validate_only) {
- old_service_list = rend_service_list;
- rend_service_list = smartlist_new();
- }
+ /* Use a temporary service list, so that we can check the new services'
+ * consistency with each other */
+ temp_service_list = smartlist_new();
for (line = options->RendConfigLines; line; line = line->next) {
if (!strcasecmp(line->key, "HiddenServiceDir")) {
- if (service) { /* register the one we just finished parsing */
- if (rend_service_check_private_dir(options, service, 0) < 0) {
- rend_service_free(service);
+ /* register the service we just finished parsing
+ * this code registers every service except the last one parsed,
+ * which is registered below the loop */
+ if (rend_service_check_dir_and_add(temp_service_list, options, service,
+ validate_only) < 0) {
return -1;
- }
-
- if (validate_only)
- rend_service_free(service);
- else
- rend_add_service(service);
}
service = tor_malloc_zero(sizeof(rend_service_t));
service->directory = tor_strdup(line->value);
@@ -693,19 +779,30 @@ rend_config_services(const or_options_t *options, int validate_only)
}
}
}
- if (service) {
- if (rend_service_check_private_dir(options, service, 0) < 0) {
- rend_service_free(service);
- return -1;
- }
+ /* register the final service after we have finished parsing all services
+ * this code only registers the last service, other services are registered
+ * within the loop. It is ok for this service to be NULL, it is ignored. */
+ if (rend_service_check_dir_and_add(temp_service_list, options, service,
+ validate_only) < 0) {
+ return -1;
+ }
- if (validate_only) {
- rend_service_free(service);
- } else {
- rend_add_service(service);
- }
+ /* Free the newly added services if validating */
+ if (validate_only) {
+ SMARTLIST_FOREACH(temp_service_list, rend_service_t *, ptr,
+ rend_service_free(ptr));
+ smartlist_free(temp_service_list);
+ temp_service_list = NULL;
+ return 0;
}
+ /* Otherwise, use the newly added services as the new service list
+ * Since we have now replaced the global service list, from this point on we
+ * must succeed, or die trying. */
+ old_service_list = rend_service_list;
+ rend_service_list = temp_service_list;
+ temp_service_list = NULL;
+
/* If this is a reload and there were hidden services configured before,
* keep the introduction points that are still needed and close the
* other ones. */
@@ -727,7 +824,7 @@ rend_config_services(const or_options_t *options, int validate_only)
* will NOT have their intro point closed.
*/
SMARTLIST_FOREACH(old_service_list, rend_service_t *, old, {
- if (!old->directory) {
+ if (rend_service_is_ephemeral(old)) {
SMARTLIST_DEL_CURRENT(old_service_list, old);
smartlist_add(surviving_services, old);
smartlist_add(rend_service_list, old);
@@ -739,15 +836,20 @@ rend_config_services(const or_options_t *options, int validate_only)
* probably ok? */
SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, new) {
SMARTLIST_FOREACH_BEGIN(old_service_list, rend_service_t *, old) {
- if (new->directory && old->directory &&
- !strcmp(old->directory, new->directory)) {
- smartlist_add_all(new->intro_nodes, old->intro_nodes);
- smartlist_clear(old->intro_nodes);
- smartlist_add_all(new->expiring_nodes, old->expiring_nodes);
- smartlist_clear(old->expiring_nodes);
- smartlist_add(surviving_services, old);
- break;
+ if (BUG(rend_service_is_ephemeral(new)) ||
+ BUG(rend_service_is_ephemeral(old))) {
+ continue;
}
+ if (BUG(!new->directory) || BUG(!old->directory) ||
+ strcmp(old->directory, new->directory)) {
+ continue;
+ }
+ smartlist_add_all(new->intro_nodes, old->intro_nodes);
+ smartlist_clear(old->intro_nodes);
+ smartlist_add_all(new->expiring_nodes, old->expiring_nodes);
+ smartlist_clear(old->expiring_nodes);
+ smartlist_add(surviving_services, old);
+ break;
} SMARTLIST_FOREACH_END(old);
} SMARTLIST_FOREACH_END(new);
@@ -859,7 +961,7 @@ rend_service_add_ephemeral(crypto_pk_t *pk,
}
/* Initialize the service. */
- if (rend_add_service(s)) {
+ if (rend_add_service(NULL, s)) {
return RSAE_INTERNAL;
}
*service_id_out = tor_strdup(s->service_id);
@@ -1009,6 +1111,11 @@ service_is_single_onion_poisoned(const rend_service_t *service)
char *poison_fname = NULL;
file_status_t fstatus;
+ /* Passing a NULL service is a bug */
+ if (BUG(!service)) {
+ return 0;
+ }
+
if (rend_service_is_ephemeral(service)) {
return 0;
}
@@ -1042,58 +1149,69 @@ rend_service_private_key_exists(const rend_service_t *service)
return private_key_status == FN_FILE;
}
-/** Check the single onion service poison state of all existing hidden service
- * directories:
- * - If each service is poisoned, and we are in Single Onion Mode,
+/** Check the single onion service poison state of the directory for s:
+ * - If the service is poisoned, and we are in Single Onion Mode,
* return 0,
- * - If each service is not poisoned, and we are not in Single Onion Mode,
+ * - If the service is not poisoned, and we are not in Single Onion Mode,
* return 0,
- * - Otherwise, the poison state is invalid, and a service that was created in
- * one mode is being used in the other, return -1.
- * Hidden service directories without keys are not checked for consistency.
- * When their keys are created, they will be poisoned (if needed).
- * If a <b>service_list</b> is provided, treat it
- * as the list of hidden services (used in unittests). */
-int
-rend_service_list_verify_single_onion_poison(const smartlist_t *service_list,
- const or_options_t *options)
+ * - Otherwise, the poison state is invalid: the service was created in one
+ * mode, and is being used in the other, return -1.
+ * Hidden service directories without keys are always considered consistent.
+ * They will be poisoned after their directory is created (if needed). */
+STATIC int
+rend_service_verify_single_onion_poison(const rend_service_t* s,
+ const or_options_t* options)
{
- const smartlist_t *s_list;
- /* If no special service list is provided, then just use the global one. */
- if (!service_list) {
- if (!rend_service_list) { /* No global HS list. Nothing to see here. */
- return 0;
- }
+ /* Passing a NULL service is a bug */
+ if (BUG(!s)) {
+ return -1;
+ }
- s_list = rend_service_list;
- } else {
- s_list = service_list;
+ /* Ephemeral services are checked at ADD_ONION time */
+ if (BUG(rend_service_is_ephemeral(s))) {
+ return -1;
}
- int consistent = 1;
- SMARTLIST_FOREACH_BEGIN(s_list, const rend_service_t *, s) {
- if (service_is_single_onion_poisoned(s) !=
- rend_service_non_anonymous_mode_enabled(options) &&
- rend_service_private_key_exists(s)) {
- consistent = 0;
- }
- } SMARTLIST_FOREACH_END(s);
+ /* Service is expected to have a directory */
+ if (BUG(!s->directory)) {
+ return -1;
+ }
+
+ /* Services without keys are always ok - their keys will only ever be used
+ * in the current mode */
+ if (!rend_service_private_key_exists(s)) {
+ return 0;
+ }
+
+ /* The key has been used before in a different mode */
+ if (service_is_single_onion_poisoned(s) !=
+ rend_service_non_anonymous_mode_enabled(options)) {
+ return -1;
+ }
- return consistent ? 0 : -1;
+ /* The key exists and is consistent with the current mode */
+ return 0;
}
-/*** Helper for rend_service_poison_new_single_onion_dirs(). Add a file to
- * this hidden service directory that marks it as a single onion service.
- * Tor must be in single onion mode before calling this function.
+/*** Helper for rend_service_poison_new_single_onion_dir(). Add a file to
+ * the hidden service directory for s that marks it as a single onion service.
+ * Tor must be in single onion mode before calling this function, and the
+ * service directory must already have been created.
* Returns 0 when a directory is successfully poisoned, or if it is already
* poisoned. Returns -1 on a failure to read the directory or write the poison
* file, or if there is an existing private key file in the directory. (The
* service should have been poisoned when the key was created.) */
static int
-poison_new_single_onion_hidden_service_dir(const rend_service_t *service)
+poison_new_single_onion_hidden_service_dir_impl(const rend_service_t *service,
+ const or_options_t* options)
{
+ /* Passing a NULL service is a bug */
+ if (BUG(!service)) {
+ return -1;
+ }
+
/* We must only poison directories if we're in Single Onion mode */
- tor_assert(rend_service_non_anonymous_mode_enabled(get_options()));
+ tor_assert(rend_service_non_anonymous_mode_enabled(options));
int fd;
int retval = -1;
@@ -1111,8 +1229,8 @@ poison_new_single_onion_hidden_service_dir(const rend_service_t *service)
return -1;
}
- /* Make sure the directory exists */
- if (rend_service_check_private_dir(get_options(), service, 1) < 0)
+ /* Make sure the directory was created before calling this function. */
+ if (BUG(rend_service_check_private_dir_impl(options, service, 0) < 0))
return -1;
poison_fname = rend_service_sos_poison_path(service);
@@ -1149,44 +1267,39 @@ poison_new_single_onion_hidden_service_dir(const rend_service_t *service)
return retval;
}
-/** We just got launched in Single Onion Mode. That's a non-anoymous
- * mode for hidden services; hence we should mark all new hidden service
- * directories appropriately so that they are never launched as
- * location-private hidden services again. (New directories don't have private
- * key files.)
- * If a <b>service_list</b> is provided, treat it as the list of hidden
- * services (used in unittests).
+/** We just got launched in Single Onion Mode. That's a non-anonymous mode for
+ * hidden services. If s is new, we should mark its hidden service
+ * directory appropriately so that it is never launched as a location-private
+ * hidden service. (New directories don't have private key files.)
* Return 0 on success, -1 on fail. */
-int
-rend_service_poison_new_single_onion_dirs(const smartlist_t *service_list)
+STATIC int
+rend_service_poison_new_single_onion_dir(const rend_service_t *s,
+ const or_options_t* options)
{
+ /* Passing a NULL service is a bug */
+ if (BUG(!s)) {
+ return -1;
+ }
+
/* We must only poison directories if we're in Single Onion mode */
- tor_assert(rend_service_non_anonymous_mode_enabled(get_options()));
+ tor_assert(rend_service_non_anonymous_mode_enabled(options));
- const smartlist_t *s_list;
- /* If no special service list is provided, then just use the global one. */
- if (!service_list) {
- if (!rend_service_list) { /* No global HS list. Nothing to see here. */
- return 0;
- }
+ /* Ephemeral services aren't allowed in non-anonymous mode */
+ if (BUG(rend_service_is_ephemeral(s))) {
+ return -1;
+ }
- s_list = rend_service_list;
- } else {
- s_list = service_list;
+ /* Service is expected to have a directory */
+ if (BUG(!s->directory)) {
+ return -1;
}
- SMARTLIST_FOREACH_BEGIN(s_list, const rend_service_t *, s) {
- if (!rend_service_private_key_exists(s)) {
- if (poison_new_single_onion_hidden_service_dir(s) < 0) {
- return -1;
- }
+ if (!rend_service_private_key_exists(s)) {
+ if (poison_new_single_onion_hidden_service_dir_impl(s, options)
+ < 0) {
+ return -1;
}
- } SMARTLIST_FOREACH_END(s);
-
- /* The keys for these services are linked to the server IP address */
- log_notice(LD_REND, "The configured onion service directories have been "
- "used in single onion mode. They can not be used for anonymous "
- "hidden services.");
+ }
return 0;
}
@@ -1200,13 +1313,10 @@ rend_service_poison_new_single_onion_dirs(const smartlist_t *service_list)
int
rend_service_load_all_keys(const smartlist_t *service_list)
{
- const smartlist_t *s_list;
- /* If no special service list is provided, then just use the global one. */
- if (!service_list) {
- tor_assert(rend_service_list);
- s_list = rend_service_list;
- } else {
- s_list = service_list;
+ /* Use service_list for unit tests */
+ const smartlist_t *s_list = rend_get_service_list(service_list);
+ if (BUG(!s_list)) {
+ return -1;
}
SMARTLIST_FOREACH_BEGIN(s_list, rend_service_t *, s) {
@@ -1270,6 +1380,32 @@ rend_service_derive_key_digests(struct rend_service_t *s)
return 0;
}
+/* Implements the directory check from rend_service_check_private_dir,
+ * without doing the single onion poison checks. */
+static int
+rend_service_check_private_dir_impl(const or_options_t *options,
+ const rend_service_t *s,
+ int create)
+{
+ cpd_check_t check_opts = CPD_NONE;
+ if (create) {
+ check_opts |= CPD_CREATE;
+ } else {
+ check_opts |= CPD_CHECK_MODE_ONLY;
+ check_opts |= CPD_CHECK;
+ }
+ if (s->dir_group_readable) {
+ check_opts |= CPD_GROUP_READ;
+ }
+ /* Check/create directory */
+ if (check_private_dir(s->directory, check_opts, options->User) < 0) {
+ log_warn(LD_REND, "Checking service directory %s failed.", s->directory);
+ return -1;
+ }
+
+ return 0;
+}
+
/** Make sure that the directory for <b>s</b> is private, using the config in
* <b>options</b>.
* If <b>create</b> is true:
@@ -1284,20 +1420,58 @@ rend_service_check_private_dir(const or_options_t *options,
const rend_service_t *s,
int create)
{
- cpd_check_t check_opts = CPD_NONE;
- if (create) {
- check_opts |= CPD_CREATE;
- } else {
- check_opts |= CPD_CHECK_MODE_ONLY;
- check_opts |= CPD_CHECK;
- }
- if (s->dir_group_readable) {
- check_opts |= CPD_GROUP_READ;
+ /* Passing a NULL service is a bug */
+ if (BUG(!s)) {
+ return -1;
}
+
/* Check/create directory */
- if (check_private_dir(s->directory, check_opts, options->User) < 0) {
+ if (rend_service_check_private_dir_impl(options, s, create) < 0) {
+ return -1;
+ }
+
+ /* Check if the hidden service key exists, and was created in a different
+ * single onion service mode, and refuse to launch if it has.
+ * This is safe to call even when create is false, as it ignores missing
+ * keys and directories: they are always valid.
+ */
+ if (rend_service_verify_single_onion_poison(s, options) < 0) {
+ /* We can't use s->service_id here, as the key may not have been loaded */
+ log_warn(LD_GENERAL, "We are configured with "
+ "HiddenServiceNonAnonymousMode %d, but the hidden "
+ "service key in directory %s was created in %s mode. "
+ "This is not allowed.",
+ rend_service_non_anonymous_mode_enabled(options) ? 1 : 0,
+ rend_service_escaped_dir(s),
+ rend_service_non_anonymous_mode_enabled(options) ?
+ "an anonymous" : "a non-anonymous"
+ );
return -1;
}
+
+ /* Poison new single onion directories immediately after they are created,
+ * so that we never accidentally launch non-anonymous hidden services
+ * thinking they are anonymous. Any keys created later will end up with the
+ * correct poisoning state.
+ */
+ if (create && rend_service_non_anonymous_mode_enabled(options)) {
+ static int logged_warning = 0;
+
+ if (rend_service_poison_new_single_onion_dir(s, options) < 0) {
+ log_warn(LD_GENERAL,"Failed to mark new hidden services as non-anonymous"
+ ".");
+ return -1;
+ }
+
+ if (!logged_warning) {
+ /* The keys for these services are linked to the server IP address */
+ log_notice(LD_REND, "The configured onion service directories have been "
+ "used in single onion mode. They can not be used for "
+ "anonymous hidden services.");
+ logged_warning = 1;
+ }
+ }
+
return 0;
}
@@ -1310,7 +1484,9 @@ rend_service_load_keys(rend_service_t *s)
char *fname = NULL;
char buf[128];
- if (rend_service_check_private_dir(get_options(), s, 1) < 0)
+ /* Make sure the directory was created and single onion poisoning was
+ * checked before calling this function */
+ if (BUG(rend_service_check_private_dir(get_options(), s, 0) < 0))
goto err;
/* Load key */
@@ -2984,6 +3160,57 @@ count_intro_point_circuits(const rend_service_t *service)
return num_ipos;
}
+/* Given a buffer of at least RELAY_PAYLOAD_SIZE bytes in <b>cell_body_out</b>,
+ write the body of a legacy ESTABLISH_INTRO cell in it. Use <b>intro_key</b>
+ as the intro point auth key, and <b>rend_circ_nonce</b> as the circuit
+ crypto material. On success, fill <b>cell_body_out</b> and return the number
+ of bytes written. On fail, return -1.
+ */
+STATIC ssize_t
+encode_establish_intro_cell_legacy(char *cell_body_out, crypto_pk_t *intro_key,
+ char *rend_circ_nonce)
+{
+ int retval = -1;
+ int r;
+ int len = 0;
+ char auth[DIGEST_LEN + 9];
+
+ tor_assert(intro_key);
+ tor_assert(rend_circ_nonce);
+
+ /* Build the payload for a RELAY_ESTABLISH_INTRO cell. */
+ r = crypto_pk_asn1_encode(intro_key, cell_body_out+2,
+ RELAY_PAYLOAD_SIZE-2);
+ if (r < 0) {
+ log_warn(LD_BUG, "Internal error; failed to establish intro point.");
+ goto err;
+ }
+ len = r;
+ set_uint16(cell_body_out, htons((uint16_t)len));
+ len += 2;
+ memcpy(auth, rend_circ_nonce, DIGEST_LEN);
+ memcpy(auth+DIGEST_LEN, "INTRODUCE", 9);
+ if (crypto_digest(cell_body_out+len, auth, DIGEST_LEN+9))
+ goto err;
+ len += 20;
+ note_crypto_pk_op(REND_SERVER);
+ r = crypto_pk_private_sign_digest(intro_key, cell_body_out+len,
+ sizeof(cell_body_out)-len,
+ cell_body_out, len);
+ if (r<0) {
+ log_warn(LD_BUG, "Internal error: couldn't sign introduction request.");
+ goto err;
+ }
+ len += r;
+
+ retval = len;
+
+ err:
+ memwipe(auth, 0, sizeof(auth));
+
+ return retval;
+}
+
/** Called when we're done building a circuit to an introduction point:
* sends a RELAY_ESTABLISH_INTRO cell.
*/
@@ -2991,10 +3218,7 @@ void
rend_service_intro_has_opened(origin_circuit_t *circuit)
{
rend_service_t *service;
- size_t len;
- int r;
char buf[RELAY_PAYLOAD_SIZE];
- char auth[DIGEST_LEN + 9];
char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
int reason = END_CIRC_REASON_TORPROTOCOL;
const char *rend_pk_digest;
@@ -3069,41 +3293,24 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
(unsigned)circuit->base_.n_circ_id, serviceid);
circuit_log_path(LOG_INFO, LD_REND, circuit);
- /* Use the intro key instead of the service key in ESTABLISH_INTRO. */
- crypto_pk_t *intro_key = circuit->intro_key;
- /* Build the payload for a RELAY_ESTABLISH_INTRO cell. */
- r = crypto_pk_asn1_encode(intro_key, buf+2,
- RELAY_PAYLOAD_SIZE-2);
- if (r < 0) {
- log_warn(LD_BUG, "Internal error; failed to establish intro point.");
- reason = END_CIRC_REASON_INTERNAL;
- goto err;
- }
- len = r;
- set_uint16(buf, htons((uint16_t)len));
- len += 2;
- memcpy(auth, circuit->cpath->prev->rend_circ_nonce, DIGEST_LEN);
- memcpy(auth+DIGEST_LEN, "INTRODUCE", 9);
- if (crypto_digest(buf+len, auth, DIGEST_LEN+9))
- goto err;
- len += 20;
- note_crypto_pk_op(REND_SERVER);
- r = crypto_pk_private_sign_digest(intro_key, buf+len, sizeof(buf)-len,
- buf, len);
- if (r<0) {
- log_warn(LD_BUG, "Internal error: couldn't sign introduction request.");
- reason = END_CIRC_REASON_INTERNAL;
- goto err;
- }
- len += r;
+ /* Send the ESTABLISH_INTRO cell */
+ {
+ ssize_t len;
+ len = encode_establish_intro_cell_legacy(buf, circuit->intro_key,
+ circuit->cpath->prev->rend_circ_nonce);
+ if (len < 0) {
+ reason = END_CIRC_REASON_INTERNAL;
+ goto err;
+ }
- if (relay_send_command_from_edge(0, TO_CIRCUIT(circuit),
- RELAY_COMMAND_ESTABLISH_INTRO,
- buf, len, circuit->cpath->prev)<0) {
- log_info(LD_GENERAL,
+ if (relay_send_command_from_edge(0, TO_CIRCUIT(circuit),
+ RELAY_COMMAND_ESTABLISH_INTRO,
+ buf, len, circuit->cpath->prev)<0) {
+ log_info(LD_GENERAL,
"Couldn't send introduction request for service %s on circuit %u",
serviceid, (unsigned)circuit->base_.n_circ_id);
- goto done;
+ goto done;
+ }
}
/* We've attempted to use this circuit */
@@ -3115,7 +3322,6 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
circuit_mark_for_close(TO_CIRCUIT(circuit), reason);
done:
memwipe(buf, 0, sizeof(buf));
- memwipe(auth, 0, sizeof(auth));
memwipe(serviceid, 0, sizeof(serviceid));
return;
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index 630191e8b7..4e6b9a2536 100644
--- a/src/or/rendservice.h
+++ b/src/or/rendservice.h
@@ -119,7 +119,19 @@ typedef struct rend_service_t {
STATIC void rend_service_free(rend_service_t *service);
STATIC char *rend_service_sos_poison_path(const rend_service_t *service);
-
+STATIC int rend_service_check_dir_and_add(smartlist_t *service_list,
+ const or_options_t *options,
+ rend_service_t *service,
+ int validate_only);
+STATIC int rend_service_verify_single_onion_poison(
+ const rend_service_t *s,
+ const or_options_t *options);
+STATIC int rend_service_poison_new_single_onion_dir(
+ const rend_service_t *s,
+ const or_options_t* options);
+STATIC ssize_t encode_establish_intro_cell_legacy(char *cell_body_out,
+ crypto_pk_t *intro_key,
+ char *rend_circ_nonce);
#endif
int num_rend_services(void);
@@ -165,11 +177,6 @@ void rend_service_port_config_free(rend_service_port_config_t *p);
void rend_authorized_client_free(rend_authorized_client_t *client);
-int rend_service_list_verify_single_onion_poison(
- const smartlist_t *service_list,
- const or_options_t *options);
-int rend_service_poison_new_single_onion_dirs(const smartlist_t *service_list);
-
/** Return value from rend_service_add_ephemeral. */
typedef enum {
RSAE_BADAUTH = -5, /**< Invalid auth_type/auth_clients */
diff --git a/src/or/router.c b/src/or/router.c
index fd2942ec67..2d8208aa04 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1178,9 +1178,9 @@ router_should_be_directory_server(const or_options_t *options, int dir_port)
if (accounting_is_enabled(options) &&
get_options()->AccountingRule != ACCT_IN) {
/* Don't spend bytes for directory traffic if we could end up hibernating,
- * but allow DirPort otherwise. Some people set AccountingMax because
- * they're confused or to get statistics. Directory traffic has a much
- * larger effect on output than input so there is no reason to turn it
+ * but allow DirPort otherwise. Some relay operators set AccountingMax
+ * because they're confused or to get statistics. Directory traffic has a
+ * much larger effect on output than input so there is no reason to turn it
* off if using AccountingRule in. */
int interval_length = accounting_get_interval_length();
uint32_t effective_bw = get_effective_bwrate(options);
@@ -1312,8 +1312,15 @@ extend_info_from_router(const routerinfo_t *r)
/* Make sure we don't need to check address reachability */
tor_assert_nonfatal(router_skip_or_reachability(get_options(), 0));
+ const ed25519_public_key_t *ed_id_key;
+ if (r->cache_info.signing_key_cert)
+ ed_id_key = &r->cache_info.signing_key_cert->signing_key;
+ else
+ ed_id_key = NULL;
+
router_get_prim_orport(r, &ap);
return extend_info_new(r->nickname, r->cache_info.identity_digest,
+ ed_id_key,
r->onion_pkey, r->onion_curve25519_pkey,
&ap.addr, ap.port);
}
diff --git a/src/or/routerkeys.c b/src/or/routerkeys.c
index 8d9a1328b8..51802b15e5 100644
--- a/src/or/routerkeys.c
+++ b/src/or/routerkeys.c
@@ -742,8 +742,12 @@ load_ed_keys(const or_options_t *options, time_t now)
if (need_new_signing_key) {
log_notice(LD_OR, "It looks like I need to generate and sign a new "
- "medium-term signing key, because %s. To do that, I need to "
- "load%s the permanent master identity key.",
+ "medium-term signing key, because %s. To do that, I "
+ "need to load%s the permanent master identity key. "
+ "If the master identity key was not moved or encrypted "
+ "with a passphrase, this will be done automatically and "
+ "no further action is required. Otherwise, provide the "
+ "necessary data using 'tor --keygen' to do it manually.",
(NULL == use_signing) ? "I don't have one" :
EXPIRES_SOON(check_signing_cert, 0) ? "the one I have is expired" :
"you asked me to make one with --keygen",
@@ -751,15 +755,19 @@ load_ed_keys(const or_options_t *options, time_t now)
} else if (want_new_signing_key && !offline_master) {
log_notice(LD_OR, "It looks like I should try to generate and sign a "
"new medium-term signing key, because the one I have is "
- "going to expire soon. To do that, I'm going to have to try to "
- "load the permanent master identity key.");
+ "going to expire soon. To do that, I'm going to have to "
+ "try to load the permanent master identity key. "
+ "If the master identity key was not moved or encrypted "
+ "with a passphrase, this will be done automatically and "
+ "no further action is required. Otherwise, provide the "
+ "necessary data using 'tor --keygen' to do it manually.");
} else if (want_new_signing_key) {
log_notice(LD_OR, "It looks like I should try to generate and sign a "
"new medium-term signing key, because the one I have is "
"going to expire soon. But OfflineMasterKey is set, so I "
- "won't try to load a permanent master identity key is set. "
- "You will need to use 'tor --keygen' make a new signing key "
- "and certificate.");
+ "won't try to load a permanent master identity key. You "
+ "will need to use 'tor --keygen' to make a new signing "
+ "key and certificate.");
}
{
@@ -1091,6 +1099,14 @@ get_master_identity_key(void)
return &master_identity_key->pubkey;
}
+/** Return true iff <b>id</b> is our Ed25519 master identity key. */
+int
+router_ed25519_id_is_me(const ed25519_public_key_t *id)
+{
+ return id && master_identity_key &&
+ ed25519_pubkey_eq(id, &master_identity_key->pubkey);
+}
+
#ifdef TOR_UNIT_TESTS
/* only exists for the unit tests, since otherwise the identity key
* should be used to sign nothing but the signing key. */
diff --git a/src/or/routerkeys.h b/src/or/routerkeys.h
index 307a1cd234..98894cdc0b 100644
--- a/src/or/routerkeys.h
+++ b/src/or/routerkeys.h
@@ -45,6 +45,8 @@ const struct tor_cert_st *get_current_auth_key_cert(void);
void get_master_rsa_crosscert(const uint8_t **cert_out,
size_t *size_out);
+int router_ed25519_id_is_me(const ed25519_public_key_t *id);
+
struct tor_cert_st *make_ntor_onion_key_crosscert(
const curve25519_keypair_t *onion_key,
const ed25519_public_key_t *master_id_key,
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index cfa570c4a0..fb8056c67b 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -587,7 +587,7 @@ trusted_dirs_load_certs_from_string(const char *contents, int source,
"signing key %s", from_store ? "cached" : "downloaded",
ds->nickname, hex_str(cert->signing_key_digest,DIGEST_LEN));
} else {
- int adding = directory_caches_unknown_auth_certs(get_options());
+ int adding = we_want_to_fetch_unknown_auth_certs(get_options());
log_info(LD_DIR, "%s %s certificate for unrecognized directory "
"authority with signing key %s",
adding ? "Adding" : "Not adding",
@@ -1013,7 +1013,7 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now,
char *resource = NULL;
cert_list_t *cl;
const or_options_t *options = get_options();
- const int cache = directory_caches_unknown_auth_certs(options);
+ const int keep_unknown = we_want_to_fetch_unknown_auth_certs(options);
fp_pair_t *fp_tmp = NULL;
char id_digest_str[2*DIGEST_LEN+1];
char sk_digest_str[2*DIGEST_LEN+1];
@@ -1085,9 +1085,10 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now,
if (!smartlist_len(voter->sigs))
continue; /* This authority never signed this consensus, so don't
* go looking for a cert with key digest 0000000000. */
- if (!cache &&
+ if (!keep_unknown &&
!trusteddirserver_get_by_v3_auth_digest(voter->identity_digest))
- continue; /* We are not a cache, and we don't know this authority.*/
+ continue; /* We don't want unknown certs, and we don't know this
+ * authority.*/
/*
* If we don't know *any* cert for this authority, and a download by ID
@@ -2997,20 +2998,6 @@ router_digest_is_trusted_dir_type(const char *digest, dirinfo_type_t type)
return 0;
}
-/** Return true iff <b>addr</b> is the address of one of our trusted
- * directory authorities. */
-int
-router_addr_is_trusted_dir(uint32_t addr)
-{
- if (!trusted_dir_servers)
- return 0;
- SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ent,
- if (ent->addr == addr)
- return 1;
- );
- return 0;
-}
-
/** If hexdigest is correctly formed, base16_decode it into
* digest, which must have DIGEST_LEN space in it.
* Return 0 on success, -1 on failure.
@@ -3243,6 +3230,17 @@ signed_descriptor_free(signed_descriptor_t *sd)
tor_free(sd);
}
+/** Reset the given signed descriptor <b>sd</b> by freeing the allocated
+ * memory inside the object and by zeroing its content. */
+static void
+signed_descriptor_reset(signed_descriptor_t *sd)
+{
+ tor_assert(sd);
+ tor_free(sd->signed_descriptor_body);
+ tor_cert_free(sd->signing_key_cert);
+ memset(sd, 0, sizeof(*sd));
+}
+
/** Copy src into dest, and steal all references inside src so that when
* we free src, we don't mess up dest. */
static void
@@ -3250,6 +3248,8 @@ signed_descriptor_move(signed_descriptor_t *dest,
signed_descriptor_t *src)
{
tor_assert(dest != src);
+ /* Cleanup destination object before overwriting it.*/
+ signed_descriptor_reset(dest);
memcpy(dest, src, sizeof(signed_descriptor_t));
src->signed_descriptor_body = NULL;
src->signing_key_cert = NULL;
@@ -3902,7 +3902,7 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router_describe(router));
*msg = "Router descriptor is not referenced by any network-status.";
- /* Only journal this desc if we'll be serving it. */
+ /* Only journal this desc if we want to keep old descriptors */
if (!from_cache && should_cache_old_descriptors())
signed_desc_append_to_journal(&router->cache_info,
&routerlist->desc_store);
@@ -4489,7 +4489,7 @@ router_load_extrainfo_from_string(const char *s, const char *eos,
ei->cache_info.identity_digest,
DIGEST_LEN);
smartlist_string_remove(requested_fingerprints, fp);
- /* We silently let people stuff us with extrainfos we didn't ask for,
+ /* We silently let relays stuff us with extrainfos we didn't ask for,
* so long as we would have wanted them anyway. Since we always fetch
* all the extrainfos we want, and we never actually act on them
* inside Tor, this should be harmless. */
@@ -4532,13 +4532,14 @@ router_load_extrainfo_from_string(const char *s, const char *eos,
smartlist_free(extrainfo_list);
}
-/** Return true iff any networkstatus includes a descriptor whose digest
- * is that of <b>desc</b>. */
+/** Return true iff the latest ns-flavored consensus includes a descriptor
+ * whose digest is that of <b>desc</b>. */
static int
signed_desc_digest_is_recognized(signed_descriptor_t *desc)
{
const routerstatus_t *rs;
- networkstatus_t *consensus = networkstatus_get_latest_consensus();
+ networkstatus_t *consensus = networkstatus_get_latest_consensus_by_flavor(
+ FLAV_NS);
if (consensus) {
rs = networkstatus_vote_find_entry(consensus, desc->identity_digest);
@@ -5161,7 +5162,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
++n_would_reject;
continue; /* We would throw it out immediately. */
}
- if (!directory_caches_dir_info(options) &&
+ if (!we_want_to_fetch_flavor(options, consensus->flavor) &&
!client_would_use_router(rs, now, options)) {
++n_wouldnt_use;
continue; /* We would never use it ourself. */
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index 606e9085ce..8b68d69f28 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -86,7 +86,6 @@ int router_digest_is_trusted_dir_type(const char *digest,
#define router_digest_is_trusted_dir(d) \
router_digest_is_trusted_dir_type((d), NO_DIRINFO)
-int router_addr_is_trusted_dir(uint32_t addr);
int hexdigest_to_digest(const char *hexdigest, char *digest);
const routerinfo_t *router_get_by_id_digest(const char *digest);
routerinfo_t *router_get_mutable_by_digest(const char *digest);
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 60fdce0b64..068e226f61 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -370,8 +370,7 @@ static int router_get_hashes_impl(const char *s, size_t s_len,
char end_char);
static smartlist_t *find_all_exitpolicy(smartlist_t *s);
-#define CST_CHECK_AUTHORITY (1<<0)
-#define CST_NO_CHECK_OBJTYPE (1<<1)
+#define CST_NO_CHECK_OBJTYPE (1<<0)
static int check_signature_token(const char *digest,
ssize_t digest_len,
directory_token_t *tok,
@@ -715,7 +714,7 @@ dump_desc_populate_one_file, (const char *dirname, const char *f))
* filename.
*/
if (crypto_digest256((char *)content_digest, desc, (size_t) st.st_size,
- DIGEST_SHA256) != 0) {
+ DIGEST_SHA256) < 0) {
/* Weird, but okay */
log_info(LD_DIR,
"Unable to hash content of %s from unparseable descriptors "
@@ -879,7 +878,7 @@ dump_desc(const char *desc, const char *type)
/* Get the hash for logging purposes anyway */
len = strlen(desc);
if (crypto_digest256((char *)digest_sha256, desc, len,
- DIGEST_SHA256) != 0) {
+ DIGEST_SHA256) < 0) {
log_info(LD_DIR,
"Unable to parse descriptor of type %s, and unable to even hash"
" it!", type);
@@ -1173,28 +1172,9 @@ tor_version_is_obsolete(const char *myversion, const char *versionlist)
return ret;
}
-/** Return true iff <b>key</b> is allowed to sign directories.
- */
-static int
-dir_signing_key_is_trusted(crypto_pk_t *key)
-{
- char digest[DIGEST_LEN];
- if (!key) return 0;
- if (crypto_pk_get_digest(key, digest) < 0) {
- log_warn(LD_DIR, "Error computing dir-signing-key digest");
- return 0;
- }
- if (!router_digest_is_trusted_dir(digest)) {
- log_warn(LD_DIR, "Listed dir-signing-key is not trusted");
- return 0;
- }
- return 1;
-}
-
/** Check whether the object body of the token in <b>tok</b> has a good
- * signature for <b>digest</b> using key <b>pkey</b>. If
- * <b>CST_CHECK_AUTHORITY</b> is set, make sure that <b>pkey</b> is the key of
- * a directory authority. If <b>CST_NO_CHECK_OBJTYPE</b> is set, do not check
+ * signature for <b>digest</b> using key <b>pkey</b>.
+ * If <b>CST_NO_CHECK_OBJTYPE</b> is set, do not check
* the object type of the signature object. Use <b>doctype</b> as the type of
* the document when generating log messages. Return 0 on success, negative
* on failure.
@@ -1209,7 +1189,6 @@ check_signature_token(const char *digest,
{
char *signed_digest;
size_t keysize;
- const int check_authority = (flags & CST_CHECK_AUTHORITY);
const int check_objtype = ! (flags & CST_NO_CHECK_OBJTYPE);
tor_assert(pkey);
@@ -1217,12 +1196,6 @@ check_signature_token(const char *digest,
tor_assert(digest);
tor_assert(doctype);
- if (check_authority && !dir_signing_key_is_trusted(pkey)) {
- log_warn(LD_DIR, "Key on %s did not come from an authority; rejecting",
- doctype);
- return -1;
- }
-
if (check_objtype) {
if (strcmp(tok->object_type, "SIGNATURE")) {
log_warn(LD_DIR, "Bad object type on %s signature", doctype);
@@ -4536,12 +4509,12 @@ router_get_hash_impl(const char *s, size_t s_len, char *digest,
return -1;
if (alg == DIGEST_SHA1) {
- if (crypto_digest(digest, start, end-start)) {
+ if (crypto_digest(digest, start, end-start) < 0) {
log_warn(LD_BUG,"couldn't compute digest");
return -1;
}
} else {
- if (crypto_digest256(digest, start, end-start, alg)) {
+ if (crypto_digest256(digest, start, end-start, alg) < 0) {
log_warn(LD_BUG,"couldn't compute digest");
return -1;
}
diff --git a/src/or/shared_random.c b/src/or/shared_random.c
index 5f6b03f1ba..0eb93382ca 100644
--- a/src/or/shared_random.c
+++ b/src/or/shared_random.c
@@ -192,7 +192,7 @@ verify_commit_and_reveal(const sr_commit_t *commit)
/* Use the invariant length since the encoded reveal variable has an
* extra byte for the NUL terminated byte. */
if (crypto_digest256(received_hashed_reveal, commit->encoded_reveal,
- SR_REVEAL_BASE64_LEN, commit->alg)) {
+ SR_REVEAL_BASE64_LEN, commit->alg) < 0) {
/* Unable to digest the reveal blob, this is unlikely. */
goto invalid;
}
@@ -932,7 +932,7 @@ sr_generate_our_commit(time_t timestamp, const authority_cert_t *my_rsa_cert)
/* The invariant length is used here since the encoded reveal variable
* has an extra byte added for the NULL terminated byte. */
if (crypto_digest256(commit->hashed_reveal, commit->encoded_reveal,
- SR_REVEAL_BASE64_LEN, commit->alg)) {
+ SR_REVEAL_BASE64_LEN, commit->alg) < 0) {
goto error;
}
@@ -1012,7 +1012,7 @@ sr_compute_srv(void)
SMARTLIST_FOREACH(chunks, char *, s, tor_free(s));
smartlist_free(chunks);
if (crypto_digest256(hashed_reveals, reveals, strlen(reveals),
- SR_DIGEST_ALG)) {
+ SR_DIGEST_ALG) < 0) {
goto end;
}
current_srv = generate_srv(hashed_reveals, reveal_num,
diff --git a/src/or/torcert.c b/src/or/torcert.c
index 6bc880a89b..c58f3da2d3 100644
--- a/src/or/torcert.c
+++ b/src/or/torcert.c
@@ -648,3 +648,44 @@ or_handshake_certs_check_both(int severity,
}
}
+/* === ENCODING === */
+
+/* Encode the ed25519 certificate <b>cert</b> and put the newly allocated
+ * string in <b>cert_str_out</b>. Return 0 on success else a negative value. */
+int
+tor_cert_encode_ed22519(const tor_cert_t *cert, char **cert_str_out)
+{
+ int ret = -1;
+ char *ed_cert_b64 = NULL;
+ size_t ed_cert_b64_len;
+
+ tor_assert(cert);
+ tor_assert(cert_str_out);
+
+ /* Get the encoded size and add the NUL byte. */
+ ed_cert_b64_len = base64_encode_size(cert->encoded_len,
+ BASE64_ENCODE_MULTILINE) + 1;
+ ed_cert_b64 = tor_malloc_zero(ed_cert_b64_len);
+
+ /* Base64 encode the encoded certificate. */
+ if (base64_encode(ed_cert_b64, ed_cert_b64_len,
+ (const char *) cert->encoded, cert->encoded_len,
+ BASE64_ENCODE_MULTILINE) < 0) {
+ log_err(LD_BUG, "Couldn't base64-encode ed22519 cert!");
+ goto err;
+ }
+
+ /* Put everything together in a NUL terminated string. */
+ tor_asprintf(cert_str_out,
+ "-----BEGIN ED25519 CERT-----\n"
+ "%s"
+ "-----END ED25519 CERT-----",
+ ed_cert_b64);
+ /* Success! */
+ ret = 0;
+
+ err:
+ tor_free(ed_cert_b64);
+ return ret;
+}
+
diff --git a/src/or/torcert.h b/src/or/torcert.h
index 4bd816f4a4..090f6b5811 100644
--- a/src/or/torcert.h
+++ b/src/or/torcert.h
@@ -98,5 +98,7 @@ void or_handshake_certs_check_both(int severity,
const ed25519_public_key_t **ed_id_out,
const common_digests_t **rsa_id_out);
+int tor_cert_encode_ed22519(const tor_cert_t *cert, char **cert_str_out);
+
#endif
diff --git a/src/test/include.am b/src/test/include.am
index f6e43148f0..d406d6d324 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -80,6 +80,7 @@ src_test_test_SOURCES = \
src/test/test_checkdir.c \
src/test/test_circuitlist.c \
src/test/test_circuitmux.c \
+ src/test/test_circuituse.c \
src/test/test_compat_libevent.c \
src/test/test_config.c \
src/test/test_connection.c \
@@ -96,6 +97,8 @@ src_test_test_SOURCES = \
src/test/test_guardfraction.c \
src/test/test_extorport.c \
src/test/test_hs.c \
+ src/test/test_hs_service.c \
+ src/test/test_hs_intropoint.c \
src/test/test_handles.c \
src/test/test_hs_cache.c \
src/test/test_hs_descriptor.c \
diff --git a/src/test/test.c b/src/test/test.c
index b02ecb922d..866408e856 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -1190,6 +1190,7 @@ struct testgroup_t testgroups[] = {
{ "checkdir/", checkdir_tests },
{ "circuitlist/", circuitlist_tests },
{ "circuitmux/", circuitmux_tests },
+ { "circuituse/", circuituse_tests },
{ "compat/libevent/", compat_libevent_tests },
{ "config/", config_tests },
{ "connection/", connection_tests },
@@ -1204,9 +1205,11 @@ struct testgroup_t testgroups[] = {
{ "entrynodes/", entrynodes_tests },
{ "guardfraction/", guardfraction_tests },
{ "extorport/", extorport_tests },
- { "hs/", hs_tests },
+ { "legacy_hs/", hs_tests },
{ "hs_cache/", hs_cache },
{ "hs_descriptor/", hs_descriptor },
+ { "hs_service/", hs_service_tests },
+ { "hs_intropoint/", hs_intropoint_tests },
{ "introduce/", introduce_tests },
{ "keypin/", keypin_tests },
{ "link-handshake/", link_handshake_tests },
diff --git a/src/test/test.h b/src/test/test.h
index 49b4499594..2bd58f51c8 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -185,6 +185,7 @@ extern struct testcase_t channeltls_tests[];
extern struct testcase_t checkdir_tests[];
extern struct testcase_t circuitlist_tests[];
extern struct testcase_t circuitmux_tests[];
+extern struct testcase_t circuituse_tests[];
extern struct testcase_t compat_libevent_tests[];
extern struct testcase_t config_tests[];
extern struct testcase_t connection_tests[];
@@ -201,6 +202,8 @@ extern struct testcase_t extorport_tests[];
extern struct testcase_t hs_tests[];
extern struct testcase_t hs_cache[];
extern struct testcase_t hs_descriptor[];
+extern struct testcase_t hs_service_tests[];
+extern struct testcase_t hs_intropoint_tests[];
extern struct testcase_t introduce_tests[];
extern struct testcase_t keypin_tests[];
extern struct testcase_t link_handshake_tests[];
diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c
index f839a5b72c..bbcff38d6d 100644
--- a/src/test/test_cell_formats.c
+++ b/src/test/test_cell_formats.c
@@ -11,6 +11,7 @@
#include "channel.h"
#include "connection_edge.h"
#include "connection_or.h"
+#include "config.h"
#include "onion.h"
#include "onion_tap.h"
#include "onion_fast.h"
@@ -698,6 +699,7 @@ test_cfmt_extend_cells(void *arg)
tt_int_op(61681, OP_EQ, ec.orport_ipv4.port);
tt_str_op("2002::f0:c51e", OP_EQ, fmt_addr(&ec.orport_ipv6.addr));
tt_int_op(4370, OP_EQ, ec.orport_ipv6.port);
+ tt_assert(ed25519_public_key_is_zero(&ec.ed_pubkey));
tt_mem_op(ec.node_id,OP_EQ, "anthropomorphization", 20);
tt_int_op(cc->cell_type, OP_EQ, CELL_CREATE2);
tt_int_op(cc->handshake_type, OP_EQ, 0x105);
@@ -717,6 +719,37 @@ test_cfmt_extend_cells(void *arg)
tt_mem_op(p2+1+8+22+4,OP_EQ, b, 99+20);
tt_int_op(0, OP_EQ, create_cell_format_relayed(&cell, cc));
+ /* Now let's add an ed25519 key to that extend2 cell. */
+ memcpy(ec.ed_pubkey.pubkey,
+ "brownshoesdontmakeit/brownshoesd", 32);
+
+ /* As before, since we aren't extending by ed25519. */
+ get_options_mutable()->ExtendByEd25519ID = 0;
+ tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_len, OP_EQ, 89+99-34-20);
+ test_memeq_hex(p2,
+ "02000612F40001F0F1"
+ "0214616e7468726f706f6d6f727068697a6174696f6e"
+ "01050063");
+
+ /* Now try with the ed25519 ID. */
+ get_options_mutable()->ExtendByEd25519ID = 1;
+ tt_int_op(0, OP_EQ, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_len, OP_EQ, 89+99-34-20 + 34);
+ test_memeq_hex(p2,
+ "03000612F40001F0F1"
+ "0214616e7468726f706f6d6f727068697a6174696f6e"
+ // ed digest follows:
+ "0320" "62726f776e73686f6573646f6e746d616b656"
+ "9742f62726f776e73686f657364"
+ "01050063");
+ /* Can we parse that? Did the key come through right? */
+ memset(&ec, 0, sizeof(ec));
+ tt_int_op(0, OP_EQ, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p2, p2_len));
+ tt_mem_op("brownshoesdontmakeit/brownshoesd", OP_EQ,
+ ec.ed_pubkey.pubkey, 32);
+
/* == Now try parsing some junk */
/* Try a too-long handshake */
@@ -1257,7 +1290,7 @@ struct testcase_t cell_format_tests[] = {
TEST(connected_cells, 0),
TEST(create_cells, 0),
TEST(created_cells, 0),
- TEST(extend_cells, 0),
+ TEST(extend_cells, TT_FORK),
TEST(extended_cells, 0),
TEST(resolved_cells, 0),
TEST(is_destroy, 0),
diff --git a/src/test/test_channel.c b/src/test/test_channel.c
index e87f99ef50..862bd6dfa6 100644
--- a/src/test/test_channel.c
+++ b/src/test/test_channel.c
@@ -1768,6 +1768,112 @@ test_channel_write(void *arg)
return;
}
+static void
+test_channel_id_map(void *arg)
+{
+ (void)arg;
+#define N_CHAN 6
+ char rsa_id[N_CHAN][DIGEST_LEN];
+ ed25519_public_key_t *ed_id[N_CHAN];
+ channel_t *chan[N_CHAN];
+ int i;
+ ed25519_public_key_t ed_zero;
+ memset(&ed_zero, 0, sizeof(ed_zero));
+
+ tt_assert(sizeof(rsa_id[0]) == DIGEST_LEN); // Do I remember C?
+
+ for (i = 0; i < N_CHAN; ++i) {
+ crypto_rand(rsa_id[i], DIGEST_LEN);
+ ed_id[i] = tor_malloc_zero(sizeof(*ed_id[i]));
+ crypto_rand((char*)ed_id[i]->pubkey, sizeof(ed_id[i]->pubkey));
+ }
+
+ /* For channel 3, have no Ed identity. */
+ tor_free(ed_id[3]);
+
+ /* Channel 2 and 4 have same ROSA identity */
+ memcpy(rsa_id[4], rsa_id[2], DIGEST_LEN);
+
+ /* Channel 2 and 4 and 5 have same RSA identity */
+ memcpy(rsa_id[4], rsa_id[2], DIGEST_LEN);
+ memcpy(rsa_id[5], rsa_id[2], DIGEST_LEN);
+
+ /* Channels 2 and 5 have same Ed25519 identity */
+ memcpy(ed_id[5], ed_id[2], sizeof(*ed_id[2]));
+
+ for (i = 0; i < N_CHAN; ++i) {
+ chan[i] = new_fake_channel();
+ channel_register(chan[i]);
+ channel_set_identity_digest(chan[i], rsa_id[i], ed_id[i]);
+ }
+
+ /* Lookup by RSA id only */
+ tt_ptr_op(chan[0], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[0], NULL));
+ tt_ptr_op(chan[1], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[1], NULL));
+ tt_ptr_op(chan[3], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[3], NULL));
+ channel_t *ch;
+ ch = channel_find_by_remote_identity(rsa_id[2], NULL);
+ tt_assert(ch == chan[2] || ch == chan[4] || ch == chan[5]);
+ ch = channel_next_with_rsa_identity(ch);
+ tt_assert(ch == chan[2] || ch == chan[4] || ch == chan[5]);
+ ch = channel_next_with_rsa_identity(ch);
+ tt_assert(ch == chan[2] || ch == chan[4] || ch == chan[5]);
+ ch = channel_next_with_rsa_identity(ch);
+ tt_assert(ch == NULL);
+
+ /* As above, but with zero Ed25519 ID (meaning "any ID") */
+ tt_ptr_op(chan[0], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[0], &ed_zero));
+ tt_ptr_op(chan[1], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[1], &ed_zero));
+ tt_ptr_op(chan[3], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[3], &ed_zero));
+ ch = channel_find_by_remote_identity(rsa_id[2], &ed_zero);
+ tt_assert(ch == chan[2] || ch == chan[4] || ch == chan[5]);
+ ch = channel_next_with_rsa_identity(ch);
+ tt_assert(ch == chan[2] || ch == chan[4] || ch == chan[5]);
+ ch = channel_next_with_rsa_identity(ch);
+ tt_assert(ch == chan[2] || ch == chan[4] || ch == chan[5]);
+ ch = channel_next_with_rsa_identity(ch);
+ tt_assert(ch == NULL);
+
+ /* Lookup nonexistent RSA identity */
+ tt_ptr_op(NULL, OP_EQ,
+ channel_find_by_remote_identity("!!!!!!!!!!!!!!!!!!!!", NULL));
+
+ /* Look up by full identity pair */
+ tt_ptr_op(chan[0], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[0], ed_id[0]));
+ tt_ptr_op(chan[1], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[1], ed_id[1]));
+ tt_ptr_op(chan[3], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[3], ed_id[3] /*NULL*/));
+ tt_ptr_op(chan[4], OP_EQ,
+ channel_find_by_remote_identity(rsa_id[4], ed_id[4]));
+ ch = channel_find_by_remote_identity(rsa_id[2], ed_id[2]);
+ tt_assert(ch == chan[2] || ch == chan[5]);
+
+ /* Look up RSA identity with wrong ed25519 identity */
+ tt_ptr_op(NULL, OP_EQ,
+ channel_find_by_remote_identity(rsa_id[4], ed_id[0]));
+ tt_ptr_op(NULL, OP_EQ,
+ channel_find_by_remote_identity(rsa_id[2], ed_id[1]));
+ tt_ptr_op(NULL, OP_EQ,
+ channel_find_by_remote_identity(rsa_id[3], ed_id[1]));
+
+ done:
+ for (i = 0; i < N_CHAN; ++i) {
+ channel_clear_identity_digest(chan[i]);
+ channel_unregister(chan[i]);
+ free_fake_channel(chan[i]);
+ tor_free(ed_id[i]);
+ }
+#undef N_CHAN
+}
+
struct testcase_t channel_tests[] = {
{ "dumpstats", test_channel_dumpstats, TT_FORK, NULL, NULL },
{ "flush", test_channel_flush, TT_FORK, NULL, NULL },
@@ -1780,6 +1886,7 @@ struct testcase_t channel_tests[] = {
{ "queue_incoming", test_channel_queue_incoming, TT_FORK, NULL, NULL },
{ "queue_size", test_channel_queue_size, TT_FORK, NULL, NULL },
{ "write", test_channel_write, TT_FORK, NULL, NULL },
+ { "id_map", test_channel_id_map, TT_FORK, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_circuitlist.c b/src/test/test_circuitlist.c
index e996c42115..7eed5fe225 100644
--- a/src/test/test_circuitlist.c
+++ b/src/test/test_circuitlist.c
@@ -4,10 +4,12 @@
#define TOR_CHANNEL_INTERNAL_
#define CIRCUITBUILD_PRIVATE
#define CIRCUITLIST_PRIVATE
+#define HS_CIRCUITMAP_PRIVATE
#include "or.h"
#include "channel.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "hs_circuitmap.h"
#include "test.h"
#include "log_test_helpers.h"
@@ -185,6 +187,9 @@ test_rend_token_maps(void *arg)
(void)arg;
(void)tok1; //xxxx
+
+ hs_circuitmap_init();
+
c1 = or_circuit_new(0, NULL);
c2 = or_circuit_new(0, NULL);
c3 = or_circuit_new(0, NULL);
@@ -196,68 +201,68 @@ test_rend_token_maps(void *arg)
tt_int_op(tok3[REND_TOKEN_LEN-1], OP_EQ, '.');
/* No maps; nothing there. */
- tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1));
- tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok1));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_rend_circ(tok1));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok1));
- circuit_set_rendezvous_cookie(c1, tok1);
- circuit_set_intro_point_digest(c2, tok2);
+ hs_circuitmap_register_rend_circ(c1, tok1);
+ hs_circuitmap_register_intro_circ_v2(c2, tok2);
- tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok3));
- tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok3));
- tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok2));
- tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok1));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_rend_circ(tok3));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok3));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_rend_circ(tok2));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok1));
/* Without purpose set, we don't get the circuits */
- tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1));
- tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok2));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_rend_circ(tok1));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok2));
c1->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
c2->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
/* Okay, make sure they show up now. */
- tt_ptr_op(c1, OP_EQ, circuit_get_rendezvous(tok1));
- tt_ptr_op(c2, OP_EQ, circuit_get_intro_point(tok2));
+ tt_ptr_op(c1, OP_EQ, hs_circuitmap_get_rend_circ(tok1));
+ tt_ptr_op(c2, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok2));
/* Two items at the same place with the same token. */
c3->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
- circuit_set_rendezvous_cookie(c3, tok2);
- tt_ptr_op(c2, OP_EQ, circuit_get_intro_point(tok2));
- tt_ptr_op(c3, OP_EQ, circuit_get_rendezvous(tok2));
+ hs_circuitmap_register_rend_circ(c3, tok2);
+ tt_ptr_op(c2, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok2));
+ tt_ptr_op(c3, OP_EQ, hs_circuitmap_get_rend_circ(tok2));
/* Marking a circuit makes it not get returned any more */
circuit_mark_for_close(TO_CIRCUIT(c1), END_CIRC_REASON_FINISHED);
- tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_rend_circ(tok1));
circuit_free(TO_CIRCUIT(c1));
c1 = NULL;
/* Freeing a circuit makes it not get returned any more. */
circuit_free(TO_CIRCUIT(c2));
c2 = NULL;
- tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok2));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok2));
/* c3 -- are you still there? */
- tt_ptr_op(c3, OP_EQ, circuit_get_rendezvous(tok2));
+ tt_ptr_op(c3, OP_EQ, hs_circuitmap_get_rend_circ(tok2));
/* Change its cookie. This never happens in Tor per se, but hey. */
c3->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
- circuit_set_intro_point_digest(c3, tok3);
+ hs_circuitmap_register_intro_circ_v2(c3, tok3);
- tt_ptr_op(NULL, OP_EQ, circuit_get_rendezvous(tok2));
- tt_ptr_op(c3, OP_EQ, circuit_get_intro_point(tok3));
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_rend_circ(tok2));
+ tt_ptr_op(c3, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok3));
/* Now replace c3 with c4. */
c4->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
- circuit_set_intro_point_digest(c4, tok3);
+ hs_circuitmap_register_intro_circ_v2(c4, tok3);
- tt_ptr_op(c4, OP_EQ, circuit_get_intro_point(tok3));
+ tt_ptr_op(c4, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok3));
- tt_ptr_op(c3->rendinfo, OP_EQ, NULL);
- tt_ptr_op(c4->rendinfo, OP_NE, NULL);
- tt_mem_op(c4->rendinfo, OP_EQ, tok3, REND_TOKEN_LEN);
+ tt_ptr_op(c3->hs_token, OP_EQ, NULL);
+ tt_ptr_op(c4->hs_token, OP_NE, NULL);
+ tt_mem_op(c4->hs_token->token, OP_EQ, tok3, REND_TOKEN_LEN);
/* Now clear c4's cookie. */
- circuit_set_intro_point_digest(c4, NULL);
- tt_ptr_op(c4->rendinfo, OP_EQ, NULL);
- tt_ptr_op(NULL, OP_EQ, circuit_get_intro_point(tok3));
+ hs_circuitmap_remove_circuit(c4);
+ tt_ptr_op(c4->hs_token, OP_EQ, NULL);
+ tt_ptr_op(NULL, OP_EQ, hs_circuitmap_get_intro_circ_v2(tok3));
done:
if (c1)
diff --git a/src/test/test_circuituse.c b/src/test/test_circuituse.c
new file mode 100644
index 0000000000..27a87660ff
--- /dev/null
+++ b/src/test/test_circuituse.c
@@ -0,0 +1,304 @@
+/* Copyright (c) 2001-2004, Roger Dingledine.
+ * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
+ * Copyright (c) 2007-2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CIRCUITLIST_PRIVATE
+
+#include "or.h"
+#include "test.h"
+#include "test_helpers.h"
+#include "config.h"
+#include "circuitlist.h"
+#include "circuituse.h"
+#include "circuitbuild.h"
+#include "nodelist.h"
+
+static void
+test_circuit_is_available_for_use_ret_false_when_marked_for_close(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = tor_malloc(sizeof(circuit_t));
+ circ->marked_for_close = 1;
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ tor_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_ret_false_when_timestamp_dirty(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = tor_malloc(sizeof(circuit_t));
+ circ->timestamp_dirty = 1;
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ tor_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_ret_false_for_non_general_purpose(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = tor_malloc(sizeof(circuit_t));
+ circ->purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ tor_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_ret_false_for_non_general_origin(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = tor_malloc(sizeof(circuit_t));
+ circ->purpose = CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT;
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ tor_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_ret_false_for_non_origin_purpose(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = tor_malloc(sizeof(circuit_t));
+ circ->purpose = CIRCUIT_PURPOSE_OR;
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ tor_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_ret_false_unusable_for_new_conns(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = dummy_origin_circuit_new(30);
+ mark_circuit_unusable_for_new_conns(TO_ORIGIN_CIRCUIT(circ));
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ circuit_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_returns_false_for_onehop_tunnel(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = dummy_origin_circuit_new(30);
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ);
+ oc->build_state = tor_malloc_zero(sizeof(cpath_build_state_t));
+ oc->build_state->onehop_tunnel = 1;
+
+ tt_int_op(0, ==, circuit_is_available_for_use(circ));
+
+ done:
+ circuit_free(circ);
+}
+
+static void
+test_circuit_is_available_for_use_returns_true_for_clean_circuit(void *arg)
+{
+ (void)arg;
+
+ circuit_t *circ = dummy_origin_circuit_new(30);
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ);
+ oc->build_state = tor_malloc_zero(sizeof(cpath_build_state_t));
+ oc->build_state->onehop_tunnel = 0;
+
+ tt_int_op(1, ==, circuit_is_available_for_use(circ));
+
+ done:
+ circuit_free(circ);
+}
+
+static int
+mock_circuit_all_predicted_ports_handled(time_t now,
+ int *need_uptime,
+ int *need_capacity)
+{
+ (void)now;
+
+ if (need_uptime && need_capacity)
+ return 0;
+ return 1;
+}
+
+static consensus_path_type_t
+mock_router_have_unknown_consensus_path(void)
+{
+ return CONSENSUS_PATH_UNKNOWN;
+}
+
+static consensus_path_type_t
+mock_router_have_exit_consensus_path(void)
+{
+ return CONSENSUS_PATH_EXIT;
+}
+
+static void
+test_needs_exit_circuits_ret_false_for_predicted_ports_and_path(void *arg)
+{
+ (void)arg;
+
+ MOCK(circuit_all_predicted_ports_handled,
+ mock_circuit_all_predicted_ports_handled);
+ int needs_uptime = 1;
+ int needs_capacity = 0;
+
+ time_t now = time(NULL);
+ tt_int_op(0, ==, needs_exit_circuits(now, &needs_uptime, &needs_capacity));
+
+ done:
+ UNMOCK(circuit_all_predicted_ports_handled);
+}
+
+static void
+test_needs_exit_circuits_ret_false_for_non_exit_consensus_path(void *arg)
+{
+ (void)arg;
+
+ MOCK(circuit_all_predicted_ports_handled,
+ mock_circuit_all_predicted_ports_handled);
+ int needs_uptime = 1;
+ int needs_capacity = 1;
+ MOCK(router_have_consensus_path, mock_router_have_unknown_consensus_path);
+
+ time_t now = time(NULL);
+ tt_int_op(0, ==, needs_exit_circuits(now, &needs_uptime, &needs_capacity));
+
+ done:
+ UNMOCK(circuit_all_predicted_ports_handled);
+ UNMOCK(router_have_consensus_path);
+}
+
+static void
+test_needs_exit_circuits_ret_true_for_predicted_ports_and_path(void *arg)
+{
+ (void)arg;
+
+ MOCK(circuit_all_predicted_ports_handled,
+ mock_circuit_all_predicted_ports_handled);
+ int needs_uptime = 1;
+ int needs_capacity = 1;
+ MOCK(router_have_consensus_path, mock_router_have_exit_consensus_path);
+
+ time_t now = time(NULL);
+ tt_int_op(1, ==, needs_exit_circuits(now, &needs_uptime, &needs_capacity));
+
+ done:
+ UNMOCK(circuit_all_predicted_ports_handled);
+ UNMOCK(router_have_consensus_path);
+}
+
+static void
+test_needs_circuits_for_build_ret_false_consensus_path_unknown(void *arg)
+{
+ (void)arg;
+ MOCK(router_have_consensus_path, mock_router_have_unknown_consensus_path);
+ tt_int_op(0, ==, needs_circuits_for_build(0));
+ done: ;
+}
+
+static void
+test_needs_circuits_for_build_ret_false_if_num_less_than_max(void *arg)
+{
+ (void)arg;
+ MOCK(router_have_consensus_path, mock_router_have_exit_consensus_path);
+ tt_int_op(0, ==, needs_circuits_for_build(13));
+ done:
+ UNMOCK(router_have_consensus_path);
+}
+
+static void
+test_needs_circuits_for_build_returns_true_when_more_are_needed(void *arg)
+{
+ (void)arg;
+ MOCK(router_have_consensus_path, mock_router_have_exit_consensus_path);
+ tt_int_op(1, ==, needs_circuits_for_build(0));
+ done:
+ UNMOCK(router_have_consensus_path);
+}
+
+struct testcase_t circuituse_tests[] = {
+ { "marked",
+ test_circuit_is_available_for_use_ret_false_when_marked_for_close,
+ TT_FORK, NULL, NULL
+ },
+ { "timestamp",
+ test_circuit_is_available_for_use_ret_false_when_timestamp_dirty,
+ TT_FORK, NULL, NULL
+ },
+ { "non_general",
+ test_circuit_is_available_for_use_ret_false_for_non_general_purpose,
+ TT_FORK, NULL, NULL
+ },
+ { "non_general",
+ test_circuit_is_available_for_use_ret_false_for_non_general_origin,
+ TT_FORK, NULL, NULL
+ },
+ { "origin",
+ test_circuit_is_available_for_use_ret_false_for_non_origin_purpose,
+ TT_FORK, NULL, NULL
+ },
+ { "clean",
+ test_circuit_is_available_for_use_ret_false_unusable_for_new_conns,
+ TT_FORK, NULL, NULL
+ },
+ { "onehop",
+ test_circuit_is_available_for_use_returns_false_for_onehop_tunnel,
+ TT_FORK, NULL, NULL
+ },
+ { "clean_circ",
+ test_circuit_is_available_for_use_returns_true_for_clean_circuit,
+ TT_FORK, NULL, NULL
+ },
+ { "exit_f",
+ test_needs_exit_circuits_ret_false_for_predicted_ports_and_path,
+ TT_FORK, NULL, NULL
+ },
+ { "exit_t",
+ test_needs_exit_circuits_ret_true_for_predicted_ports_and_path,
+ TT_FORK, NULL, NULL
+ },
+ { "non_exit",
+ test_needs_exit_circuits_ret_false_for_non_exit_consensus_path,
+ TT_FORK, NULL, NULL
+ },
+ { "true",
+ test_needs_exit_circuits_ret_true_for_predicted_ports_and_path,
+ TT_FORK, NULL, NULL
+ },
+ { "consensus_path_unknown",
+ test_needs_circuits_for_build_ret_false_consensus_path_unknown,
+ TT_FORK, NULL, NULL
+ },
+ { "less_than_max",
+ test_needs_circuits_for_build_ret_false_if_num_less_than_max,
+ TT_FORK, NULL, NULL
+ },
+ { "more_needed",
+ test_needs_circuits_for_build_returns_true_when_more_are_needed,
+ TT_FORK, NULL, NULL
+ },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_config.c b/src/test/test_config.c
index cf047f0132..a540bcc138 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -4891,6 +4891,33 @@ test_config_parse_port_config__ports__server_options(void *data)
config_free_lines(config_port_valid); config_port_valid = NULL;
}
+static void
+test_config_parse_log_severity(void *data)
+{
+ int ret;
+ const char *severity_log_lines[] = {
+ "debug file /tmp/debug.log",
+ "debug\tfile /tmp/debug.log",
+ "[handshake]debug [~net,~mm]info notice stdout",
+ "[handshake]debug\t[~net,~mm]info\tnotice\tstdout",
+ NULL
+ };
+ int i;
+ log_severity_list_t *severity;
+
+ (void) data;
+
+ severity = tor_malloc(sizeof(log_severity_list_t));
+ for (i = 0; severity_log_lines[i]; i++) {
+ memset(severity, 0, sizeof(log_severity_list_t));
+ ret = parse_log_severity_config(&severity_log_lines[i], severity);
+ tt_int_op(ret, OP_EQ, 0);
+ }
+
+ done:
+ tor_free(severity);
+}
+
#define CONFIG_TEST(name, flags) \
{ #name, test_config_ ## name, flags, NULL, NULL }
@@ -4917,6 +4944,7 @@ struct testcase_t config_tests[] = {
CONFIG_TEST(parse_port_config__ports__no_ports_given, 0),
CONFIG_TEST(parse_port_config__ports__server_options, 0),
CONFIG_TEST(parse_port_config__ports__ports_given, 0),
+ CONFIG_TEST(parse_log_severity, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 64a46f7914..d66ddccd4f 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -1135,6 +1135,54 @@ test_crypto_sha3_xof(void *arg)
tor_free(mem_op_hex_tmp);
}
+/* Test our MAC-SHA3 function. There are not actually any MAC-SHA3 test
+ * vectors out there for our H(len(k) || k || m) construction. Hence what we
+ * are gonna do is test our crypto_mac_sha3_256() function against manually
+ * doing H(len(k) || k||m). If in the future the Keccak group decides to
+ * standarize an MAC construction and make test vectors, we should
+ * incorporate them here. */
+static void
+test_crypto_mac_sha3(void *arg)
+{
+ const char msg[] = "i am in a library somewhere using my computer";
+ const char key[] = "i'm from the past talking to the future.";
+
+ uint8_t hmac_test[DIGEST256_LEN];
+ char hmac_manual[DIGEST256_LEN];
+
+ (void) arg;
+
+ /* First let's use our nice HMAC-SHA3 function */
+ crypto_mac_sha3_256(hmac_test, sizeof(hmac_test),
+ (uint8_t *) key, strlen(key),
+ (uint8_t *) msg, strlen(msg));
+
+ /* Now let's try a manual H(len(k) || k || m) construction */
+ {
+ char *key_msg_concat = NULL, *all = NULL;
+ int result;
+ const uint64_t key_len_netorder = tor_htonll(strlen(key));
+ size_t all_len;
+
+ tor_asprintf(&key_msg_concat, "%s%s", key, msg);
+ all_len = sizeof(key_len_netorder) + strlen(key_msg_concat);
+ all = tor_malloc_zero(all_len);
+ memcpy(all, &key_len_netorder, sizeof(key_len_netorder));
+ memcpy(all + sizeof(key_len_netorder), key_msg_concat,
+ strlen(key_msg_concat));
+
+ result = crypto_digest256(hmac_manual, all, all_len, DIGEST_SHA3_256);
+ tor_free(key_msg_concat);
+ tor_free(all);
+ tt_int_op(result, ==, 0);
+ }
+
+ /* Now compare the two results */
+ tt_mem_op(hmac_test, OP_EQ, hmac_manual, DIGEST256_LEN);
+
+ done: ;
+}
+
/** Run unit tests for our public key crypto functions */
static void
test_crypto_pk(void *arg)
@@ -2918,6 +2966,7 @@ struct testcase_t crypto_tests[] = {
{ "digest_names", test_crypto_digest_names, 0, NULL, NULL },
{ "sha3", test_crypto_sha3, TT_FORK, NULL, NULL},
{ "sha3_xof", test_crypto_sha3_xof, TT_FORK, NULL, NULL},
+ { "mac_sha3", test_crypto_mac_sha3, TT_FORK, NULL, NULL},
CRYPTO_LEGACY(dh),
{ "aes_iv_AES", test_crypto_aes_iv, TT_FORK, &passthrough_setup,
(void*)"aes" },
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 4ef421f8e3..d04bdf37c8 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -3511,10 +3511,15 @@ test_dir_purpose_needs_anonymity_returns_true_by_default(void *arg)
(void)arg;
tor_capture_bugs_(1);
+ setup_full_capture_of_logs(LOG_WARN);
tt_int_op(1, ==, purpose_needs_anonymity(0, 0, NULL));
tt_int_op(1, ==, smartlist_len(tor_get_captured_bug_log_()));
+ expect_single_log_msg_containing("Called with dir_purpose=0");
+
tor_end_capture_bugs_();
- done: ;
+ done:
+ tor_end_capture_bugs_();
+ teardown_capture_of_logs();
}
static void
diff --git a/src/test/test_dir_handle_get.c b/src/test/test_dir_handle_get.c
index c215feee26..a0868f9253 100644
--- a/src/test/test_dir_handle_get.c
+++ b/src/test/test_dir_handle_get.c
@@ -30,6 +30,7 @@
#include "dirserv.h"
#include "torgzip.h"
#include "dirvote.h"
+#include "log_test_helpers.h"
#ifdef _WIN32
/* For mkdir() */
@@ -53,6 +54,7 @@ ENABLE_GCC_WARNING(overlength-strings)
#define NOT_FOUND "HTTP/1.0 404 Not found\r\n\r\n"
#define BAD_REQUEST "HTTP/1.0 400 Bad request\r\n\r\n"
#define SERVER_BUSY "HTTP/1.0 503 Directory busy, try again later\r\n\r\n"
+#define TOO_OLD "HTTP/1.0 404 Consensus is too old\r\n\r\n"
#define NOT_ENOUGH_CONSENSUS_SIGNATURES "HTTP/1.0 404 " \
"Consensus not signed by sufficient number of requested authorities\r\n\r\n"
@@ -1617,6 +1619,7 @@ test_dir_handle_get_status_vote_current_consensus_ns_not_enough_sigs(void* d)
mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t));
mock_ns_val->flavor = FLAV_NS;
mock_ns_val->voters = smartlist_new();
+ mock_ns_val->valid_until = time(NULL);
/* init mock */
init_mock_options();
@@ -1696,6 +1699,62 @@ test_dir_handle_get_status_vote_current_consensus_ns_not_found(void* data)
or_options_free(mock_options); mock_options = NULL;
}
+static void
+test_dir_handle_get_status_vote_current_consensus_too_old(void *data)
+{
+ dir_connection_t *conn = NULL;
+ char *header = NULL;
+ (void)data;
+
+ mock_ns_val = tor_malloc_zero(sizeof(networkstatus_t));
+ mock_ns_val->flavor = FLAV_MICRODESC;
+ mock_ns_val->valid_until = time(NULL) - (60 * 60 * 24) - 1;
+
+ init_mock_options();
+ MOCK(get_options, mock_get_options);
+ MOCK(connection_write_to_buf_impl_, connection_write_to_buf_mock);
+ MOCK(networkstatus_get_latest_consensus_by_flavor, mock_ns_get_by_flavor);
+
+ conn = new_dir_conn();
+
+ setup_capture_of_logs(LOG_WARN);
+
+ tt_int_op(0, OP_EQ, directory_handle_command_get(conn,
+ GET("/tor/status-vote/current/consensus-microdesc"), NULL, 0));
+
+ fetch_from_buf_http(TO_CONN(conn)->outbuf, &header, MAX_HEADERS_SIZE,
+ NULL, NULL, 1, 0);
+ tt_assert(header);
+ tt_str_op(TOO_OLD, OP_EQ, header);
+
+ expect_log_msg_containing("too old");
+
+ tor_free(header);
+ teardown_capture_of_logs();
+
+ setup_capture_of_logs(LOG_WARN);
+
+ tt_int_op(0, OP_EQ, directory_handle_command_get(conn,
+ GET("/tor/status-vote/current/consensus"), NULL, 0));
+
+ fetch_from_buf_http(TO_CONN(conn)->outbuf, &header, MAX_HEADERS_SIZE,
+ NULL, NULL, 1, 0);
+ tt_assert(header);
+ tt_str_op(TOO_OLD, OP_EQ, header);
+
+ expect_no_log_entry();
+
+ done:
+ teardown_capture_of_logs();
+ UNMOCK(networkstatus_get_latest_consensus_by_flavor);
+ UNMOCK(connection_write_to_buf_impl_);
+ UNMOCK(get_options);
+ connection_free_(TO_CONN(conn));
+ tor_free(header);
+ tor_free(mock_ns_val);
+ or_options_free(mock_options); mock_options = NULL;
+}
+
NS_DECL(int, geoip_get_country_by_addr, (const tor_addr_t *addr));
int
@@ -2481,6 +2540,7 @@ struct testcase_t dir_handle_get_tests[] = {
DIR_HANDLE_CMD(status_vote_next_authority, 0),
DIR_HANDLE_CMD(status_vote_current_consensus_ns_not_enough_sigs, 0),
DIR_HANDLE_CMD(status_vote_current_consensus_ns_not_found, 0),
+ DIR_HANDLE_CMD(status_vote_current_consensus_too_old, 0),
DIR_HANDLE_CMD(status_vote_current_consensus_ns_busy, 0),
DIR_HANDLE_CMD(status_vote_current_consensus_ns, 0),
DIR_HANDLE_CMD(status_vote_current_d_not_found, 0),
diff --git a/src/test/test_helpers.c b/src/test/test_helpers.c
index 130ec43a3a..132af39776 100644
--- a/src/test/test_helpers.c
+++ b/src/test/test_helpers.c
@@ -10,6 +10,7 @@
#include "orconfig.h"
#include "or.h"
+#include "relay.h"
#include "routerlist.h"
#include "nodelist.h"
#include "buffers.h"
@@ -23,6 +24,8 @@ DISABLE_GCC_WARNING(overlength-strings)
* at large. */
#endif
#include "test_descriptors.inc"
+#include "or.h"
+#include "circuitlist.h"
#ifdef HAVE_CFLAG_WOVERLENGTH_STRINGS
ENABLE_GCC_WARNING(overlength-strings)
#endif
@@ -105,3 +108,23 @@ connection_write_to_buf_mock(const char *string, size_t len,
write_to_buf(string, len, conn->outbuf);
}
+/* Set up a fake origin circuit with the specified number of cells,
+ * Return a pointer to the newly-created dummy circuit */
+circuit_t *
+dummy_origin_circuit_new(int n_cells)
+{
+ origin_circuit_t *circ = origin_circuit_new();
+ int i;
+ cell_t cell;
+
+ for (i=0; i < n_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ),
+ &TO_CIRCUIT(circ)->n_chan_cells,
+ 1, &cell, 1, 0);
+ }
+
+ TO_CIRCUIT(circ)->purpose = CIRCUIT_PURPOSE_C_GENERAL;
+ return TO_CIRCUIT(circ);
+}
+
diff --git a/src/test/test_helpers.h b/src/test/test_helpers.h
index b77a459256..ba93b100d5 100644
--- a/src/test/test_helpers.h
+++ b/src/test/test_helpers.h
@@ -6,6 +6,8 @@
const char *get_yesterday_date_str(void);
+circuit_t * dummy_origin_circuit_new(int num_cells);
+
/* Number of descriptors contained in test_descriptors.txt. */
#define HELPER_NUMBER_OF_DESCRIPTORS 8
diff --git a/src/test/test_hs.c b/src/test/test_hs.c
index 318c549762..ac9788ceea 100644
--- a/src/test/test_hs.c
+++ b/src/test/test_hs.c
@@ -550,17 +550,18 @@ test_single_onion_poisoning(void *arg)
rend_service_t *service_2 = tor_malloc_zero(sizeof(rend_service_t));
char *dir2 = tor_strdup(get_fname_rnd("test_hs_dir2"));
smartlist_t *services = smartlist_new();
+ char *poison_path = NULL;
- /* No services, no problem! */
+ /* No services, no service to verify, no problem! */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_config_services(mock_options, 1);
tt_assert(ret == 0);
/* Either way, no problem. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_config_services(mock_options, 1);
tt_assert(ret == 0);
/* Create the data directory, and, if the correct bit in arg is set,
@@ -580,42 +581,86 @@ test_single_onion_poisoning(void *arg)
service_1->directory = dir1;
service_2->directory = dir2;
+ /* The services own the directory pointers now */
dir1 = dir2 = NULL;
- smartlist_add(services, service_1);
+ /* Add port to service 1 */
+ service_1->ports = smartlist_new();
+ service_2->ports = smartlist_new();
+ char *err_msg = NULL;
+ rend_service_port_config_t *port1 = rend_service_parse_port_config("80", " ",
+ &err_msg);
+ tt_assert(port1);
+ tt_assert(!err_msg);
+ smartlist_add(service_1->ports, port1);
+
+ rend_service_port_config_t *port2 = rend_service_parse_port_config("90", " ",
+ &err_msg);
+ /* Add port to service 2 */
+ tt_assert(port2);
+ tt_assert(!err_msg);
+ smartlist_add(service_2->ports, port2);
+
+ /* No services, a service to verify, no problem! */
+ mock_options->HiddenServiceSingleHopMode = 0;
+ mock_options->HiddenServiceNonAnonymousMode = 0;
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
+
+ /* Either way, no problem. */
+ mock_options->HiddenServiceSingleHopMode = 1;
+ mock_options->HiddenServiceNonAnonymousMode = 1;
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
+
+ /* Add the first service */
+ ret = rend_service_check_dir_and_add(services, mock_options, service_1, 0);
+ tt_assert(ret == 0);
/* But don't add the second service yet. */
/* Service directories, but no previous keys, no problem! */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Either way, no problem. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Poison! Poison! Poison!
* This can only be done in HiddenServiceSingleHopMode. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_poison_new_single_onion_dirs(services);
+ ret = rend_service_poison_new_single_onion_dir(service_1, mock_options);
tt_assert(ret == 0);
/* Poisoning twice is a no-op. */
- ret = rend_service_poison_new_single_onion_dirs(services);
+ ret = rend_service_poison_new_single_onion_dir(service_1, mock_options);
tt_assert(ret == 0);
/* Poisoned service directories, but no previous keys, no problem! */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Either way, no problem. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Now add some keys, and we'll have a problem. */
@@ -625,95 +670,121 @@ test_single_onion_poisoning(void *arg)
/* Poisoned service directories with previous keys are not allowed. */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
tt_assert(ret < 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
/* But they are allowed if we're in non-anonymous mode. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Re-poisoning directories with existing keys is a no-op, because
* directories with existing keys are ignored. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_poison_new_single_onion_dirs(services);
+ ret = rend_service_poison_new_single_onion_dir(service_1, mock_options);
tt_assert(ret == 0);
/* And it keeps the poison. */
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Now add the second service: it has no key and no poison file */
- smartlist_add(services, service_2);
+ ret = rend_service_check_dir_and_add(services, mock_options, service_2, 0);
+ tt_assert(ret == 0);
/* A new service, and an existing poisoned service. Not ok. */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
tt_assert(ret < 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
/* But ok to add in non-anonymous mode. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Now remove the poisoning from the first service, and we have the opposite
* problem. */
- char *poison_path = rend_service_sos_poison_path(service_1);
+ poison_path = rend_service_sos_poison_path(service_1);
+ tt_assert(poison_path);
ret = unlink(poison_path);
- tor_free(poison_path);
tt_assert(ret == 0);
/* Unpoisoned service directories with previous keys are ok, as are empty
* directories. */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* But the existing unpoisoned key is not ok in non-anonymous mode, even if
* there is an empty service. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
tt_assert(ret < 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
/* Poisoning directories with existing keys is a no-op, because directories
* with existing keys are ignored. But the new directory should poison. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_poison_new_single_onion_dirs(services);
+ ret = rend_service_poison_new_single_onion_dir(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_poison_new_single_onion_dir(service_2, mock_options);
tt_assert(ret == 0);
/* And the old directory remains unpoisoned. */
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
tt_assert(ret < 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
/* And the new directory should be ignored, because it has no key. */
mock_options->HiddenServiceSingleHopMode = 0;
mock_options->HiddenServiceNonAnonymousMode = 0;
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
tt_assert(ret == 0);
/* Re-poisoning directories without existing keys is a no-op. */
mock_options->HiddenServiceSingleHopMode = 1;
mock_options->HiddenServiceNonAnonymousMode = 1;
- ret = rend_service_poison_new_single_onion_dirs(services);
+ ret = rend_service_poison_new_single_onion_dir(service_1, mock_options);
+ tt_assert(ret == 0);
+ ret = rend_service_poison_new_single_onion_dir(service_2, mock_options);
tt_assert(ret == 0);
/* And the old directory remains unpoisoned. */
- ret = rend_service_list_verify_single_onion_poison(services, mock_options);
+ ret = rend_service_verify_single_onion_poison(service_1, mock_options);
tt_assert(ret < 0);
+ ret = rend_service_verify_single_onion_poison(service_2, mock_options);
+ tt_assert(ret == 0);
done:
/* The test harness deletes the directories at exit */
+ tor_free(poison_path);
+ tor_free(dir1);
+ tor_free(dir2);
+ smartlist_free(services);
rend_service_free(service_1);
rend_service_free(service_2);
- smartlist_free(services);
UNMOCK(get_options);
tor_free(mock_options->DataDirectory);
- tor_free(dir1);
- tor_free(dir2);
}
struct testcase_t hs_tests[] = {
diff --git a/src/test/test_hs_descriptor.c b/src/test/test_hs_descriptor.c
index 8af5cabca3..3f588dfcaf 100644
--- a/src/test/test_hs_descriptor.c
+++ b/src/test/test_hs_descriptor.c
@@ -130,6 +130,7 @@ static void
helper_compare_hs_desc(const hs_descriptor_t *desc1,
const hs_descriptor_t *desc2)
{
+ char *addr1 = NULL, *addr2 = NULL;
/* Plaintext data section. */
tt_int_op(desc1->plaintext_data.version, OP_EQ,
desc2->plaintext_data.version);
@@ -204,8 +205,8 @@ helper_compare_hs_desc(const hs_descriptor_t *desc1,
case LS_IPV4:
case LS_IPV6:
{
- char *addr1 = tor_addr_to_str_dup(&ls1->u.ap.addr),
- *addr2 = tor_addr_to_str_dup(&ls2->u.ap.addr);
+ addr1 = tor_addr_to_str_dup(&ls1->u.ap.addr);
+ addr2 = tor_addr_to_str_dup(&ls2->u.ap.addr);
tt_str_op(addr1, OP_EQ, addr2);
tor_free(addr1);
tor_free(addr2);
@@ -225,7 +226,8 @@ helper_compare_hs_desc(const hs_descriptor_t *desc1,
}
done:
- ;
+ tor_free(addr1);
+ tor_free(addr2);
}
/* Test certificate encoding put in a descriptor. */
@@ -254,7 +256,7 @@ test_cert_encoding(void *arg)
tt_assert(cert);
/* Test the certificate encoding function. */
- ret = encode_cert(cert, &encoded);
+ ret = tor_cert_encode_ed22519(cert, &encoded);
tt_int_op(ret, ==, 0);
/* Validated the certificate string. */
diff --git a/src/test/test_hs_intropoint.c b/src/test/test_hs_intropoint.c
new file mode 100644
index 0000000000..608988ba9a
--- /dev/null
+++ b/src/test/test_hs_intropoint.c
@@ -0,0 +1,361 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_hs_service.c
+ * \brief Test hidden service functionality.
+ */
+
+#define HS_SERVICE_PRIVATE
+#define HS_INTROPOINT_PRIVATE
+#define RENDSERVICE_PRIVATE
+#define CIRCUITLIST_PRIVATE
+
+#include "test.h"
+#include "crypto.h"
+
+#include "or.h"
+#include "ht.h"
+
+#include "hs/cell_establish_intro.h"
+#include "hs_service.h"
+#include "hs_circuitmap.h"
+#include "hs_intropoint.h"
+
+#include "circuitlist.h"
+#include "circuituse.h"
+#include "rendservice.h"
+
+/* Mock function to avoid networking in unittests */
+static int
+mock_send_intro_established_cell(or_circuit_t *circ)
+{
+ (void) circ;
+ return 0;
+}
+
+/* Try sending an ESTABLISH_INTRO cell on a circuit that is already an intro
+ * point. Should fail. */
+static void
+test_establish_intro_wrong_purpose(void *arg)
+{
+ int retval;
+ hs_cell_establish_intro_t *establish_intro_cell = NULL;
+ or_circuit_t *intro_circ = or_circuit_new(0,NULL);;
+ uint8_t cell_body[RELAY_PAYLOAD_SIZE];
+ ssize_t cell_len = 0;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ (void)arg;
+
+ /* Get the auth key of the intro point */
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+ memcpy(intro_circ->rend_circ_nonce, circuit_key_material, DIGEST_LEN);
+
+ /* Set a bad circuit purpose!! :) */
+ circuit_change_purpose(TO_CIRCUIT(intro_circ), CIRCUIT_PURPOSE_INTRO_POINT);
+
+ /* Create outgoing ESTABLISH_INTRO cell and extract its payload so that we
+ attempt to parse it. */
+ establish_intro_cell = generate_establish_intro_cell(circuit_key_material,
+ sizeof(circuit_key_material));
+ tt_assert(establish_intro_cell);
+ cell_len = get_establish_intro_payload(cell_body, sizeof(cell_body),
+ establish_intro_cell);
+ tt_int_op(cell_len, >, 0);
+
+ /* Receive the cell */
+ retval = hs_intro_received_establish_intro(intro_circ, cell_body, cell_len);
+ tt_int_op(retval, ==, -1);
+
+ done:
+ hs_cell_establish_intro_free(establish_intro_cell);
+ circuit_free(TO_CIRCUIT(intro_circ));
+}
+
+/* Prepare a circuit for accepting an ESTABLISH_INTRO cell */
+static void
+helper_prepare_circ_for_intro(or_circuit_t *circ,
+ uint8_t *circuit_key_material)
+{
+ /* Prepare the circuit for the incoming ESTABLISH_INTRO */
+ circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_OR);
+ memcpy(circ->rend_circ_nonce, circuit_key_material, DIGEST_LEN);
+}
+
+/* Send an empty ESTABLISH_INTRO cell. Should fail. */
+static void
+test_establish_intro_wrong_keytype(void *arg)
+{
+ int retval;
+ or_circuit_t *intro_circ = or_circuit_new(0,NULL);;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ (void)arg;
+
+ /* Get the auth key of the intro point */
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+ helper_prepare_circ_for_intro(intro_circ, circuit_key_material);
+
+ /* Receive the cell. Should fail. */
+ retval = hs_intro_received_establish_intro(intro_circ, (uint8_t*)"", 0);
+ tt_int_op(retval, ==, -1);
+
+ done:
+ circuit_free(TO_CIRCUIT(intro_circ));
+}
+
+/* Send an ESTABLISH_INTRO cell with an unknown auth key type. Should fail. */
+static void
+test_establish_intro_wrong_keytype2(void *arg)
+{
+ int retval;
+ hs_cell_establish_intro_t *establish_intro_cell = NULL;
+ or_circuit_t *intro_circ = or_circuit_new(0,NULL);;
+ uint8_t cell_body[RELAY_PAYLOAD_SIZE];
+ ssize_t cell_len = 0;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ (void)arg;
+
+ /* Get the auth key of the intro point */
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+ helper_prepare_circ_for_intro(intro_circ, circuit_key_material);
+
+ /* Create outgoing ESTABLISH_INTRO cell and extract its payload so that we
+ attempt to parse it. */
+ establish_intro_cell = generate_establish_intro_cell(circuit_key_material,
+ sizeof(circuit_key_material));
+ tt_assert(establish_intro_cell);
+ cell_len = get_establish_intro_payload(cell_body, sizeof(cell_body),
+ establish_intro_cell);
+ tt_int_op(cell_len, >, 0);
+
+ /* Mutate the auth key type! :) */
+ cell_body[0] = 42;
+
+ /* Receive the cell. Should fail. */
+ retval = hs_intro_received_establish_intro(intro_circ, cell_body, cell_len);
+ tt_int_op(retval, ==, -1);
+
+ done:
+ hs_cell_establish_intro_free(establish_intro_cell);
+ circuit_free(TO_CIRCUIT(intro_circ));
+}
+
+/* Send a legit ESTABLISH_INTRO cell but slightly change the signature. Should
+ * fail. */
+static void
+test_establish_intro_wrong_sig(void *arg)
+{
+ int retval;
+ hs_cell_establish_intro_t *establish_intro_cell = NULL;
+ or_circuit_t *intro_circ = or_circuit_new(0,NULL);;
+ uint8_t cell_body[RELAY_PAYLOAD_SIZE];
+ ssize_t cell_len = 0;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ (void)arg;
+
+ /* Get the auth key of the intro point */
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+ helper_prepare_circ_for_intro(intro_circ, circuit_key_material);
+
+ /* Create outgoing ESTABLISH_INTRO cell and extract its payload so that we
+ attempt to parse it. */
+ establish_intro_cell = generate_establish_intro_cell(circuit_key_material,
+ sizeof(circuit_key_material));
+ tt_assert(establish_intro_cell);
+ cell_len = get_establish_intro_payload(cell_body, sizeof(cell_body),
+ establish_intro_cell);
+ tt_int_op(cell_len, >, 0);
+
+ /* Mutate the last byte (signature)! :) */
+ cell_body[cell_len-1]++;
+
+ /* Receive the cell. Should fail. */
+ retval = hs_intro_received_establish_intro(intro_circ, cell_body, cell_len);
+ tt_int_op(retval, ==, -1);
+
+ done:
+ hs_cell_establish_intro_free(establish_intro_cell);
+ circuit_free(TO_CIRCUIT(intro_circ));
+}
+
+/* Helper function: Send a well-formed v3 ESTABLISH_INTRO cell to
+ * <b>intro_circ</b>. Return the cell. */
+static hs_cell_establish_intro_t *
+helper_establish_intro_v3(or_circuit_t *intro_circ)
+{
+ int retval;
+ hs_cell_establish_intro_t *establish_intro_cell = NULL;
+ uint8_t cell_body[RELAY_PAYLOAD_SIZE];
+ ssize_t cell_len = 0;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ tt_assert(intro_circ);
+
+ /* Prepare the circuit for the incoming ESTABLISH_INTRO */
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+ helper_prepare_circ_for_intro(intro_circ, circuit_key_material);
+
+ /* Create outgoing ESTABLISH_INTRO cell and extract its payload so that we
+ attempt to parse it. */
+ establish_intro_cell = generate_establish_intro_cell(circuit_key_material,
+ sizeof(circuit_key_material));
+ tt_assert(establish_intro_cell);
+ cell_len = get_establish_intro_payload(cell_body, sizeof(cell_body),
+ establish_intro_cell);
+ tt_int_op(cell_len, >, 0);
+
+ /* Receive the cell */
+ retval = hs_intro_received_establish_intro(intro_circ, cell_body, cell_len);
+ tt_int_op(retval, ==, 0);
+
+ done:
+ return establish_intro_cell;
+}
+
+/* Helper function: Send a well-formed v2 ESTABLISH_INTRO cell to
+ * <b>intro_circ</b>. Return the public key advertised in the cell. */
+static crypto_pk_t *
+helper_establish_intro_v2(or_circuit_t *intro_circ)
+{
+ crypto_pk_t *key1 = NULL;
+ int retval;
+ uint8_t cell_body[RELAY_PAYLOAD_SIZE];
+ ssize_t cell_len = 0;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ tt_assert(intro_circ);
+
+ /* Prepare the circuit for the incoming ESTABLISH_INTRO */
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+ helper_prepare_circ_for_intro(intro_circ, circuit_key_material);
+
+ /* Send legacy establish_intro */
+ key1 = pk_generate(0);
+
+ /* Use old circuit_key_material why not */
+ cell_len = encode_establish_intro_cell_legacy((char*)cell_body,
+ key1,
+ (char *) circuit_key_material);
+ tt_int_op(cell_len, >, 0);
+
+ /* Receive legacy establish_intro */
+ retval = hs_intro_received_establish_intro(intro_circ,
+ cell_body, cell_len);
+ tt_int_op(retval, ==, 0);
+
+ done:
+ return key1;
+}
+
+/** Successfuly register a v2 intro point and a v3 intro point. Ensure that HS
+ * circuitmap is maintained properly. */
+static void
+test_intro_point_registration(void *arg)
+{
+ int retval;
+ hs_circuitmap_ht *the_hs_circuitmap = NULL;
+
+ or_circuit_t *intro_circ = NULL;
+ hs_cell_establish_intro_t *establish_intro_cell = NULL;
+ ed25519_public_key_t auth_key;
+
+ crypto_pk_t *legacy_auth_key = NULL;
+ or_circuit_t *legacy_intro_circ = NULL;
+
+ or_circuit_t *returned_intro_circ = NULL;
+
+ (void) arg;
+
+ MOCK(hs_intro_send_intro_established_cell, mock_send_intro_established_cell);
+
+ hs_circuitmap_init();
+
+ /* Check that the circuitmap is currently empty */
+ {
+ the_hs_circuitmap = get_hs_circuitmap();
+ tt_assert(the_hs_circuitmap);
+ tt_int_op(0, ==, HT_SIZE(the_hs_circuitmap));
+ /* Do a circuitmap query in any case */
+ returned_intro_circ = hs_circuitmap_get_intro_circ_v3(&auth_key);
+ tt_ptr_op(returned_intro_circ, ==, NULL);
+ }
+
+ /* Create a v3 intro point */
+ {
+ intro_circ = or_circuit_new(0, NULL);
+ tt_assert(intro_circ);
+ establish_intro_cell = helper_establish_intro_v3(intro_circ);
+
+ /* Check that the intro point was registered on the HS circuitmap */
+ the_hs_circuitmap = get_hs_circuitmap();
+ tt_assert(the_hs_circuitmap);
+ tt_int_op(1, ==, HT_SIZE(the_hs_circuitmap));
+ get_auth_key_from_establish_intro_cell(&auth_key, establish_intro_cell);
+ returned_intro_circ = hs_circuitmap_get_intro_circ_v3(&auth_key);
+ tt_ptr_op(intro_circ, ==, returned_intro_circ);
+ }
+
+ /* Create a v2 intro point */
+ {
+ char key_digest[DIGEST_LEN];
+
+ legacy_intro_circ = or_circuit_new(1, NULL);
+ tt_assert(legacy_intro_circ);
+ legacy_auth_key = helper_establish_intro_v2(legacy_intro_circ);
+ tt_assert(legacy_auth_key);
+
+ /* Check that the circuitmap now has two elements */
+ the_hs_circuitmap = get_hs_circuitmap();
+ tt_assert(the_hs_circuitmap);
+ tt_int_op(2, ==, HT_SIZE(the_hs_circuitmap));
+
+ /* Check that the new element is our legacy intro circuit. */
+ retval = crypto_pk_get_digest(legacy_auth_key, key_digest);
+ tt_int_op(retval, ==, 0);
+ returned_intro_circ= hs_circuitmap_get_intro_circ_v2((uint8_t*)key_digest);
+ tt_ptr_op(legacy_intro_circ, ==, returned_intro_circ);
+ }
+
+ /* XXX Continue test and try to register a second v3 intro point with the
+ * same auth key. Make sure that old intro circuit gets closed. */
+
+ done:
+ crypto_pk_free(legacy_auth_key);
+ circuit_free(TO_CIRCUIT(intro_circ));
+ circuit_free(TO_CIRCUIT(legacy_intro_circ));
+ hs_cell_establish_intro_free(establish_intro_cell);
+
+ { /* Test circuitmap free_all function. */
+ the_hs_circuitmap = get_hs_circuitmap();
+ tt_assert(the_hs_circuitmap);
+ hs_circuitmap_free_all();
+ the_hs_circuitmap = get_hs_circuitmap();
+ tt_assert(!the_hs_circuitmap);
+ }
+
+ UNMOCK(hs_intro_send_intro_established_cell);
+}
+
+struct testcase_t hs_intropoint_tests[] = {
+ { "intro_point_registration",
+ test_intro_point_registration, TT_FORK, NULL, NULL },
+
+ { "receive_establish_intro_wrong_keytype",
+ test_establish_intro_wrong_keytype, TT_FORK, NULL, NULL },
+
+ { "receive_establish_intro_wrong_keytype2",
+ test_establish_intro_wrong_keytype2, TT_FORK, NULL, NULL },
+
+ { "receive_establish_intro_wrong_purpose",
+ test_establish_intro_wrong_purpose, TT_FORK, NULL, NULL },
+
+ { "receive_establish_intro_wrong_sig",
+ test_establish_intro_wrong_sig, TT_FORK, NULL, NULL },
+
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_hs_service.c b/src/test/test_hs_service.c
new file mode 100644
index 0000000000..039d727cea
--- /dev/null
+++ b/src/test/test_hs_service.c
@@ -0,0 +1,111 @@
+/* Copyright (c) 2016, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_hs_service.c
+ * \brief Test hidden service functionality.
+ */
+
+#define HS_SERVICE_PRIVATE
+#define HS_INTROPOINT_PRIVATE
+
+#include "test.h"
+#include "log_test_helpers.h"
+#include "crypto.h"
+
+#include "hs/cell_establish_intro.h"
+#include "hs_service.h"
+#include "hs_intropoint.h"
+
+/** We simulate the creation of an outgoing ESTABLISH_INTRO cell, and then we
+ * parse it from the receiver side. */
+static void
+test_gen_establish_intro_cell(void *arg)
+{
+ (void) arg;
+ ssize_t retval;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+ uint8_t buf[RELAY_PAYLOAD_SIZE];
+ hs_cell_establish_intro_t *cell_out = NULL;
+ hs_cell_establish_intro_t *cell_in = NULL;
+
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+
+ /* Create outgoing ESTABLISH_INTRO cell and extract its payload so that we
+ attempt to parse it. */
+ {
+ cell_out = generate_establish_intro_cell(circuit_key_material,
+ sizeof(circuit_key_material));
+ tt_assert(cell_out);
+
+ retval = get_establish_intro_payload(buf, sizeof(buf), cell_out);
+ tt_int_op(retval, >=, 0);
+ }
+
+ /* Parse it as the receiver */
+ {
+ ssize_t parse_result = hs_cell_establish_intro_parse(&cell_in,
+ buf, sizeof(buf));
+ tt_int_op(parse_result, >=, 0);
+
+ retval = verify_establish_intro_cell(cell_in,
+ circuit_key_material,
+ sizeof(circuit_key_material));
+ tt_int_op(retval, >=, 0);
+ }
+
+ done:
+ hs_cell_establish_intro_free(cell_out);
+ hs_cell_establish_intro_free(cell_in);
+}
+
+/* Mocked ed25519_sign_prefixed() function that always fails :) */
+static int
+mock_ed25519_sign_prefixed(ed25519_signature_t *signature_out,
+ const uint8_t *msg, size_t msg_len,
+ const char *prefix_str,
+ const ed25519_keypair_t *keypair) {
+ (void) signature_out;
+ (void) msg;
+ (void) msg_len;
+ (void) prefix_str;
+ (void) keypair;
+ return -1;
+}
+
+/** We simulate a failure to create an ESTABLISH_INTRO cell */
+static void
+test_gen_establish_intro_cell_bad(void *arg)
+{
+ (void) arg;
+ hs_cell_establish_intro_t *cell = NULL;
+ uint8_t circuit_key_material[DIGEST_LEN] = {0};
+
+ MOCK(ed25519_sign_prefixed, mock_ed25519_sign_prefixed);
+
+ crypto_rand((char *) circuit_key_material, sizeof(circuit_key_material));
+
+ setup_full_capture_of_logs(LOG_WARN);
+ /* Easiest way to make that function fail is to mock the
+ ed25519_sign_prefixed() function and make it fail. */
+ cell = generate_establish_intro_cell(circuit_key_material,
+ sizeof(circuit_key_material));
+ expect_log_msg_containing("Unable to gen signature for "
+ "ESTABLISH_INTRO cell.");
+ teardown_capture_of_logs();
+ tt_assert(!cell);
+
+ done:
+ hs_cell_establish_intro_free(cell);
+ UNMOCK(ed25519_sign_prefixed);
+}
+
+struct testcase_t hs_service_tests[] = {
+ { "gen_establish_intro_cell", test_gen_establish_intro_cell, TT_FORK,
+ NULL, NULL },
+ { "gen_establish_intro_cell_bad", test_gen_establish_intro_cell_bad, TT_FORK,
+ NULL, NULL },
+
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_link_handshake.c b/src/test/test_link_handshake.c
index 9899e54231..421f3aaedf 100644
--- a/src/test/test_link_handshake.c
+++ b/src/test/test_link_handshake.c
@@ -117,6 +117,9 @@ test_link_handshake_certs_ok(void *arg)
crypto_pk_t *key1 = NULL, *key2 = NULL;
const int with_ed = !strcmp((const char *)arg, "Ed25519");
+ tor_addr_from_ipv4h(&c1->base_.addr, 0x7f000001);
+ tor_addr_from_ipv4h(&c2->base_.addr, 0x7f000001);
+
scheduler_init();
MOCK(tor_tls_cert_matches_key, mock_tls_cert_matches_key);
@@ -323,7 +326,7 @@ recv_certs_cleanup(const struct testcase_t *test, void *obj)
if (d) {
tor_free(d->cell);
certs_cell_free(d->ccell);
- connection_or_remove_from_identity_map(d->c);
+ connection_or_clear_identity(d->c);
connection_free_(TO_CONN(d->c));
circuitmux_free(d->chan->base_.cmux);
tor_free(d->chan);
@@ -354,6 +357,7 @@ recv_certs_setup(const struct testcase_t *test)
d->chan = tor_malloc_zero(sizeof(*d->chan));
d->c->chan = d->chan;
d->c->base_.address = tor_strdup("HaveAnAddress");
+ tor_addr_from_ipv4h(&d->c->base_.addr, 0x801f0127);
d->c->base_.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
d->chan->conn = d->c;
tt_int_op(connection_init_or_handshake_state(d->c, 1), ==, 0);
@@ -1133,8 +1137,8 @@ authenticate_data_cleanup(const struct testcase_t *test, void *arg)
authenticate_data_t *d = arg;
if (d) {
tor_free(d->cell);
- connection_or_remove_from_identity_map(d->c1);
- connection_or_remove_from_identity_map(d->c2);
+ connection_or_clear_identity(d->c1);
+ connection_or_clear_identity(d->c2);
connection_free_(TO_CONN(d->c1));
connection_free_(TO_CONN(d->c2));
circuitmux_free(d->chan2->base_.cmux);
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
index 6102af01f5..0f97972032 100644
--- a/src/test/test_oom.c
+++ b/src/test/test_oom.c
@@ -15,6 +15,7 @@
#include "config.h"
#include "relay.h"
#include "test.h"
+#include "test_helpers.h"
/* small replacement mock for circuit_mark_for_close_ to avoid doing all
* the other bookkeeping that comes with marking circuits. */
@@ -58,24 +59,6 @@ dummy_or_circuit_new(int n_p_cells, int n_n_cells)
return TO_CIRCUIT(circ);
}
-static circuit_t *
-dummy_origin_circuit_new(int n_cells)
-{
- origin_circuit_t *circ = origin_circuit_new();
- int i;
- cell_t cell;
-
- for (i=0; i < n_cells; ++i) {
- crypto_rand((void*)&cell, sizeof(cell));
- cell_queue_append_packed_copy(TO_CIRCUIT(circ),
- &TO_CIRCUIT(circ)->n_chan_cells,
- 1, &cell, 1, 0);
- }
-
- TO_CIRCUIT(circ)->purpose = CIRCUIT_PURPOSE_C_GENERAL;
- return TO_CIRCUIT(circ);
-}
-
static void
add_bytes_to_buf(buf_t *buf, size_t n_bytes)
{
diff --git a/src/test/test_options.c b/src/test/test_options.c
index 0eada98cb2..e85e11805b 100644
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@ -1050,7 +1050,7 @@ test_options_validate__transproxy(void *ignored)
tt_int_op(ret, OP_EQ, -1);
#ifndef KERNEL_MAY_SUPPORT_IPFW
- tt_str_op(msg, OP_EQ, "ipfw is a FreeBSD-specificand OS X/Darwin-specific "
+ tt_str_op(msg, OP_EQ, "ipfw is a FreeBSD-specific and OS X/Darwin-specific "
"feature.");
#else
tt_int_op(tdata->opt->TransProxyType_parsed, OP_EQ, TPT_IPFW);
@@ -1071,26 +1071,38 @@ test_options_validate__transproxy(void *ignored)
free_options_test_data(tdata);
tdata = NULL;
-#if defined(linux)
+#if defined(__linux__)
tdata = get_options_test_data("TransProxyType tproxy\n"
"TransPort 127.0.0.1:123\n");
ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
tt_int_op(ret, OP_EQ, -1);
- tt_assert(!msg);
-#endif
-#if defined(__FreeBSD_kernel__) || defined( DARWIN ) || defined(__NetBSD__)
+ if (msg) {
+ TT_DIE(("Expected NULL but got '%s'", msg));
+ }
+#elif defined(KERNEL_MAY_SUPPORT_IPFW)
tdata = get_options_test_data("TransProxyType ipfw\n"
"TransPort 127.0.0.1:123\n");
ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
tt_int_op(ret, OP_EQ, -1);
- tt_assert(!msg);
-#endif
-#if defined(__OpenBSD__)
+ if (msg) {
+ TT_DIE(("Expected NULL but got '%s'", msg));
+ }
+#elif defined(__OpenBSD__)
tdata = get_options_test_data("TransProxyType pf-divert\n"
"TransPort 127.0.0.1:123\n");
ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
tt_int_op(ret, OP_EQ, -1);
- tt_assert(!msg);
+ if (msg) {
+ TT_DIE(("Expected NULL but got '%s'", msg));
+ }
+#elif defined(__NetBSD__)
+ tdata = get_options_test_data("TransProxyType default\n"
+ "TransPort 127.0.0.1:123\n");
+ ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);
+ tt_int_op(ret, OP_EQ, -1);
+ if (msg) {
+ TT_DIE(("Expected NULL but got '%s'", msg));
+ }
#endif
// Assert that a test has run for some TransProxyType
diff --git a/src/test/test_rendcache.c b/src/test/test_rendcache.c
index 7f72e441ee..0d53c78817 100644
--- a/src/test/test_rendcache.c
+++ b/src/test/test_rendcache.c
@@ -158,12 +158,16 @@ test_rend_cache_store_v2_desc_as_client(void *data)
// Test incorrect descriptor ID
rend_cache_init();
mock_rend_query = mock_rend_data(service_id);
- desc_id_base32[0]++;
+ char orig = desc_id_base32[0];
+ if (desc_id_base32[0] == 'a')
+ desc_id_base32[0] = 'b';
+ else
+ desc_id_base32[0] = 'a';
ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str,
desc_id_base32, mock_rend_query,
NULL);
tt_int_op(ret, OP_EQ, -1);
- desc_id_base32[0]--;
+ desc_id_base32[0] = orig;
rend_cache_free_all();
// Test too old descriptor
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 187bfdd93c..86e3fea91a 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -5548,9 +5548,9 @@ test_util_monotonic_time(void *arg)
tt_u64_op(msecc1, OP_GE, nsecc1 / 1000000);
tt_u64_op(usecc1, OP_GE, nsecc1 / 1000);
tt_u64_op(msec1, OP_LE, nsec1 / 1000000 + 1);
- tt_u64_op(usec1, OP_LE, nsec1 / 1000 +10);
+ tt_u64_op(usec1, OP_LE, nsec1 / 1000 + 1000);
tt_u64_op(msecc1, OP_LE, nsecc1 / 1000000 + 1);
- tt_u64_op(usecc1, OP_LE, nsecc1 / 1000 + 10);
+ tt_u64_op(usecc1, OP_LE, nsecc1 / 1000 + 1000);
done:
;
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 29f85c4d17..fc41a837ff 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -355,7 +355,7 @@ main(int argc, char **argv)
usage();
if (!strcmp(arg[0],"--version")) {
- printf("Tor version %s.\n",VERSION);
+ printf("Tor %s\n",VERSION);
return 0;
}
while (n_args && *arg[0] == '-') {
diff --git a/src/trunnel/ed25519_cert.c b/src/trunnel/ed25519_cert.c
index dd5088b231..ee02fda646 100644
--- a/src/trunnel/ed25519_cert.c
+++ b/src/trunnel/ed25519_cert.c
@@ -1,4 +1,4 @@
-/* ed25519_cert.c -- generated by Trunnel v1.5.
+/* ed25519_cert.c -- generated by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -28,6 +28,281 @@ int edcert_deadcode_dummy__ = 0;
} \
} while (0)
+create2_cell_body_t *
+create2_cell_body_new(void)
+{
+ create2_cell_body_t *val = trunnel_calloc(1, sizeof(create2_cell_body_t));
+ if (NULL == val)
+ return NULL;
+ return val;
+}
+
+/** Release all storage held inside 'obj', but do not free 'obj'.
+ */
+static void
+create2_cell_body_clear(create2_cell_body_t *obj)
+{
+ (void) obj;
+ TRUNNEL_DYNARRAY_WIPE(&obj->handshake_data);
+ TRUNNEL_DYNARRAY_CLEAR(&obj->handshake_data);
+}
+
+void
+create2_cell_body_free(create2_cell_body_t *obj)
+{
+ if (obj == NULL)
+ return;
+ create2_cell_body_clear(obj);
+ trunnel_memwipe(obj, sizeof(create2_cell_body_t));
+ trunnel_free_(obj);
+}
+
+uint16_t
+create2_cell_body_get_handshake_type(const create2_cell_body_t *inp)
+{
+ return inp->handshake_type;
+}
+int
+create2_cell_body_set_handshake_type(create2_cell_body_t *inp, uint16_t val)
+{
+ inp->handshake_type = val;
+ return 0;
+}
+uint16_t
+create2_cell_body_get_handshake_len(const create2_cell_body_t *inp)
+{
+ return inp->handshake_len;
+}
+int
+create2_cell_body_set_handshake_len(create2_cell_body_t *inp, uint16_t val)
+{
+ inp->handshake_len = val;
+ return 0;
+}
+size_t
+create2_cell_body_getlen_handshake_data(const create2_cell_body_t *inp)
+{
+ return TRUNNEL_DYNARRAY_LEN(&inp->handshake_data);
+}
+
+uint8_t
+create2_cell_body_get_handshake_data(create2_cell_body_t *inp, size_t idx)
+{
+ return TRUNNEL_DYNARRAY_GET(&inp->handshake_data, idx);
+}
+
+uint8_t
+create2_cell_body_getconst_handshake_data(const create2_cell_body_t *inp, size_t idx)
+{
+ return create2_cell_body_get_handshake_data((create2_cell_body_t*)inp, idx);
+}
+int
+create2_cell_body_set_handshake_data(create2_cell_body_t *inp, size_t idx, uint8_t elt)
+{
+ TRUNNEL_DYNARRAY_SET(&inp->handshake_data, idx, elt);
+ return 0;
+}
+int
+create2_cell_body_add_handshake_data(create2_cell_body_t *inp, uint8_t elt)
+{
+#if SIZE_MAX >= UINT16_MAX
+ if (inp->handshake_data.n_ == UINT16_MAX)
+ goto trunnel_alloc_failed;
+#endif
+ TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->handshake_data, elt, {});
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+
+uint8_t *
+create2_cell_body_getarray_handshake_data(create2_cell_body_t *inp)
+{
+ return inp->handshake_data.elts_;
+}
+const uint8_t *
+create2_cell_body_getconstarray_handshake_data(const create2_cell_body_t *inp)
+{
+ return (const uint8_t *)create2_cell_body_getarray_handshake_data((create2_cell_body_t*)inp);
+}
+int
+create2_cell_body_setlen_handshake_data(create2_cell_body_t *inp, size_t newlen)
+{
+ uint8_t *newptr;
+#if UINT16_MAX < SIZE_MAX
+ if (newlen > UINT16_MAX)
+ goto trunnel_alloc_failed;
+#endif
+ newptr = trunnel_dynarray_setlen(&inp->handshake_data.allocated_,
+ &inp->handshake_data.n_, inp->handshake_data.elts_, newlen,
+ sizeof(inp->handshake_data.elts_[0]), (trunnel_free_fn_t) NULL,
+ &inp->trunnel_error_code_);
+ if (newlen != 0 && newptr == NULL)
+ goto trunnel_alloc_failed;
+ inp->handshake_data.elts_ = newptr;
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+const char *
+create2_cell_body_check(const create2_cell_body_t *obj)
+{
+ if (obj == NULL)
+ return "Object was NULL";
+ if (obj->trunnel_error_code_)
+ return "A set function failed on this object";
+ if (TRUNNEL_DYNARRAY_LEN(&obj->handshake_data) != obj->handshake_len)
+ return "Length mismatch for handshake_data";
+ return NULL;
+}
+
+ssize_t
+create2_cell_body_encoded_len(const create2_cell_body_t *obj)
+{
+ ssize_t result = 0;
+
+ if (NULL != create2_cell_body_check(obj))
+ return -1;
+
+
+ /* Length of u16 handshake_type */
+ result += 2;
+
+ /* Length of u16 handshake_len */
+ result += 2;
+
+ /* Length of u8 handshake_data[handshake_len] */
+ result += TRUNNEL_DYNARRAY_LEN(&obj->handshake_data);
+ return result;
+}
+int
+create2_cell_body_clear_errors(create2_cell_body_t *obj)
+{
+ int r = obj->trunnel_error_code_;
+ obj->trunnel_error_code_ = 0;
+ return r;
+}
+ssize_t
+create2_cell_body_encode(uint8_t *output, const size_t avail, const create2_cell_body_t *obj)
+{
+ ssize_t result = 0;
+ size_t written = 0;
+ uint8_t *ptr = output;
+ const char *msg;
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ const ssize_t encoded_len = create2_cell_body_encoded_len(obj);
+#endif
+
+ if (NULL != (msg = create2_cell_body_check(obj)))
+ goto check_failed;
+
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ trunnel_assert(encoded_len >= 0);
+#endif
+
+ /* Encode u16 handshake_type */
+ trunnel_assert(written <= avail);
+ if (avail - written < 2)
+ goto truncated;
+ trunnel_set_uint16(ptr, trunnel_htons(obj->handshake_type));
+ written += 2; ptr += 2;
+
+ /* Encode u16 handshake_len */
+ trunnel_assert(written <= avail);
+ if (avail - written < 2)
+ goto truncated;
+ trunnel_set_uint16(ptr, trunnel_htons(obj->handshake_len));
+ written += 2; ptr += 2;
+
+ /* Encode u8 handshake_data[handshake_len] */
+ {
+ size_t elt_len = TRUNNEL_DYNARRAY_LEN(&obj->handshake_data);
+ trunnel_assert(obj->handshake_len == elt_len);
+ trunnel_assert(written <= avail);
+ if (avail - written < elt_len)
+ goto truncated;
+ if (elt_len)
+ memcpy(ptr, obj->handshake_data.elts_, elt_len);
+ written += elt_len; ptr += elt_len;
+ }
+
+
+ trunnel_assert(ptr == output + written);
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ {
+ trunnel_assert(encoded_len >= 0);
+ trunnel_assert((size_t)encoded_len == written);
+ }
+
+#endif
+
+ return written;
+
+ truncated:
+ result = -2;
+ goto fail;
+ check_failed:
+ (void)msg;
+ result = -1;
+ goto fail;
+ fail:
+ trunnel_assert(result < 0);
+ return result;
+}
+
+/** As create2_cell_body_parse(), but do not allocate the output
+ * object.
+ */
+static ssize_t
+create2_cell_body_parse_into(create2_cell_body_t *obj, const uint8_t *input, const size_t len_in)
+{
+ const uint8_t *ptr = input;
+ size_t remaining = len_in;
+ ssize_t result = 0;
+ (void)result;
+
+ /* Parse u16 handshake_type */
+ CHECK_REMAINING(2, truncated);
+ obj->handshake_type = trunnel_ntohs(trunnel_get_uint16(ptr));
+ remaining -= 2; ptr += 2;
+
+ /* Parse u16 handshake_len */
+ CHECK_REMAINING(2, truncated);
+ obj->handshake_len = trunnel_ntohs(trunnel_get_uint16(ptr));
+ remaining -= 2; ptr += 2;
+
+ /* Parse u8 handshake_data[handshake_len] */
+ CHECK_REMAINING(obj->handshake_len, truncated);
+ TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->handshake_data, obj->handshake_len, {});
+ obj->handshake_data.n_ = obj->handshake_len;
+ if (obj->handshake_len)
+ memcpy(obj->handshake_data.elts_, ptr, obj->handshake_len);
+ ptr += obj->handshake_len; remaining -= obj->handshake_len;
+ trunnel_assert(ptr + remaining == input + len_in);
+ return len_in - remaining;
+
+ truncated:
+ return -2;
+ trunnel_alloc_failed:
+ return -1;
+}
+
+ssize_t
+create2_cell_body_parse(create2_cell_body_t **output, const uint8_t *input, const size_t len_in)
+{
+ ssize_t result;
+ *output = create2_cell_body_new();
+ if (NULL == *output)
+ return -1;
+ result = create2_cell_body_parse_into(*output, input, len_in);
+ if (result < 0) {
+ create2_cell_body_free(*output);
+ *output = NULL;
+ }
+ return result;
+}
ed25519_cert_extension_t *
ed25519_cert_extension_new(void)
{
@@ -58,7 +333,7 @@ ed25519_cert_extension_free(ed25519_cert_extension_t *obj)
}
uint16_t
-ed25519_cert_extension_get_ext_length(ed25519_cert_extension_t *inp)
+ed25519_cert_extension_get_ext_length(const ed25519_cert_extension_t *inp)
{
return inp->ext_length;
}
@@ -69,7 +344,7 @@ ed25519_cert_extension_set_ext_length(ed25519_cert_extension_t *inp, uint16_t va
return 0;
}
uint8_t
-ed25519_cert_extension_get_ext_type(ed25519_cert_extension_t *inp)
+ed25519_cert_extension_get_ext_type(const ed25519_cert_extension_t *inp)
{
return inp->ext_type;
}
@@ -80,7 +355,7 @@ ed25519_cert_extension_set_ext_type(ed25519_cert_extension_t *inp, uint8_t val)
return 0;
}
uint8_t
-ed25519_cert_extension_get_ext_flags(ed25519_cert_extension_t *inp)
+ed25519_cert_extension_get_ext_flags(const ed25519_cert_extension_t *inp)
{
return inp->ext_flags;
}
@@ -430,6 +705,287 @@ ed25519_cert_extension_parse(ed25519_cert_extension_t **output, const uint8_t *i
}
return result;
}
+extend1_cell_body_t *
+extend1_cell_body_new(void)
+{
+ extend1_cell_body_t *val = trunnel_calloc(1, sizeof(extend1_cell_body_t));
+ if (NULL == val)
+ return NULL;
+ return val;
+}
+
+/** Release all storage held inside 'obj', but do not free 'obj'.
+ */
+static void
+extend1_cell_body_clear(extend1_cell_body_t *obj)
+{
+ (void) obj;
+}
+
+void
+extend1_cell_body_free(extend1_cell_body_t *obj)
+{
+ if (obj == NULL)
+ return;
+ extend1_cell_body_clear(obj);
+ trunnel_memwipe(obj, sizeof(extend1_cell_body_t));
+ trunnel_free_(obj);
+}
+
+uint32_t
+extend1_cell_body_get_ipv4addr(const extend1_cell_body_t *inp)
+{
+ return inp->ipv4addr;
+}
+int
+extend1_cell_body_set_ipv4addr(extend1_cell_body_t *inp, uint32_t val)
+{
+ inp->ipv4addr = val;
+ return 0;
+}
+uint16_t
+extend1_cell_body_get_port(const extend1_cell_body_t *inp)
+{
+ return inp->port;
+}
+int
+extend1_cell_body_set_port(extend1_cell_body_t *inp, uint16_t val)
+{
+ inp->port = val;
+ return 0;
+}
+size_t
+extend1_cell_body_getlen_onionskin(const extend1_cell_body_t *inp)
+{
+ (void)inp; return 186;
+}
+
+uint8_t
+extend1_cell_body_get_onionskin(extend1_cell_body_t *inp, size_t idx)
+{
+ trunnel_assert(idx < 186);
+ return inp->onionskin[idx];
+}
+
+uint8_t
+extend1_cell_body_getconst_onionskin(const extend1_cell_body_t *inp, size_t idx)
+{
+ return extend1_cell_body_get_onionskin((extend1_cell_body_t*)inp, idx);
+}
+int
+extend1_cell_body_set_onionskin(extend1_cell_body_t *inp, size_t idx, uint8_t elt)
+{
+ trunnel_assert(idx < 186);
+ inp->onionskin[idx] = elt;
+ return 0;
+}
+
+uint8_t *
+extend1_cell_body_getarray_onionskin(extend1_cell_body_t *inp)
+{
+ return inp->onionskin;
+}
+const uint8_t *
+extend1_cell_body_getconstarray_onionskin(const extend1_cell_body_t *inp)
+{
+ return (const uint8_t *)extend1_cell_body_getarray_onionskin((extend1_cell_body_t*)inp);
+}
+size_t
+extend1_cell_body_getlen_identity(const extend1_cell_body_t *inp)
+{
+ (void)inp; return 20;
+}
+
+uint8_t
+extend1_cell_body_get_identity(extend1_cell_body_t *inp, size_t idx)
+{
+ trunnel_assert(idx < 20);
+ return inp->identity[idx];
+}
+
+uint8_t
+extend1_cell_body_getconst_identity(const extend1_cell_body_t *inp, size_t idx)
+{
+ return extend1_cell_body_get_identity((extend1_cell_body_t*)inp, idx);
+}
+int
+extend1_cell_body_set_identity(extend1_cell_body_t *inp, size_t idx, uint8_t elt)
+{
+ trunnel_assert(idx < 20);
+ inp->identity[idx] = elt;
+ return 0;
+}
+
+uint8_t *
+extend1_cell_body_getarray_identity(extend1_cell_body_t *inp)
+{
+ return inp->identity;
+}
+const uint8_t *
+extend1_cell_body_getconstarray_identity(const extend1_cell_body_t *inp)
+{
+ return (const uint8_t *)extend1_cell_body_getarray_identity((extend1_cell_body_t*)inp);
+}
+const char *
+extend1_cell_body_check(const extend1_cell_body_t *obj)
+{
+ if (obj == NULL)
+ return "Object was NULL";
+ if (obj->trunnel_error_code_)
+ return "A set function failed on this object";
+ return NULL;
+}
+
+ssize_t
+extend1_cell_body_encoded_len(const extend1_cell_body_t *obj)
+{
+ ssize_t result = 0;
+
+ if (NULL != extend1_cell_body_check(obj))
+ return -1;
+
+
+ /* Length of u32 ipv4addr */
+ result += 4;
+
+ /* Length of u16 port */
+ result += 2;
+
+ /* Length of u8 onionskin[186] */
+ result += 186;
+
+ /* Length of u8 identity[20] */
+ result += 20;
+ return result;
+}
+int
+extend1_cell_body_clear_errors(extend1_cell_body_t *obj)
+{
+ int r = obj->trunnel_error_code_;
+ obj->trunnel_error_code_ = 0;
+ return r;
+}
+ssize_t
+extend1_cell_body_encode(uint8_t *output, const size_t avail, const extend1_cell_body_t *obj)
+{
+ ssize_t result = 0;
+ size_t written = 0;
+ uint8_t *ptr = output;
+ const char *msg;
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ const ssize_t encoded_len = extend1_cell_body_encoded_len(obj);
+#endif
+
+ if (NULL != (msg = extend1_cell_body_check(obj)))
+ goto check_failed;
+
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ trunnel_assert(encoded_len >= 0);
+#endif
+
+ /* Encode u32 ipv4addr */
+ trunnel_assert(written <= avail);
+ if (avail - written < 4)
+ goto truncated;
+ trunnel_set_uint32(ptr, trunnel_htonl(obj->ipv4addr));
+ written += 4; ptr += 4;
+
+ /* Encode u16 port */
+ trunnel_assert(written <= avail);
+ if (avail - written < 2)
+ goto truncated;
+ trunnel_set_uint16(ptr, trunnel_htons(obj->port));
+ written += 2; ptr += 2;
+
+ /* Encode u8 onionskin[186] */
+ trunnel_assert(written <= avail);
+ if (avail - written < 186)
+ goto truncated;
+ memcpy(ptr, obj->onionskin, 186);
+ written += 186; ptr += 186;
+
+ /* Encode u8 identity[20] */
+ trunnel_assert(written <= avail);
+ if (avail - written < 20)
+ goto truncated;
+ memcpy(ptr, obj->identity, 20);
+ written += 20; ptr += 20;
+
+
+ trunnel_assert(ptr == output + written);
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ {
+ trunnel_assert(encoded_len >= 0);
+ trunnel_assert((size_t)encoded_len == written);
+ }
+
+#endif
+
+ return written;
+
+ truncated:
+ result = -2;
+ goto fail;
+ check_failed:
+ (void)msg;
+ result = -1;
+ goto fail;
+ fail:
+ trunnel_assert(result < 0);
+ return result;
+}
+
+/** As extend1_cell_body_parse(), but do not allocate the output
+ * object.
+ */
+static ssize_t
+extend1_cell_body_parse_into(extend1_cell_body_t *obj, const uint8_t *input, const size_t len_in)
+{
+ const uint8_t *ptr = input;
+ size_t remaining = len_in;
+ ssize_t result = 0;
+ (void)result;
+
+ /* Parse u32 ipv4addr */
+ CHECK_REMAINING(4, truncated);
+ obj->ipv4addr = trunnel_ntohl(trunnel_get_uint32(ptr));
+ remaining -= 4; ptr += 4;
+
+ /* Parse u16 port */
+ CHECK_REMAINING(2, truncated);
+ obj->port = trunnel_ntohs(trunnel_get_uint16(ptr));
+ remaining -= 2; ptr += 2;
+
+ /* Parse u8 onionskin[186] */
+ CHECK_REMAINING(186, truncated);
+ memcpy(obj->onionskin, ptr, 186);
+ remaining -= 186; ptr += 186;
+
+ /* Parse u8 identity[20] */
+ CHECK_REMAINING(20, truncated);
+ memcpy(obj->identity, ptr, 20);
+ remaining -= 20; ptr += 20;
+ trunnel_assert(ptr + remaining == input + len_in);
+ return len_in - remaining;
+
+ truncated:
+ return -2;
+}
+
+ssize_t
+extend1_cell_body_parse(extend1_cell_body_t **output, const uint8_t *input, const size_t len_in)
+{
+ ssize_t result;
+ *output = extend1_cell_body_new();
+ if (NULL == *output)
+ return -1;
+ result = extend1_cell_body_parse_into(*output, input, len_in);
+ if (result < 0) {
+ extend1_cell_body_free(*output);
+ *output = NULL;
+ }
+ return result;
+}
link_specifier_t *
link_specifier_new(void)
{
@@ -460,7 +1016,7 @@ link_specifier_free(link_specifier_t *obj)
}
uint8_t
-link_specifier_get_ls_type(link_specifier_t *inp)
+link_specifier_get_ls_type(const link_specifier_t *inp)
{
return inp->ls_type;
}
@@ -471,7 +1027,7 @@ link_specifier_set_ls_type(link_specifier_t *inp, uint8_t val)
return 0;
}
uint8_t
-link_specifier_get_ls_len(link_specifier_t *inp)
+link_specifier_get_ls_len(const link_specifier_t *inp)
{
return inp->ls_len;
}
@@ -482,7 +1038,7 @@ link_specifier_set_ls_len(link_specifier_t *inp, uint8_t val)
return 0;
}
uint32_t
-link_specifier_get_un_ipv4_addr(link_specifier_t *inp)
+link_specifier_get_un_ipv4_addr(const link_specifier_t *inp)
{
return inp->un_ipv4_addr;
}
@@ -493,7 +1049,7 @@ link_specifier_set_un_ipv4_addr(link_specifier_t *inp, uint32_t val)
return 0;
}
uint16_t
-link_specifier_get_un_ipv4_port(link_specifier_t *inp)
+link_specifier_get_un_ipv4_port(const link_specifier_t *inp)
{
return inp->un_ipv4_port;
}
@@ -540,7 +1096,7 @@ link_specifier_getconstarray_un_ipv6_addr(const link_specifier_t *inp)
return (const uint8_t *)link_specifier_getarray_un_ipv6_addr((link_specifier_t*)inp);
}
uint16_t
-link_specifier_get_un_ipv6_port(link_specifier_t *inp)
+link_specifier_get_un_ipv6_port(const link_specifier_t *inp)
{
return inp->un_ipv6_port;
}
@@ -1059,7 +1615,7 @@ ed25519_cert_free(ed25519_cert_t *obj)
}
uint8_t
-ed25519_cert_get_version(ed25519_cert_t *inp)
+ed25519_cert_get_version(const ed25519_cert_t *inp)
{
return inp->version;
}
@@ -1074,7 +1630,7 @@ ed25519_cert_set_version(ed25519_cert_t *inp, uint8_t val)
return 0;
}
uint8_t
-ed25519_cert_get_cert_type(ed25519_cert_t *inp)
+ed25519_cert_get_cert_type(const ed25519_cert_t *inp)
{
return inp->cert_type;
}
@@ -1085,7 +1641,7 @@ ed25519_cert_set_cert_type(ed25519_cert_t *inp, uint8_t val)
return 0;
}
uint32_t
-ed25519_cert_get_exp_field(ed25519_cert_t *inp)
+ed25519_cert_get_exp_field(const ed25519_cert_t *inp)
{
return inp->exp_field;
}
@@ -1096,7 +1652,7 @@ ed25519_cert_set_exp_field(ed25519_cert_t *inp, uint32_t val)
return 0;
}
uint8_t
-ed25519_cert_get_cert_key_type(ed25519_cert_t *inp)
+ed25519_cert_get_cert_key_type(const ed25519_cert_t *inp)
{
return inp->cert_key_type;
}
@@ -1143,7 +1699,7 @@ ed25519_cert_getconstarray_certified_key(const ed25519_cert_t *inp)
return (const uint8_t *)ed25519_cert_getarray_certified_key((ed25519_cert_t*)inp);
}
uint8_t
-ed25519_cert_get_n_extensions(ed25519_cert_t *inp)
+ed25519_cert_get_n_extensions(const ed25519_cert_t *inp)
{
return inp->n_extensions;
}
@@ -1528,6 +2084,343 @@ ed25519_cert_parse(ed25519_cert_t **output, const uint8_t *input, const size_t l
}
return result;
}
+extend2_cell_body_t *
+extend2_cell_body_new(void)
+{
+ extend2_cell_body_t *val = trunnel_calloc(1, sizeof(extend2_cell_body_t));
+ if (NULL == val)
+ return NULL;
+ return val;
+}
+
+/** Release all storage held inside 'obj', but do not free 'obj'.
+ */
+static void
+extend2_cell_body_clear(extend2_cell_body_t *obj)
+{
+ (void) obj;
+ {
+
+ unsigned idx;
+ for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->ls); ++idx) {
+ link_specifier_free(TRUNNEL_DYNARRAY_GET(&obj->ls, idx));
+ }
+ }
+ TRUNNEL_DYNARRAY_WIPE(&obj->ls);
+ TRUNNEL_DYNARRAY_CLEAR(&obj->ls);
+ create2_cell_body_free(obj->create2);
+ obj->create2 = NULL;
+}
+
+void
+extend2_cell_body_free(extend2_cell_body_t *obj)
+{
+ if (obj == NULL)
+ return;
+ extend2_cell_body_clear(obj);
+ trunnel_memwipe(obj, sizeof(extend2_cell_body_t));
+ trunnel_free_(obj);
+}
+
+uint8_t
+extend2_cell_body_get_n_spec(const extend2_cell_body_t *inp)
+{
+ return inp->n_spec;
+}
+int
+extend2_cell_body_set_n_spec(extend2_cell_body_t *inp, uint8_t val)
+{
+ inp->n_spec = val;
+ return 0;
+}
+size_t
+extend2_cell_body_getlen_ls(const extend2_cell_body_t *inp)
+{
+ return TRUNNEL_DYNARRAY_LEN(&inp->ls);
+}
+
+struct link_specifier_st *
+extend2_cell_body_get_ls(extend2_cell_body_t *inp, size_t idx)
+{
+ return TRUNNEL_DYNARRAY_GET(&inp->ls, idx);
+}
+
+ const struct link_specifier_st *
+extend2_cell_body_getconst_ls(const extend2_cell_body_t *inp, size_t idx)
+{
+ return extend2_cell_body_get_ls((extend2_cell_body_t*)inp, idx);
+}
+int
+extend2_cell_body_set_ls(extend2_cell_body_t *inp, size_t idx, struct link_specifier_st * elt)
+{
+ link_specifier_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->ls, idx);
+ if (oldval && oldval != elt)
+ link_specifier_free(oldval);
+ return extend2_cell_body_set0_ls(inp, idx, elt);
+}
+int
+extend2_cell_body_set0_ls(extend2_cell_body_t *inp, size_t idx, struct link_specifier_st * elt)
+{
+ TRUNNEL_DYNARRAY_SET(&inp->ls, idx, elt);
+ return 0;
+}
+int
+extend2_cell_body_add_ls(extend2_cell_body_t *inp, struct link_specifier_st * elt)
+{
+#if SIZE_MAX >= UINT8_MAX
+ if (inp->ls.n_ == UINT8_MAX)
+ goto trunnel_alloc_failed;
+#endif
+ TRUNNEL_DYNARRAY_ADD(struct link_specifier_st *, &inp->ls, elt, {});
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+
+struct link_specifier_st * *
+extend2_cell_body_getarray_ls(extend2_cell_body_t *inp)
+{
+ return inp->ls.elts_;
+}
+const struct link_specifier_st * const *
+extend2_cell_body_getconstarray_ls(const extend2_cell_body_t *inp)
+{
+ return (const struct link_specifier_st * const *)extend2_cell_body_getarray_ls((extend2_cell_body_t*)inp);
+}
+int
+extend2_cell_body_setlen_ls(extend2_cell_body_t *inp, size_t newlen)
+{
+ struct link_specifier_st * *newptr;
+#if UINT8_MAX < SIZE_MAX
+ if (newlen > UINT8_MAX)
+ goto trunnel_alloc_failed;
+#endif
+ newptr = trunnel_dynarray_setlen(&inp->ls.allocated_,
+ &inp->ls.n_, inp->ls.elts_, newlen,
+ sizeof(inp->ls.elts_[0]), (trunnel_free_fn_t) link_specifier_free,
+ &inp->trunnel_error_code_);
+ if (newlen != 0 && newptr == NULL)
+ goto trunnel_alloc_failed;
+ inp->ls.elts_ = newptr;
+ return 0;
+ trunnel_alloc_failed:
+ TRUNNEL_SET_ERROR_CODE(inp);
+ return -1;
+}
+struct create2_cell_body_st *
+extend2_cell_body_get_create2(extend2_cell_body_t *inp)
+{
+ return inp->create2;
+}
+const struct create2_cell_body_st *
+extend2_cell_body_getconst_create2(const extend2_cell_body_t *inp)
+{
+ return extend2_cell_body_get_create2((extend2_cell_body_t*) inp);
+}
+int
+extend2_cell_body_set_create2(extend2_cell_body_t *inp, struct create2_cell_body_st *val)
+{
+ if (inp->create2 && inp->create2 != val)
+ create2_cell_body_free(inp->create2);
+ return extend2_cell_body_set0_create2(inp, val);
+}
+int
+extend2_cell_body_set0_create2(extend2_cell_body_t *inp, struct create2_cell_body_st *val)
+{
+ inp->create2 = val;
+ return 0;
+}
+const char *
+extend2_cell_body_check(const extend2_cell_body_t *obj)
+{
+ if (obj == NULL)
+ return "Object was NULL";
+ if (obj->trunnel_error_code_)
+ return "A set function failed on this object";
+ {
+ const char *msg;
+
+ unsigned idx;
+ for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->ls); ++idx) {
+ if (NULL != (msg = link_specifier_check(TRUNNEL_DYNARRAY_GET(&obj->ls, idx))))
+ return msg;
+ }
+ }
+ if (TRUNNEL_DYNARRAY_LEN(&obj->ls) != obj->n_spec)
+ return "Length mismatch for ls";
+ {
+ const char *msg;
+ if (NULL != (msg = create2_cell_body_check(obj->create2)))
+ return msg;
+ }
+ return NULL;
+}
+
+ssize_t
+extend2_cell_body_encoded_len(const extend2_cell_body_t *obj)
+{
+ ssize_t result = 0;
+
+ if (NULL != extend2_cell_body_check(obj))
+ return -1;
+
+
+ /* Length of u8 n_spec */
+ result += 1;
+
+ /* Length of struct link_specifier ls[n_spec] */
+ {
+
+ unsigned idx;
+ for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->ls); ++idx) {
+ result += link_specifier_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->ls, idx));
+ }
+ }
+
+ /* Length of struct create2_cell_body create2 */
+ result += create2_cell_body_encoded_len(obj->create2);
+ return result;
+}
+int
+extend2_cell_body_clear_errors(extend2_cell_body_t *obj)
+{
+ int r = obj->trunnel_error_code_;
+ obj->trunnel_error_code_ = 0;
+ return r;
+}
+ssize_t
+extend2_cell_body_encode(uint8_t *output, const size_t avail, const extend2_cell_body_t *obj)
+{
+ ssize_t result = 0;
+ size_t written = 0;
+ uint8_t *ptr = output;
+ const char *msg;
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ const ssize_t encoded_len = extend2_cell_body_encoded_len(obj);
+#endif
+
+ if (NULL != (msg = extend2_cell_body_check(obj)))
+ goto check_failed;
+
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ trunnel_assert(encoded_len >= 0);
+#endif
+
+ /* Encode u8 n_spec */
+ trunnel_assert(written <= avail);
+ if (avail - written < 1)
+ goto truncated;
+ trunnel_set_uint8(ptr, (obj->n_spec));
+ written += 1; ptr += 1;
+
+ /* Encode struct link_specifier ls[n_spec] */
+ {
+
+ unsigned idx;
+ for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->ls); ++idx) {
+ trunnel_assert(written <= avail);
+ result = link_specifier_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->ls, idx));
+ if (result < 0)
+ goto fail; /* XXXXXXX !*/
+ written += result; ptr += result;
+ }
+ }
+
+ /* Encode struct create2_cell_body create2 */
+ trunnel_assert(written <= avail);
+ result = create2_cell_body_encode(ptr, avail - written, obj->create2);
+ if (result < 0)
+ goto fail; /* XXXXXXX !*/
+ written += result; ptr += result;
+
+
+ trunnel_assert(ptr == output + written);
+#ifdef TRUNNEL_CHECK_ENCODED_LEN
+ {
+ trunnel_assert(encoded_len >= 0);
+ trunnel_assert((size_t)encoded_len == written);
+ }
+
+#endif
+
+ return written;
+
+ truncated:
+ result = -2;
+ goto fail;
+ check_failed:
+ (void)msg;
+ result = -1;
+ goto fail;
+ fail:
+ trunnel_assert(result < 0);
+ return result;
+}
+
+/** As extend2_cell_body_parse(), but do not allocate the output
+ * object.
+ */
+static ssize_t
+extend2_cell_body_parse_into(extend2_cell_body_t *obj, const uint8_t *input, const size_t len_in)
+{
+ const uint8_t *ptr = input;
+ size_t remaining = len_in;
+ ssize_t result = 0;
+ (void)result;
+
+ /* Parse u8 n_spec */
+ CHECK_REMAINING(1, truncated);
+ obj->n_spec = (trunnel_get_uint8(ptr));
+ remaining -= 1; ptr += 1;
+
+ /* Parse struct link_specifier ls[n_spec] */
+ TRUNNEL_DYNARRAY_EXPAND(link_specifier_t *, &obj->ls, obj->n_spec, {});
+ {
+ link_specifier_t * elt;
+ unsigned idx;
+ for (idx = 0; idx < obj->n_spec; ++idx) {
+ result = link_specifier_parse(&elt, ptr, remaining);
+ if (result < 0)
+ goto relay_fail;
+ trunnel_assert((size_t)result <= remaining);
+ remaining -= result; ptr += result;
+ TRUNNEL_DYNARRAY_ADD(link_specifier_t *, &obj->ls, elt, {link_specifier_free(elt);});
+ }
+ }
+
+ /* Parse struct create2_cell_body create2 */
+ result = create2_cell_body_parse(&obj->create2, ptr, remaining);
+ if (result < 0)
+ goto relay_fail;
+ trunnel_assert((size_t)result <= remaining);
+ remaining -= result; ptr += result;
+ trunnel_assert(ptr + remaining == input + len_in);
+ return len_in - remaining;
+
+ truncated:
+ return -2;
+ relay_fail:
+ trunnel_assert(result < 0);
+ return result;
+ trunnel_alloc_failed:
+ return -1;
+}
+
+ssize_t
+extend2_cell_body_parse(extend2_cell_body_t **output, const uint8_t *input, const size_t len_in)
+{
+ ssize_t result;
+ *output = extend2_cell_body_new();
+ if (NULL == *output)
+ return -1;
+ result = extend2_cell_body_parse_into(*output, input, len_in);
+ if (result < 0) {
+ extend2_cell_body_free(*output);
+ *output = NULL;
+ }
+ return result;
+}
link_specifier_list_t *
link_specifier_list_new(void)
{
@@ -1565,7 +2458,7 @@ link_specifier_list_free(link_specifier_list_t *obj)
}
uint8_t
-link_specifier_list_get_n_spec(link_specifier_list_t *inp)
+link_specifier_list_get_n_spec(const link_specifier_list_t *inp)
{
return inp->n_spec;
}
diff --git a/src/trunnel/ed25519_cert.h b/src/trunnel/ed25519_cert.h
index 571e6d1a53..782bd59585 100644
--- a/src/trunnel/ed25519_cert.h
+++ b/src/trunnel/ed25519_cert.h
@@ -1,4 +1,4 @@
-/* ed25519_cert.h -- generated by by Trunnel v1.5.
+/* ed25519_cert.h -- generated by by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -14,6 +14,15 @@
#define LS_IPV6 1
#define LS_LEGACY_ID 2
#define LS_ED25519_ID 3
+#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_CREATE2_CELL_BODY)
+struct create2_cell_body_st {
+ uint16_t handshake_type;
+ uint16_t handshake_len;
+ TRUNNEL_DYNARRAY_HEAD(, uint8_t) handshake_data;
+ uint8_t trunnel_error_code_;
+};
+#endif
+typedef struct create2_cell_body_st create2_cell_body_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_ED25519_CERT_EXTENSION)
struct ed25519_cert_extension_st {
uint16_t ext_length;
@@ -25,6 +34,16 @@ struct ed25519_cert_extension_st {
};
#endif
typedef struct ed25519_cert_extension_st ed25519_cert_extension_t;
+#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_EXTEND1_CELL_BODY)
+struct extend1_cell_body_st {
+ uint32_t ipv4addr;
+ uint16_t port;
+ uint8_t onionskin[186];
+ uint8_t identity[20];
+ uint8_t trunnel_error_code_;
+};
+#endif
+typedef struct extend1_cell_body_st extend1_cell_body_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_LINK_SPECIFIER)
struct link_specifier_st {
uint8_t ls_type;
@@ -54,6 +73,15 @@ struct ed25519_cert_st {
};
#endif
typedef struct ed25519_cert_st ed25519_cert_t;
+#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_EXTEND2_CELL_BODY)
+struct extend2_cell_body_st {
+ uint8_t n_spec;
+ TRUNNEL_DYNARRAY_HEAD(, struct link_specifier_st *) ls;
+ struct create2_cell_body_st *create2;
+ uint8_t trunnel_error_code_;
+};
+#endif
+typedef struct extend2_cell_body_st extend2_cell_body_t;
#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_LINK_SPECIFIER_LIST)
struct link_specifier_list_st {
uint8_t n_spec;
@@ -62,6 +90,95 @@ struct link_specifier_list_st {
};
#endif
typedef struct link_specifier_list_st link_specifier_list_t;
+/** Return a newly allocated create2_cell_body with all elements set
+ * to zero.
+ */
+create2_cell_body_t *create2_cell_body_new(void);
+/** Release all storage held by the create2_cell_body in 'victim'. (Do
+ * nothing if 'victim' is NULL.)
+ */
+void create2_cell_body_free(create2_cell_body_t *victim);
+/** Try to parse a create2_cell_body from the buffer in 'input', using
+ * up to 'len_in' bytes from the input buffer. On success, return the
+ * number of bytes consumed and set *output to the newly allocated
+ * create2_cell_body_t. On failure, return -2 if the input appears
+ * truncated, and -1 if the input is otherwise invalid.
+ */
+ssize_t create2_cell_body_parse(create2_cell_body_t **output, const uint8_t *input, const size_t len_in);
+/** Return the number of bytes we expect to need to encode the
+ * create2_cell_body in 'obj'. On failure, return a negative value.
+ * Note that this value may be an overestimate, and can even be an
+ * underestimate for certain unencodeable objects.
+ */
+ssize_t create2_cell_body_encoded_len(const create2_cell_body_t *obj);
+/** Try to encode the create2_cell_body from 'input' into the buffer
+ * at 'output', using up to 'avail' bytes of the output buffer. On
+ * success, return the number of bytes used. On failure, return -2 if
+ * the buffer was not long enough, and -1 if the input was invalid.
+ */
+ssize_t create2_cell_body_encode(uint8_t *output, size_t avail, const create2_cell_body_t *input);
+/** Check whether the internal state of the create2_cell_body in 'obj'
+ * is consistent. Return NULL if it is, and a short message if it is
+ * not.
+ */
+const char *create2_cell_body_check(const create2_cell_body_t *obj);
+/** Clear any errors that were set on the object 'obj' by its setter
+ * functions. Return true iff errors were cleared.
+ */
+int create2_cell_body_clear_errors(create2_cell_body_t *obj);
+/** Return the value of the handshake_type field of the
+ * create2_cell_body_t in 'inp'
+ */
+uint16_t create2_cell_body_get_handshake_type(const create2_cell_body_t *inp);
+/** Set the value of the handshake_type field of the
+ * create2_cell_body_t in 'inp' to 'val'. Return 0 on success; return
+ * -1 and set the error code on 'inp' on failure.
+ */
+int create2_cell_body_set_handshake_type(create2_cell_body_t *inp, uint16_t val);
+/** Return the value of the handshake_len field of the
+ * create2_cell_body_t in 'inp'
+ */
+uint16_t create2_cell_body_get_handshake_len(const create2_cell_body_t *inp);
+/** Set the value of the handshake_len field of the
+ * create2_cell_body_t in 'inp' to 'val'. Return 0 on success; return
+ * -1 and set the error code on 'inp' on failure.
+ */
+int create2_cell_body_set_handshake_len(create2_cell_body_t *inp, uint16_t val);
+/** Return the length of the dynamic array holding the handshake_data
+ * field of the create2_cell_body_t in 'inp'.
+ */
+size_t create2_cell_body_getlen_handshake_data(const create2_cell_body_t *inp);
+/** Return the element at position 'idx' of the dynamic array field
+ * handshake_data of the create2_cell_body_t in 'inp'.
+ */
+uint8_t create2_cell_body_get_handshake_data(create2_cell_body_t *inp, size_t idx);
+/** As create2_cell_body_get_handshake_data, but take and return a
+ * const pointer
+ */
+uint8_t create2_cell_body_getconst_handshake_data(const create2_cell_body_t *inp, size_t idx);
+/** Change the element at position 'idx' of the dynamic array field
+ * handshake_data of the create2_cell_body_t in 'inp', so that it will
+ * hold the value 'elt'.
+ */
+int create2_cell_body_set_handshake_data(create2_cell_body_t *inp, size_t idx, uint8_t elt);
+/** Append a new element 'elt' to the dynamic array field
+ * handshake_data of the create2_cell_body_t in 'inp'.
+ */
+int create2_cell_body_add_handshake_data(create2_cell_body_t *inp, uint8_t elt);
+/** Return a pointer to the variable-length array field handshake_data
+ * of 'inp'.
+ */
+uint8_t * create2_cell_body_getarray_handshake_data(create2_cell_body_t *inp);
+/** As create2_cell_body_get_handshake_data, but take and return a
+ * const pointer
+ */
+const uint8_t * create2_cell_body_getconstarray_handshake_data(const create2_cell_body_t *inp);
+/** Change the length of the variable-length array field
+ * handshake_data of 'inp' to 'newlen'.Fill extra elements with 0.
+ * Return 0 on success; return -1 and set the error code on 'inp' on
+ * failure.
+ */
+int create2_cell_body_setlen_handshake_data(create2_cell_body_t *inp, size_t newlen);
/** Return a newly allocated ed25519_cert_extension with all elements
* set to zero.
*/
@@ -101,7 +218,7 @@ int ed25519_cert_extension_clear_errors(ed25519_cert_extension_t *obj);
/** Return the value of the ext_length field of the
* ed25519_cert_extension_t in 'inp'
*/
-uint16_t ed25519_cert_extension_get_ext_length(ed25519_cert_extension_t *inp);
+uint16_t ed25519_cert_extension_get_ext_length(const ed25519_cert_extension_t *inp);
/** Set the value of the ext_length field of the
* ed25519_cert_extension_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -110,7 +227,7 @@ int ed25519_cert_extension_set_ext_length(ed25519_cert_extension_t *inp, uint16_
/** Return the value of the ext_type field of the
* ed25519_cert_extension_t in 'inp'
*/
-uint8_t ed25519_cert_extension_get_ext_type(ed25519_cert_extension_t *inp);
+uint8_t ed25519_cert_extension_get_ext_type(const ed25519_cert_extension_t *inp);
/** Set the value of the ext_type field of the
* ed25519_cert_extension_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -119,7 +236,7 @@ int ed25519_cert_extension_set_ext_type(ed25519_cert_extension_t *inp, uint8_t v
/** Return the value of the ext_flags field of the
* ed25519_cert_extension_t in 'inp'
*/
-uint8_t ed25519_cert_extension_get_ext_flags(ed25519_cert_extension_t *inp);
+uint8_t ed25519_cert_extension_get_ext_flags(const ed25519_cert_extension_t *inp);
/** Set the value of the ext_flags field of the
* ed25519_cert_extension_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -184,6 +301,109 @@ const uint8_t * ed25519_cert_extension_getconstarray_un_unparsed(const ed25519_
* success; return -1 and set the error code on 'inp' on failure.
*/
int ed25519_cert_extension_setlen_un_unparsed(ed25519_cert_extension_t *inp, size_t newlen);
+/** Return a newly allocated extend1_cell_body with all elements set
+ * to zero.
+ */
+extend1_cell_body_t *extend1_cell_body_new(void);
+/** Release all storage held by the extend1_cell_body in 'victim'. (Do
+ * nothing if 'victim' is NULL.)
+ */
+void extend1_cell_body_free(extend1_cell_body_t *victim);
+/** Try to parse a extend1_cell_body from the buffer in 'input', using
+ * up to 'len_in' bytes from the input buffer. On success, return the
+ * number of bytes consumed and set *output to the newly allocated
+ * extend1_cell_body_t. On failure, return -2 if the input appears
+ * truncated, and -1 if the input is otherwise invalid.
+ */
+ssize_t extend1_cell_body_parse(extend1_cell_body_t **output, const uint8_t *input, const size_t len_in);
+/** Return the number of bytes we expect to need to encode the
+ * extend1_cell_body in 'obj'. On failure, return a negative value.
+ * Note that this value may be an overestimate, and can even be an
+ * underestimate for certain unencodeable objects.
+ */
+ssize_t extend1_cell_body_encoded_len(const extend1_cell_body_t *obj);
+/** Try to encode the extend1_cell_body from 'input' into the buffer
+ * at 'output', using up to 'avail' bytes of the output buffer. On
+ * success, return the number of bytes used. On failure, return -2 if
+ * the buffer was not long enough, and -1 if the input was invalid.
+ */
+ssize_t extend1_cell_body_encode(uint8_t *output, size_t avail, const extend1_cell_body_t *input);
+/** Check whether the internal state of the extend1_cell_body in 'obj'
+ * is consistent. Return NULL if it is, and a short message if it is
+ * not.
+ */
+const char *extend1_cell_body_check(const extend1_cell_body_t *obj);
+/** Clear any errors that were set on the object 'obj' by its setter
+ * functions. Return true iff errors were cleared.
+ */
+int extend1_cell_body_clear_errors(extend1_cell_body_t *obj);
+/** Return the value of the ipv4addr field of the extend1_cell_body_t
+ * in 'inp'
+ */
+uint32_t extend1_cell_body_get_ipv4addr(const extend1_cell_body_t *inp);
+/** Set the value of the ipv4addr field of the extend1_cell_body_t in
+ * 'inp' to 'val'. Return 0 on success; return -1 and set the error
+ * code on 'inp' on failure.
+ */
+int extend1_cell_body_set_ipv4addr(extend1_cell_body_t *inp, uint32_t val);
+/** Return the value of the port field of the extend1_cell_body_t in
+ * 'inp'
+ */
+uint16_t extend1_cell_body_get_port(const extend1_cell_body_t *inp);
+/** Set the value of the port field of the extend1_cell_body_t in
+ * 'inp' to 'val'. Return 0 on success; return -1 and set the error
+ * code on 'inp' on failure.
+ */
+int extend1_cell_body_set_port(extend1_cell_body_t *inp, uint16_t val);
+/** Return the (constant) length of the array holding the onionskin
+ * field of the extend1_cell_body_t in 'inp'.
+ */
+size_t extend1_cell_body_getlen_onionskin(const extend1_cell_body_t *inp);
+/** Return the element at position 'idx' of the fixed array field
+ * onionskin of the extend1_cell_body_t in 'inp'.
+ */
+uint8_t extend1_cell_body_get_onionskin(extend1_cell_body_t *inp, size_t idx);
+/** As extend1_cell_body_get_onionskin, but take and return a const
+ * pointer
+ */
+uint8_t extend1_cell_body_getconst_onionskin(const extend1_cell_body_t *inp, size_t idx);
+/** Change the element at position 'idx' of the fixed array field
+ * onionskin of the extend1_cell_body_t in 'inp', so that it will hold
+ * the value 'elt'.
+ */
+int extend1_cell_body_set_onionskin(extend1_cell_body_t *inp, size_t idx, uint8_t elt);
+/** Return a pointer to the 186-element array field onionskin of
+ * 'inp'.
+ */
+uint8_t * extend1_cell_body_getarray_onionskin(extend1_cell_body_t *inp);
+/** As extend1_cell_body_get_onionskin, but take and return a const
+ * pointer
+ */
+const uint8_t * extend1_cell_body_getconstarray_onionskin(const extend1_cell_body_t *inp);
+/** Return the (constant) length of the array holding the identity
+ * field of the extend1_cell_body_t in 'inp'.
+ */
+size_t extend1_cell_body_getlen_identity(const extend1_cell_body_t *inp);
+/** Return the element at position 'idx' of the fixed array field
+ * identity of the extend1_cell_body_t in 'inp'.
+ */
+uint8_t extend1_cell_body_get_identity(extend1_cell_body_t *inp, size_t idx);
+/** As extend1_cell_body_get_identity, but take and return a const
+ * pointer
+ */
+uint8_t extend1_cell_body_getconst_identity(const extend1_cell_body_t *inp, size_t idx);
+/** Change the element at position 'idx' of the fixed array field
+ * identity of the extend1_cell_body_t in 'inp', so that it will hold
+ * the value 'elt'.
+ */
+int extend1_cell_body_set_identity(extend1_cell_body_t *inp, size_t idx, uint8_t elt);
+/** Return a pointer to the 20-element array field identity of 'inp'.
+ */
+uint8_t * extend1_cell_body_getarray_identity(extend1_cell_body_t *inp);
+/** As extend1_cell_body_get_identity, but take and return a const
+ * pointer
+ */
+const uint8_t * extend1_cell_body_getconstarray_identity(const extend1_cell_body_t *inp);
/** Return a newly allocated link_specifier with all elements set to
* zero.
*/
@@ -222,7 +442,7 @@ int link_specifier_clear_errors(link_specifier_t *obj);
/** Return the value of the ls_type field of the link_specifier_t in
* 'inp'
*/
-uint8_t link_specifier_get_ls_type(link_specifier_t *inp);
+uint8_t link_specifier_get_ls_type(const link_specifier_t *inp);
/** Set the value of the ls_type field of the link_specifier_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -231,7 +451,7 @@ int link_specifier_set_ls_type(link_specifier_t *inp, uint8_t val);
/** Return the value of the ls_len field of the link_specifier_t in
* 'inp'
*/
-uint8_t link_specifier_get_ls_len(link_specifier_t *inp);
+uint8_t link_specifier_get_ls_len(const link_specifier_t *inp);
/** Set the value of the ls_len field of the link_specifier_t in 'inp'
* to 'val'. Return 0 on success; return -1 and set the error code on
* 'inp' on failure.
@@ -240,7 +460,7 @@ int link_specifier_set_ls_len(link_specifier_t *inp, uint8_t val);
/** Return the value of the un_ipv4_addr field of the link_specifier_t
* in 'inp'
*/
-uint32_t link_specifier_get_un_ipv4_addr(link_specifier_t *inp);
+uint32_t link_specifier_get_un_ipv4_addr(const link_specifier_t *inp);
/** Set the value of the un_ipv4_addr field of the link_specifier_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -249,7 +469,7 @@ int link_specifier_set_un_ipv4_addr(link_specifier_t *inp, uint32_t val);
/** Return the value of the un_ipv4_port field of the link_specifier_t
* in 'inp'
*/
-uint16_t link_specifier_get_un_ipv4_port(link_specifier_t *inp);
+uint16_t link_specifier_get_un_ipv4_port(const link_specifier_t *inp);
/** Set the value of the un_ipv4_port field of the link_specifier_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -283,7 +503,7 @@ const uint8_t * link_specifier_getconstarray_un_ipv6_addr(const link_specifier_
/** Return the value of the un_ipv6_port field of the link_specifier_t
* in 'inp'
*/
-uint16_t link_specifier_get_un_ipv6_port(link_specifier_t *inp);
+uint16_t link_specifier_get_un_ipv6_port(const link_specifier_t *inp);
/** Set the value of the un_ipv6_port field of the link_specifier_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -412,7 +632,7 @@ int ed25519_cert_clear_errors(ed25519_cert_t *obj);
/** Return the value of the version field of the ed25519_cert_t in
* 'inp'
*/
-uint8_t ed25519_cert_get_version(ed25519_cert_t *inp);
+uint8_t ed25519_cert_get_version(const ed25519_cert_t *inp);
/** Set the value of the version field of the ed25519_cert_t in 'inp'
* to 'val'. Return 0 on success; return -1 and set the error code on
* 'inp' on failure.
@@ -421,7 +641,7 @@ int ed25519_cert_set_version(ed25519_cert_t *inp, uint8_t val);
/** Return the value of the cert_type field of the ed25519_cert_t in
* 'inp'
*/
-uint8_t ed25519_cert_get_cert_type(ed25519_cert_t *inp);
+uint8_t ed25519_cert_get_cert_type(const ed25519_cert_t *inp);
/** Set the value of the cert_type field of the ed25519_cert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -430,7 +650,7 @@ int ed25519_cert_set_cert_type(ed25519_cert_t *inp, uint8_t val);
/** Return the value of the exp_field field of the ed25519_cert_t in
* 'inp'
*/
-uint32_t ed25519_cert_get_exp_field(ed25519_cert_t *inp);
+uint32_t ed25519_cert_get_exp_field(const ed25519_cert_t *inp);
/** Set the value of the exp_field field of the ed25519_cert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -439,7 +659,7 @@ int ed25519_cert_set_exp_field(ed25519_cert_t *inp, uint32_t val);
/** Return the value of the cert_key_type field of the ed25519_cert_t
* in 'inp'
*/
-uint8_t ed25519_cert_get_cert_key_type(ed25519_cert_t *inp);
+uint8_t ed25519_cert_get_cert_key_type(const ed25519_cert_t *inp);
/** Set the value of the cert_key_type field of the ed25519_cert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -473,7 +693,7 @@ const uint8_t * ed25519_cert_getconstarray_certified_key(const ed25519_cert_t *
/** Return the value of the n_extensions field of the ed25519_cert_t
* in 'inp'
*/
-uint8_t ed25519_cert_get_n_extensions(ed25519_cert_t *inp);
+uint8_t ed25519_cert_get_n_extensions(const ed25519_cert_t *inp);
/** Set the value of the n_extensions field of the ed25519_cert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -536,6 +756,104 @@ uint8_t * ed25519_cert_getarray_signature(ed25519_cert_t *inp);
/** As ed25519_cert_get_signature, but take and return a const pointer
*/
const uint8_t * ed25519_cert_getconstarray_signature(const ed25519_cert_t *inp);
+/** Return a newly allocated extend2_cell_body with all elements set
+ * to zero.
+ */
+extend2_cell_body_t *extend2_cell_body_new(void);
+/** Release all storage held by the extend2_cell_body in 'victim'. (Do
+ * nothing if 'victim' is NULL.)
+ */
+void extend2_cell_body_free(extend2_cell_body_t *victim);
+/** Try to parse a extend2_cell_body from the buffer in 'input', using
+ * up to 'len_in' bytes from the input buffer. On success, return the
+ * number of bytes consumed and set *output to the newly allocated
+ * extend2_cell_body_t. On failure, return -2 if the input appears
+ * truncated, and -1 if the input is otherwise invalid.
+ */
+ssize_t extend2_cell_body_parse(extend2_cell_body_t **output, const uint8_t *input, const size_t len_in);
+/** Return the number of bytes we expect to need to encode the
+ * extend2_cell_body in 'obj'. On failure, return a negative value.
+ * Note that this value may be an overestimate, and can even be an
+ * underestimate for certain unencodeable objects.
+ */
+ssize_t extend2_cell_body_encoded_len(const extend2_cell_body_t *obj);
+/** Try to encode the extend2_cell_body from 'input' into the buffer
+ * at 'output', using up to 'avail' bytes of the output buffer. On
+ * success, return the number of bytes used. On failure, return -2 if
+ * the buffer was not long enough, and -1 if the input was invalid.
+ */
+ssize_t extend2_cell_body_encode(uint8_t *output, size_t avail, const extend2_cell_body_t *input);
+/** Check whether the internal state of the extend2_cell_body in 'obj'
+ * is consistent. Return NULL if it is, and a short message if it is
+ * not.
+ */
+const char *extend2_cell_body_check(const extend2_cell_body_t *obj);
+/** Clear any errors that were set on the object 'obj' by its setter
+ * functions. Return true iff errors were cleared.
+ */
+int extend2_cell_body_clear_errors(extend2_cell_body_t *obj);
+/** Return the value of the n_spec field of the extend2_cell_body_t in
+ * 'inp'
+ */
+uint8_t extend2_cell_body_get_n_spec(const extend2_cell_body_t *inp);
+/** Set the value of the n_spec field of the extend2_cell_body_t in
+ * 'inp' to 'val'. Return 0 on success; return -1 and set the error
+ * code on 'inp' on failure.
+ */
+int extend2_cell_body_set_n_spec(extend2_cell_body_t *inp, uint8_t val);
+/** Return the length of the dynamic array holding the ls field of the
+ * extend2_cell_body_t in 'inp'.
+ */
+size_t extend2_cell_body_getlen_ls(const extend2_cell_body_t *inp);
+/** Return the element at position 'idx' of the dynamic array field ls
+ * of the extend2_cell_body_t in 'inp'.
+ */
+struct link_specifier_st * extend2_cell_body_get_ls(extend2_cell_body_t *inp, size_t idx);
+/** As extend2_cell_body_get_ls, but take and return a const pointer
+ */
+ const struct link_specifier_st * extend2_cell_body_getconst_ls(const extend2_cell_body_t *inp, size_t idx);
+/** Change the element at position 'idx' of the dynamic array field ls
+ * of the extend2_cell_body_t in 'inp', so that it will hold the value
+ * 'elt'. Free the previous value, if any.
+ */
+int extend2_cell_body_set_ls(extend2_cell_body_t *inp, size_t idx, struct link_specifier_st * elt);
+/** As extend2_cell_body_set_ls, but does not free the previous value.
+ */
+int extend2_cell_body_set0_ls(extend2_cell_body_t *inp, size_t idx, struct link_specifier_st * elt);
+/** Append a new element 'elt' to the dynamic array field ls of the
+ * extend2_cell_body_t in 'inp'.
+ */
+int extend2_cell_body_add_ls(extend2_cell_body_t *inp, struct link_specifier_st * elt);
+/** Return a pointer to the variable-length array field ls of 'inp'.
+ */
+struct link_specifier_st * * extend2_cell_body_getarray_ls(extend2_cell_body_t *inp);
+/** As extend2_cell_body_get_ls, but take and return a const pointer
+ */
+const struct link_specifier_st * const * extend2_cell_body_getconstarray_ls(const extend2_cell_body_t *inp);
+/** Change the length of the variable-length array field ls of 'inp'
+ * to 'newlen'.Fill extra elements with NULL; free removed elements.
+ * Return 0 on success; return -1 and set the error code on 'inp' on
+ * failure.
+ */
+int extend2_cell_body_setlen_ls(extend2_cell_body_t *inp, size_t newlen);
+/** Return the value of the create2 field of the extend2_cell_body_t
+ * in 'inp'
+ */
+struct create2_cell_body_st * extend2_cell_body_get_create2(extend2_cell_body_t *inp);
+/** As extend2_cell_body_get_create2, but take and return a const
+ * pointer
+ */
+const struct create2_cell_body_st * extend2_cell_body_getconst_create2(const extend2_cell_body_t *inp);
+/** Set the value of the create2 field of the extend2_cell_body_t in
+ * 'inp' to 'val'. Free the old value if any. Steals the referenceto
+ * 'val'.Return 0 on success; return -1 and set the error code on
+ * 'inp' on failure.
+ */
+int extend2_cell_body_set_create2(extend2_cell_body_t *inp, struct create2_cell_body_st *val);
+/** As extend2_cell_body_set_create2, but does not free the previous
+ * value.
+ */
+int extend2_cell_body_set0_create2(extend2_cell_body_t *inp, struct create2_cell_body_st *val);
/** Return a newly allocated link_specifier_list with all elements set
* to zero.
*/
@@ -575,7 +893,7 @@ int link_specifier_list_clear_errors(link_specifier_list_t *obj);
/** Return the value of the n_spec field of the link_specifier_list_t
* in 'inp'
*/
-uint8_t link_specifier_list_get_n_spec(link_specifier_list_t *inp);
+uint8_t link_specifier_list_get_n_spec(const link_specifier_list_t *inp);
/** Set the value of the n_spec field of the link_specifier_list_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
diff --git a/src/trunnel/ed25519_cert.trunnel b/src/trunnel/ed25519_cert.trunnel
index 012b2afc30..e424ce5464 100644
--- a/src/trunnel/ed25519_cert.trunnel
+++ b/src/trunnel/ed25519_cert.trunnel
@@ -23,40 +23,6 @@ struct ed25519_cert_extension {
};
}
-/*
-struct cert_revocation {
- u8 prefix[8];
- u8 version IN [1];
- u8 keytype;
- u8 identity_key[32];
- u8 revoked_key[32];
- u64 published;
- u8 n_extensions;
- struct cert_extension ext[n_extensions];
- u8 signature[64];
-}
-
-struct crosscert_ed_rsa {
- u8 ed_key[32];
- u32 expiration_date;
- u8 signature[128];
-}
-
-struct auth02_cell {
- u8 type[8];
- u8 cid[32];
- u8 sid[32];
- u8 cid_ed[32];
- u8 sid_ed[32];
- u8 slog[32];
- u8 clog[32];
- u8 scert[32];
- u8 tlssecrets[32];
- u8 rand[24];
- u8 sig[64];
-}
-*/
-
const LS_IPV4 = 0x00;
const LS_IPV6 = 0x01;
const LS_LEGACY_ID = 0x02;
@@ -79,3 +45,22 @@ struct link_specifier_list {
u8 n_spec;
struct link_specifier spec[n_spec];
}
+
+struct extend1_cell_body {
+ u32 ipv4addr;
+ u16 port;
+ u8 onionskin[186];
+ u8 identity[20];
+}
+
+struct create2_cell_body {
+ u16 handshake_type;
+ u16 handshake_len;
+ u8 handshake_data[handshake_len];
+}
+
+struct extend2_cell_body {
+ u8 n_spec;
+ struct link_specifier ls[n_spec];
+ struct create2_cell_body create2;
+}
diff --git a/src/trunnel/hs/cell_common.c b/src/trunnel/hs/cell_common.c
index c6c610d213..830f2260ee 100644
--- a/src/trunnel/hs/cell_common.c
+++ b/src/trunnel/hs/cell_common.c
@@ -1,4 +1,4 @@
-/* cell_common.c -- generated by Trunnel v1.5.
+/* cell_common.c -- generated by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -58,7 +58,7 @@ cell_extension_fields_free(cell_extension_fields_t *obj)
}
uint8_t
-cell_extension_fields_get_field_type(cell_extension_fields_t *inp)
+cell_extension_fields_get_field_type(const cell_extension_fields_t *inp)
{
return inp->field_type;
}
@@ -69,7 +69,7 @@ cell_extension_fields_set_field_type(cell_extension_fields_t *inp, uint8_t val)
return 0;
}
uint8_t
-cell_extension_fields_get_field_len(cell_extension_fields_t *inp)
+cell_extension_fields_get_field_len(const cell_extension_fields_t *inp)
{
return inp->field_len;
}
@@ -340,7 +340,7 @@ cell_extension_free(cell_extension_t *obj)
}
uint8_t
-cell_extension_get_num(cell_extension_t *inp)
+cell_extension_get_num(const cell_extension_t *inp)
{
return inp->num;
}
diff --git a/src/trunnel/hs/cell_common.h b/src/trunnel/hs/cell_common.h
index 3c847f71e5..8999f7da40 100644
--- a/src/trunnel/hs/cell_common.h
+++ b/src/trunnel/hs/cell_common.h
@@ -1,4 +1,4 @@
-/* cell_common.h -- generated by by Trunnel v1.5.
+/* cell_common.h -- generated by by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -64,7 +64,7 @@ int cell_extension_fields_clear_errors(cell_extension_fields_t *obj);
/** Return the value of the field_type field of the
* cell_extension_fields_t in 'inp'
*/
-uint8_t cell_extension_fields_get_field_type(cell_extension_fields_t *inp);
+uint8_t cell_extension_fields_get_field_type(const cell_extension_fields_t *inp);
/** Set the value of the field_type field of the
* cell_extension_fields_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -73,7 +73,7 @@ int cell_extension_fields_set_field_type(cell_extension_fields_t *inp, uint8_t v
/** Return the value of the field_len field of the
* cell_extension_fields_t in 'inp'
*/
-uint8_t cell_extension_fields_get_field_len(cell_extension_fields_t *inp);
+uint8_t cell_extension_fields_get_field_len(const cell_extension_fields_t *inp);
/** Set the value of the field_len field of the
* cell_extension_fields_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -150,7 +150,7 @@ const char *cell_extension_check(const cell_extension_t *obj);
int cell_extension_clear_errors(cell_extension_t *obj);
/** Return the value of the num field of the cell_extension_t in 'inp'
*/
-uint8_t cell_extension_get_num(cell_extension_t *inp);
+uint8_t cell_extension_get_num(const cell_extension_t *inp);
/** Set the value of the num field of the cell_extension_t in 'inp' to
* 'val'. Return 0 on success; return -1 and set the error code on
* 'inp' on failure.
diff --git a/src/trunnel/hs/cell_establish_intro.c b/src/trunnel/hs/cell_establish_intro.c
index f3a3f53e91..02094fe2bf 100644
--- a/src/trunnel/hs/cell_establish_intro.c
+++ b/src/trunnel/hs/cell_establish_intro.c
@@ -1,4 +1,4 @@
-/* cell_establish_intro.c -- generated by Trunnel v1.5.
+/* cell_establish_intro.c -- generated by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -75,7 +75,7 @@ hs_cell_establish_intro_get_start_cell(const hs_cell_establish_intro_t *inp)
return inp->start_cell;
}
uint8_t
-hs_cell_establish_intro_get_auth_key_type(hs_cell_establish_intro_t *inp)
+hs_cell_establish_intro_get_auth_key_type(const hs_cell_establish_intro_t *inp)
{
return inp->auth_key_type;
}
@@ -90,7 +90,7 @@ hs_cell_establish_intro_set_auth_key_type(hs_cell_establish_intro_t *inp, uint8_
return 0;
}
uint16_t
-hs_cell_establish_intro_get_auth_key_len(hs_cell_establish_intro_t *inp)
+hs_cell_establish_intro_get_auth_key_len(const hs_cell_establish_intro_t *inp)
{
return inp->auth_key_len;
}
@@ -232,7 +232,7 @@ hs_cell_establish_intro_getconstarray_handshake_mac(const hs_cell_establish_intr
return (const uint8_t *)hs_cell_establish_intro_getarray_handshake_mac((hs_cell_establish_intro_t*)inp);
}
uint16_t
-hs_cell_establish_intro_get_sig_len(hs_cell_establish_intro_t *inp)
+hs_cell_establish_intro_get_sig_len(const hs_cell_establish_intro_t *inp)
{
return inp->sig_len;
}
diff --git a/src/trunnel/hs/cell_establish_intro.h b/src/trunnel/hs/cell_establish_intro.h
index 9a066b1804..a9166f10d8 100644
--- a/src/trunnel/hs/cell_establish_intro.h
+++ b/src/trunnel/hs/cell_establish_intro.h
@@ -1,4 +1,4 @@
-/* cell_establish_intro.h -- generated by by Trunnel v1.5.
+/* cell_establish_intro.h -- generated by by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -75,7 +75,7 @@ const uint8_t * hs_cell_establish_intro_get_start_cell(const hs_cell_establish_i
/** Return the value of the auth_key_type field of the
* hs_cell_establish_intro_t in 'inp'
*/
-uint8_t hs_cell_establish_intro_get_auth_key_type(hs_cell_establish_intro_t *inp);
+uint8_t hs_cell_establish_intro_get_auth_key_type(const hs_cell_establish_intro_t *inp);
/** Set the value of the auth_key_type field of the
* hs_cell_establish_intro_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -84,7 +84,7 @@ int hs_cell_establish_intro_set_auth_key_type(hs_cell_establish_intro_t *inp, ui
/** Return the value of the auth_key_len field of the
* hs_cell_establish_intro_t in 'inp'
*/
-uint16_t hs_cell_establish_intro_get_auth_key_len(hs_cell_establish_intro_t *inp);
+uint16_t hs_cell_establish_intro_get_auth_key_len(const hs_cell_establish_intro_t *inp);
/** Set the value of the auth_key_len field of the
* hs_cell_establish_intro_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
@@ -173,7 +173,7 @@ const uint8_t * hs_cell_establish_intro_getconstarray_handshake_mac(const hs_ce
/** Return the value of the sig_len field of the
* hs_cell_establish_intro_t in 'inp'
*/
-uint16_t hs_cell_establish_intro_get_sig_len(hs_cell_establish_intro_t *inp);
+uint16_t hs_cell_establish_intro_get_sig_len(const hs_cell_establish_intro_t *inp);
/** Set the value of the sig_len field of the
* hs_cell_establish_intro_t in 'inp' to 'val'. Return 0 on success;
* return -1 and set the error code on 'inp' on failure.
diff --git a/src/trunnel/hs/cell_introduce1.c b/src/trunnel/hs/cell_introduce1.c
index 51f567655e..5922a086dc 100644
--- a/src/trunnel/hs/cell_introduce1.c
+++ b/src/trunnel/hs/cell_introduce1.c
@@ -1,4 +1,4 @@
-/* cell_introduce1.c -- generated by Trunnel v1.5.
+/* cell_introduce1.c -- generated by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -114,7 +114,7 @@ hs_cell_introduce1_getconstarray_legacy_key_id(const hs_cell_introduce1_t *inp)
return (const uint8_t *)hs_cell_introduce1_getarray_legacy_key_id((hs_cell_introduce1_t*)inp);
}
uint8_t
-hs_cell_introduce1_get_auth_key_type(hs_cell_introduce1_t *inp)
+hs_cell_introduce1_get_auth_key_type(const hs_cell_introduce1_t *inp)
{
return inp->auth_key_type;
}
@@ -129,7 +129,7 @@ hs_cell_introduce1_set_auth_key_type(hs_cell_introduce1_t *inp, uint8_t val)
return 0;
}
uint16_t
-hs_cell_introduce1_get_auth_key_len(hs_cell_introduce1_t *inp)
+hs_cell_introduce1_get_auth_key_len(const hs_cell_introduce1_t *inp)
{
return inp->auth_key_len;
}
@@ -543,7 +543,7 @@ hs_cell_introduce_ack_free(hs_cell_introduce_ack_t *obj)
}
uint16_t
-hs_cell_introduce_ack_get_status(hs_cell_introduce_ack_t *inp)
+hs_cell_introduce_ack_get_status(const hs_cell_introduce_ack_t *inp)
{
return inp->status;
}
@@ -830,7 +830,7 @@ hs_cell_introduce_encrypted_set0_extensions(hs_cell_introduce_encrypted_t *inp,
return 0;
}
uint8_t
-hs_cell_introduce_encrypted_get_onion_key_type(hs_cell_introduce_encrypted_t *inp)
+hs_cell_introduce_encrypted_get_onion_key_type(const hs_cell_introduce_encrypted_t *inp)
{
return inp->onion_key_type;
}
@@ -845,7 +845,7 @@ hs_cell_introduce_encrypted_set_onion_key_type(hs_cell_introduce_encrypted_t *in
return 0;
}
uint16_t
-hs_cell_introduce_encrypted_get_onion_key_len(hs_cell_introduce_encrypted_t *inp)
+hs_cell_introduce_encrypted_get_onion_key_len(const hs_cell_introduce_encrypted_t *inp)
{
return inp->onion_key_len;
}
@@ -923,7 +923,7 @@ hs_cell_introduce_encrypted_setlen_onion_key(hs_cell_introduce_encrypted_t *inp,
return -1;
}
uint8_t
-hs_cell_introduce_encrypted_get_nspec(hs_cell_introduce_encrypted_t *inp)
+hs_cell_introduce_encrypted_get_nspec(const hs_cell_introduce_encrypted_t *inp)
{
return inp->nspec;
}
diff --git a/src/trunnel/hs/cell_introduce1.h b/src/trunnel/hs/cell_introduce1.h
index 09ee0fb4b3..ccd2cda904 100644
--- a/src/trunnel/hs/cell_introduce1.h
+++ b/src/trunnel/hs/cell_introduce1.h
@@ -1,4 +1,4 @@
-/* cell_introduce1.h -- generated by by Trunnel v1.5.
+/* cell_introduce1.h -- generated by by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -110,7 +110,7 @@ const uint8_t * hs_cell_introduce1_getconstarray_legacy_key_id(const hs_cell_in
/** Return the value of the auth_key_type field of the
* hs_cell_introduce1_t in 'inp'
*/
-uint8_t hs_cell_introduce1_get_auth_key_type(hs_cell_introduce1_t *inp);
+uint8_t hs_cell_introduce1_get_auth_key_type(const hs_cell_introduce1_t *inp);
/** Set the value of the auth_key_type field of the
* hs_cell_introduce1_t in 'inp' to 'val'. Return 0 on success; return
* -1 and set the error code on 'inp' on failure.
@@ -119,7 +119,7 @@ int hs_cell_introduce1_set_auth_key_type(hs_cell_introduce1_t *inp, uint8_t val)
/** Return the value of the auth_key_len field of the
* hs_cell_introduce1_t in 'inp'
*/
-uint16_t hs_cell_introduce1_get_auth_key_len(hs_cell_introduce1_t *inp);
+uint16_t hs_cell_introduce1_get_auth_key_len(const hs_cell_introduce1_t *inp);
/** Set the value of the auth_key_len field of the
* hs_cell_introduce1_t in 'inp' to 'val'. Return 0 on success; return
* -1 and set the error code on 'inp' on failure.
@@ -250,7 +250,7 @@ int hs_cell_introduce_ack_clear_errors(hs_cell_introduce_ack_t *obj);
/** Return the value of the status field of the
* hs_cell_introduce_ack_t in 'inp'
*/
-uint16_t hs_cell_introduce_ack_get_status(hs_cell_introduce_ack_t *inp);
+uint16_t hs_cell_introduce_ack_get_status(const hs_cell_introduce_ack_t *inp);
/** Set the value of the status field of the hs_cell_introduce_ack_t
* in 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -358,7 +358,7 @@ int hs_cell_introduce_encrypted_set0_extensions(hs_cell_introduce_encrypted_t *i
/** Return the value of the onion_key_type field of the
* hs_cell_introduce_encrypted_t in 'inp'
*/
-uint8_t hs_cell_introduce_encrypted_get_onion_key_type(hs_cell_introduce_encrypted_t *inp);
+uint8_t hs_cell_introduce_encrypted_get_onion_key_type(const hs_cell_introduce_encrypted_t *inp);
/** Set the value of the onion_key_type field of the
* hs_cell_introduce_encrypted_t in 'inp' to 'val'. Return 0 on
* success; return -1 and set the error code on 'inp' on failure.
@@ -367,7 +367,7 @@ int hs_cell_introduce_encrypted_set_onion_key_type(hs_cell_introduce_encrypted_t
/** Return the value of the onion_key_len field of the
* hs_cell_introduce_encrypted_t in 'inp'
*/
-uint16_t hs_cell_introduce_encrypted_get_onion_key_len(hs_cell_introduce_encrypted_t *inp);
+uint16_t hs_cell_introduce_encrypted_get_onion_key_len(const hs_cell_introduce_encrypted_t *inp);
/** Set the value of the onion_key_len field of the
* hs_cell_introduce_encrypted_t in 'inp' to 'val'. Return 0 on
* success; return -1 and set the error code on 'inp' on failure.
@@ -410,7 +410,7 @@ int hs_cell_introduce_encrypted_setlen_onion_key(hs_cell_introduce_encrypted_t *
/** Return the value of the nspec field of the
* hs_cell_introduce_encrypted_t in 'inp'
*/
-uint8_t hs_cell_introduce_encrypted_get_nspec(hs_cell_introduce_encrypted_t *inp);
+uint8_t hs_cell_introduce_encrypted_get_nspec(const hs_cell_introduce_encrypted_t *inp);
/** Set the value of the nspec field of the
* hs_cell_introduce_encrypted_t in 'inp' to 'val'. Return 0 on
* success; return -1 and set the error code on 'inp' on failure.
diff --git a/src/trunnel/link_handshake.c b/src/trunnel/link_handshake.c
index a4b1fe034a..887f710d9c 100644
--- a/src/trunnel/link_handshake.c
+++ b/src/trunnel/link_handshake.c
@@ -1,4 +1,4 @@
-/* link_handshake.c -- generated by Trunnel v1.5.
+/* link_handshake.c -- generated by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -94,7 +94,7 @@ auth_challenge_cell_getconstarray_challenge(const auth_challenge_cell_t *inp)
return (const uint8_t *)auth_challenge_cell_getarray_challenge((auth_challenge_cell_t*)inp);
}
uint16_t
-auth_challenge_cell_get_n_methods(auth_challenge_cell_t *inp)
+auth_challenge_cell_get_n_methods(const auth_challenge_cell_t *inp)
{
return inp->n_methods;
}
@@ -362,7 +362,7 @@ auth_ctx_free(auth_ctx_t *obj)
}
uint8_t
-auth_ctx_get_is_ed(auth_ctx_t *inp)
+auth_ctx_get_is_ed(const auth_ctx_t *inp)
{
return inp->is_ed;
}
@@ -402,7 +402,7 @@ certs_cell_cert_free(certs_cell_cert_t *obj)
}
uint8_t
-certs_cell_cert_get_cert_type(certs_cell_cert_t *inp)
+certs_cell_cert_get_cert_type(const certs_cell_cert_t *inp)
{
return inp->cert_type;
}
@@ -413,7 +413,7 @@ certs_cell_cert_set_cert_type(certs_cell_cert_t *inp, uint8_t val)
return 0;
}
uint16_t
-certs_cell_cert_get_cert_len(certs_cell_cert_t *inp)
+certs_cell_cert_get_cert_len(const certs_cell_cert_t *inp)
{
return inp->cert_len;
}
@@ -712,7 +712,7 @@ rsa_ed_crosscert_getconstarray_ed_key(const rsa_ed_crosscert_t *inp)
return (const uint8_t *)rsa_ed_crosscert_getarray_ed_key((rsa_ed_crosscert_t*)inp);
}
uint32_t
-rsa_ed_crosscert_get_expiration(rsa_ed_crosscert_t *inp)
+rsa_ed_crosscert_get_expiration(const rsa_ed_crosscert_t *inp)
{
return inp->expiration;
}
@@ -728,7 +728,7 @@ rsa_ed_crosscert_get_end_of_signed(const rsa_ed_crosscert_t *inp)
return inp->end_of_signed;
}
uint8_t
-rsa_ed_crosscert_get_sig_len(rsa_ed_crosscert_t *inp)
+rsa_ed_crosscert_get_sig_len(const rsa_ed_crosscert_t *inp)
{
return inp->sig_len;
}
@@ -1807,7 +1807,7 @@ certs_cell_free(certs_cell_t *obj)
}
uint8_t
-certs_cell_get_n_certs(certs_cell_t *inp)
+certs_cell_get_n_certs(const certs_cell_t *inp)
{
return inp->n_certs;
}
diff --git a/src/trunnel/link_handshake.h b/src/trunnel/link_handshake.h
index 0b2ad344ab..418662631a 100644
--- a/src/trunnel/link_handshake.h
+++ b/src/trunnel/link_handshake.h
@@ -1,4 +1,4 @@
-/* link_handshake.h -- generated by by Trunnel v1.5.
+/* link_handshake.h -- generated by by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -141,7 +141,7 @@ const uint8_t * auth_challenge_cell_getconstarray_challenge(const auth_challeng
/** Return the value of the n_methods field of the
* auth_challenge_cell_t in 'inp'
*/
-uint16_t auth_challenge_cell_get_n_methods(auth_challenge_cell_t *inp);
+uint16_t auth_challenge_cell_get_n_methods(const auth_challenge_cell_t *inp);
/** Set the value of the n_methods field of the auth_challenge_cell_t
* in 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -190,7 +190,7 @@ auth_ctx_t *auth_ctx_new(void);
void auth_ctx_free(auth_ctx_t *victim);
/** Return the value of the is_ed field of the auth_ctx_t in 'inp'
*/
-uint8_t auth_ctx_get_is_ed(auth_ctx_t *inp);
+uint8_t auth_ctx_get_is_ed(const auth_ctx_t *inp);
/** Set the value of the is_ed field of the auth_ctx_t in 'inp' to
* 'val'. Return 0 on success; return -1 and set the error code on
* 'inp' on failure.
@@ -235,7 +235,7 @@ int certs_cell_cert_clear_errors(certs_cell_cert_t *obj);
/** Return the value of the cert_type field of the certs_cell_cert_t
* in 'inp'
*/
-uint8_t certs_cell_cert_get_cert_type(certs_cell_cert_t *inp);
+uint8_t certs_cell_cert_get_cert_type(const certs_cell_cert_t *inp);
/** Set the value of the cert_type field of the certs_cell_cert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -244,7 +244,7 @@ int certs_cell_cert_set_cert_type(certs_cell_cert_t *inp, uint8_t val);
/** Return the value of the cert_len field of the certs_cell_cert_t in
* 'inp'
*/
-uint16_t certs_cell_cert_get_cert_len(certs_cell_cert_t *inp);
+uint16_t certs_cell_cert_get_cert_len(const certs_cell_cert_t *inp);
/** Set the value of the cert_len field of the certs_cell_cert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -344,7 +344,7 @@ const uint8_t * rsa_ed_crosscert_getconstarray_ed_key(const rsa_ed_crosscert_t
/** Return the value of the expiration field of the rsa_ed_crosscert_t
* in 'inp'
*/
-uint32_t rsa_ed_crosscert_get_expiration(rsa_ed_crosscert_t *inp);
+uint32_t rsa_ed_crosscert_get_expiration(const rsa_ed_crosscert_t *inp);
/** Set the value of the expiration field of the rsa_ed_crosscert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -356,7 +356,7 @@ const uint8_t * rsa_ed_crosscert_get_end_of_signed(const rsa_ed_crosscert_t *inp
/** Return the value of the sig_len field of the rsa_ed_crosscert_t in
* 'inp'
*/
-uint8_t rsa_ed_crosscert_get_sig_len(rsa_ed_crosscert_t *inp);
+uint8_t rsa_ed_crosscert_get_sig_len(const rsa_ed_crosscert_t *inp);
/** Set the value of the sig_len field of the rsa_ed_crosscert_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -715,7 +715,7 @@ const char *certs_cell_check(const certs_cell_t *obj);
int certs_cell_clear_errors(certs_cell_t *obj);
/** Return the value of the n_certs field of the certs_cell_t in 'inp'
*/
-uint8_t certs_cell_get_n_certs(certs_cell_t *inp);
+uint8_t certs_cell_get_n_certs(const certs_cell_t *inp);
/** Set the value of the n_certs field of the certs_cell_t in 'inp' to
* 'val'. Return 0 on success; return -1 and set the error code on
* 'inp' on failure.
diff --git a/src/trunnel/pwbox.c b/src/trunnel/pwbox.c
index 059fcfd7da..f4b910bdab 100644
--- a/src/trunnel/pwbox.c
+++ b/src/trunnel/pwbox.c
@@ -1,4 +1,4 @@
-/* pwbox.c -- generated by Trunnel v1.5.
+/* pwbox.c -- generated by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -62,7 +62,7 @@ pwbox_encoded_free(pwbox_encoded_t *obj)
}
uint32_t
-pwbox_encoded_get_fixedbytes0(pwbox_encoded_t *inp)
+pwbox_encoded_get_fixedbytes0(const pwbox_encoded_t *inp)
{
return inp->fixedbytes0;
}
@@ -77,7 +77,7 @@ pwbox_encoded_set_fixedbytes0(pwbox_encoded_t *inp, uint32_t val)
return 0;
}
uint32_t
-pwbox_encoded_get_fixedbytes1(pwbox_encoded_t *inp)
+pwbox_encoded_get_fixedbytes1(const pwbox_encoded_t *inp)
{
return inp->fixedbytes1;
}
@@ -92,7 +92,7 @@ pwbox_encoded_set_fixedbytes1(pwbox_encoded_t *inp, uint32_t val)
return 0;
}
uint8_t
-pwbox_encoded_get_header_len(pwbox_encoded_t *inp)
+pwbox_encoded_get_header_len(const pwbox_encoded_t *inp)
{
return inp->header_len;
}
diff --git a/src/trunnel/pwbox.h b/src/trunnel/pwbox.h
index 9376a7cd1b..939b3c41a7 100644
--- a/src/trunnel/pwbox.h
+++ b/src/trunnel/pwbox.h
@@ -1,4 +1,4 @@
-/* pwbox.h -- generated by by Trunnel v1.5.
+/* pwbox.h -- generated by by Trunnel v1.5.1.
* https://gitweb.torproject.org/trunnel.git
* You probably shouldn't edit this file.
*/
@@ -61,7 +61,7 @@ int pwbox_encoded_clear_errors(pwbox_encoded_t *obj);
/** Return the value of the fixedbytes0 field of the pwbox_encoded_t
* in 'inp'
*/
-uint32_t pwbox_encoded_get_fixedbytes0(pwbox_encoded_t *inp);
+uint32_t pwbox_encoded_get_fixedbytes0(const pwbox_encoded_t *inp);
/** Set the value of the fixedbytes0 field of the pwbox_encoded_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -70,7 +70,7 @@ int pwbox_encoded_set_fixedbytes0(pwbox_encoded_t *inp, uint32_t val);
/** Return the value of the fixedbytes1 field of the pwbox_encoded_t
* in 'inp'
*/
-uint32_t pwbox_encoded_get_fixedbytes1(pwbox_encoded_t *inp);
+uint32_t pwbox_encoded_get_fixedbytes1(const pwbox_encoded_t *inp);
/** Set the value of the fixedbytes1 field of the pwbox_encoded_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.
@@ -79,7 +79,7 @@ int pwbox_encoded_set_fixedbytes1(pwbox_encoded_t *inp, uint32_t val);
/** Return the value of the header_len field of the pwbox_encoded_t in
* 'inp'
*/
-uint8_t pwbox_encoded_get_header_len(pwbox_encoded_t *inp);
+uint8_t pwbox_encoded_get_header_len(const pwbox_encoded_t *inp);
/** Set the value of the header_len field of the pwbox_encoded_t in
* 'inp' to 'val'. Return 0 on success; return -1 and set the error
* code on 'inp' on failure.